diff --git a/kernel/trunk/blkdev/cd_drv.inc b/kernel/trunk/blkdev/cd_drv.inc index 5516e0b5ab..7585e677c2 100644 --- a/kernel/trunk/blkdev/cd_drv.inc +++ b/kernel/trunk/blkdev/cd_drv.inc @@ -33,32 +33,32 @@ NoTickWaitTime equ 0xfffff ;* Данные считывается в массив CDDataBuf. * ;************************************************* ReadCD: - pusha + pusha ; Задать размер сектора - mov [CDBlockSize],2048 ;2352 + mov [CDBlockSize],2048 ;2352 ; Очистить буфер пакетной команды - call clear_packet_buffer + call clear_packet_buffer ; Сформировать пакетную команду для считывания ; сектора данных - ; Задать код команды Read CD - mov [PacketCommand],byte 0x28 ;0xBE - ; Задать адрес сектора - mov AX,word [CDSectorAddress+2] - xchg AL,AH - mov word [PacketCommand+2],AX - mov AX,word [CDSectorAddress] - xchg AL,AH - mov word [PacketCommand+4],AX + ; Задать код команды Read CD + mov [PacketCommand],byte 0x28 ;0xBE + ; Задать адрес сектора + mov AX,word [CDSectorAddress+2] + xchg AL,AH + mov word [PacketCommand+2],AX + mov AX,word [CDSectorAddress] + xchg AL,AH + mov word [PacketCommand+4],AX ; mov eax,[CDSectorAddress] ; mov [PacketCommand+2],eax - ; Задать количество считываемых секторов - mov [PacketCommand+8],byte 1 - ; Задать считывание данных в полном объеме + ; Задать количество считываемых секторов + mov [PacketCommand+8],byte 1 + ; Задать считывание данных в полном объеме ; mov [PacketCommand+9],byte 0xF8 ; Подать команду - call SendPacketDatCommand - popa - ret + call SendPacketDatCommand + popa + ret ;******************************************** ;* ЧТЕНИЕ СЕКТОРА С ПОВТОРАМИ * @@ -78,14 +78,14 @@ ReadCDWRetr: .hdreadcache: ; cmp dword [esi+4],0 ; empty ; je .nohdcache - cmp [esi],eax ; correct sector - je .yeshdcache + cmp [esi],eax ; correct sector + je .yeshdcache .nohdcache: add esi,8 inc edi dec ecx jnz .hdreadcache - call find_empty_slot_CD_cache ; ret in edi + call find_empty_slot_CD_cache ; ret in edi push edi push eax @@ -103,7 +103,7 @@ ReadCDWRetr: mov [CDDataBuf_pointer],ebx call cd_calculate_cache_1 lea esi,[edi*8+esi] - mov [esi],eax ; sector number + mov [esi],eax ; sector number ; mov dword [esi+4],1 ; hd read - mark as same as in hd .yeshdcache: mov esi,edi @@ -115,35 +115,35 @@ ReadCDWRetr: mov edi,ebx ;[CDDataBuf_pointer] mov ecx,512 ;/4 cld - rep movsd ; move data + rep movsd ; move data .exit: popad ret ReadCDWRetr_1: - pushad + pushad ; Цикл, пока команда не выполнена успешно или не ; исчерпано количество попыток - mov ECX,MaxRetr + mov ECX,MaxRetr @@NextRetr: ; Подать команду - call ReadCD - cmp [DevErrorCode],0 - je @@End_4 + call ReadCD + cmp [DevErrorCode],0 + je @@End_4 - or ecx,ecx ;{SPraid.simba} (for cd load) - jz @@End_4 - dec ecx + or ecx,ecx ;{SPraid.simba} (for cd load) + jz @@End_4 + dec ecx - cmp [timer_ticks_enable],0 - jne @f - mov eax,NoTickWaitTime + cmp [timer_ticks_enable],0 + jne @f + mov eax,NoTickWaitTime .wait: - dec eax - cmp eax,0 - je @@NextRetr - jmp .wait + dec eax + cmp eax,0 + je @@NextRetr + jmp .wait @@: ; Задержка на 2,5 секунды ; mov EAX,[timer_ticks] @@ -152,10 +152,10 @@ ReadCDWRetr_1: ; call change_task ; cmp EAX,[timer_ticks] ; ja @@Wait - loop @@NextRetr + loop @@NextRetr @@End_4: - popad - ret + popad + ret ; Универсальные процедуры, обеспечивающие выполнение @@ -166,11 +166,11 @@ ReadCDWRetr_1: MaxCDWaitTime equ 1000 ;200 ;10 секунд ; Область памяти для формирования пакетной команды -PacketCommand: rb 12 ;DB 12 DUP (?) +PacketCommand: rb 12 ;DB 12 DUP (?) ; Область памяти для приема данных от дисковода ;CDDataBuf DB 4096 DUP (0) ; Размер принимаемого блока данных в байтах -CDBlockSize DW ? +CDBlockSize DW ? ; Адрес считываемого сектора данных CDSectorAddress: DD ? ; Время начала очередной операции с диском @@ -192,123 +192,123 @@ CDDataBuf_pointer dd 0 ;* CDBlockSize - размер принимаемого блока данных. * ;**************************************************** SendPacketDatCommand: - pushad - mov [DevErrorCode],0 + pushad + mov [DevErrorCode],0 ; Задать режим CHS - mov [ATAAddressMode],0 + mov [ATAAddressMode],0 ; Послать ATA-команду передачи пакетной команды - mov [ATAFeatures],0 - mov [ATASectorCount],0 - mov [ATASectorNumber],0 - ; Загрузить размер передаваемого блока - mov AX,[CDBlockSize] - mov [ATACylinder],AX - mov [ATAHead],0 - mov [ATACommand],0A0h - call SendCommandToHDD_1 - cmp [DevErrorCode],0 ;проверить код ошибки - jne @@End_8 ;закончить, сохранив код ошибки + mov [ATAFeatures],0 + mov [ATASectorCount],0 + mov [ATASectorNumber],0 + ; Загрузить размер передаваемого блока + mov AX,[CDBlockSize] + mov [ATACylinder],AX + mov [ATAHead],0 + mov [ATACommand],0A0h + call SendCommandToHDD_1 + cmp [DevErrorCode],0 ;проверить код ошибки + jne @@End_8 ;закончить, сохранив код ошибки ; Ожидание готовности дисковода к приему ; пакетной команды - mov DX,[ATABasePortAddr] - add DX,7 ;порт 1х7h - mov ecx,NoTickWaitTime + mov DX,[ATABasePortAddr] + add DX,7 ;порт 1х7h + mov ecx,NoTickWaitTime @@WaitDevice0: - cmp [timer_ticks_enable],0 - jne @f - dec ecx - cmp ecx,0 - je @@Err1_1 - jmp .test + cmp [timer_ticks_enable],0 + jne @f + dec ecx + cmp ecx,0 + je @@Err1_1 + jmp .test @@: - call change_task - ; Проверить время выполнения команды - mov EAX,[timer_ticks] - sub EAX,[TickCounter_1] - cmp EAX,BSYWaitTime - ja @@Err1_1 ;ошибка тайм-аута - ; Проверить готовность + call change_task + ; Проверить время выполнения команды + mov EAX,[timer_ticks] + sub EAX,[TickCounter_1] + cmp EAX,BSYWaitTime + ja @@Err1_1 ;ошибка тайм-аута + ; Проверить готовность .test: - in AL,DX - test AL,80h ;состояние сигнала BSY - jnz @@WaitDevice0 - test AL,08h ;состояние сигнала DRQ - jz @@WaitDevice0 - test AL,1 ;состояние сигнала ERR - jnz @@Err6 + in AL,DX + test AL,80h ;состояние сигнала BSY + jnz @@WaitDevice0 + test AL,08h ;состояние сигнала DRQ + jz @@WaitDevice0 + test AL,1 ;состояние сигнала ERR + jnz @@Err6 ; Послать пакетную команду - cli - mov DX,[ATABasePortAddr] - mov AX,[PacketCommand] - out DX,AX - mov AX,[PacketCommand+2] - out DX,AX - mov AX,[PacketCommand+4] - out DX,AX - mov AX,[PacketCommand+6] - out DX,AX - mov AX,[PacketCommand+8] - out DX,AX - mov AX,[PacketCommand+10] - out DX,AX - sti + cli + mov DX,[ATABasePortAddr] + mov AX,[PacketCommand] + out DX,AX + mov AX,[PacketCommand+2] + out DX,AX + mov AX,[PacketCommand+4] + out DX,AX + mov AX,[PacketCommand+6] + out DX,AX + mov AX,[PacketCommand+8] + out DX,AX + mov AX,[PacketCommand+10] + out DX,AX + sti ; Ожидание готовности данных - mov DX,[ATABasePortAddr] - add DX,7 ;порт 1х7h - mov ecx,NoTickWaitTime + mov DX,[ATABasePortAddr] + add DX,7 ;порт 1х7h + mov ecx,NoTickWaitTime @@WaitDevice1: - cmp [timer_ticks_enable],0 - jne @f - dec ecx - cmp ecx,0 - je @@Err1_1 - jmp .test_1 + cmp [timer_ticks_enable],0 + jne @f + dec ecx + cmp ecx,0 + je @@Err1_1 + jmp .test_1 @@: - call change_task - ; Проверить время выполнения команды - mov EAX,[timer_ticks] - sub EAX,[TickCounter_1] - cmp EAX,MaxCDWaitTime - ja @@Err1_1 ;ошибка тайм-аута - ; Проверить готовность + call change_task + ; Проверить время выполнения команды + mov EAX,[timer_ticks] + sub EAX,[TickCounter_1] + cmp EAX,MaxCDWaitTime + ja @@Err1_1 ;ошибка тайм-аута + ; Проверить готовность .test_1: - in AL,DX - test AL,80h ;состояние сигнала BSY - jnz @@WaitDevice1 - test AL,08h ;состояние сигнала DRQ - jz @@WaitDevice1 - test AL,1 ;состояние сигнала ERR - jnz @@Err6_temp + in AL,DX + test AL,80h ;состояние сигнала BSY + jnz @@WaitDevice1 + test AL,08h ;состояние сигнала DRQ + jz @@WaitDevice1 + test AL,1 ;состояние сигнала ERR + jnz @@Err6_temp ; Принять блок данных от контроллера - mov EDI,[CDDataBuf_pointer] ;0x7000 ;CDDataBuf - ; Загрузить адрес регистра данных контроллера - mov DX,[ATABasePortAddr] ;порт 1x0h - ; Загрузить в счетчик размер блока в байтах - xor ecx,ecx - mov CX,[CDBlockSize] - ; Вычислить размер блока в 16-разрядных словах - shr CX,1 ;разделить размер блока на 2 - ; Принять блок данных - cli - cld - rep insw - sti - ; Успешное завершение приема данных - jmp @@End_8 + mov EDI,[CDDataBuf_pointer] ;0x7000 ;CDDataBuf + ; Загрузить адрес регистра данных контроллера + mov DX,[ATABasePortAddr] ;порт 1x0h + ; Загрузить в счетчик размер блока в байтах + xor ecx,ecx + mov CX,[CDBlockSize] + ; Вычислить размер блока в 16-разрядных словах + shr CX,1 ;разделить размер блока на 2 + ; Принять блок данных + cli + cld + rep insw + sti + ; Успешное завершение приема данных + jmp @@End_8 ; Записать код ошибки @@Err1_1: - mov [DevErrorCode],1 - jmp @@End_8 + mov [DevErrorCode],1 + jmp @@End_8 @@Err6_temp: - mov [DevErrorCode],7 - jmp @@End_8 + mov [DevErrorCode],7 + jmp @@End_8 @@Err6: - mov [DevErrorCode],6 + mov [DevErrorCode],6 @@End_8: - popad - ret + popad + ret @@ -322,86 +322,86 @@ SendPacketDatCommand: ;* PacketCommand - 12-байтный командный пакет. * ;*********************************************** SendPacketNoDatCommand: - pushad + pushad mov [DevErrorCode],0 ; Задать режим CHS - mov [ATAAddressMode],0 + mov [ATAAddressMode],0 ; Послать ATA-команду передачи пакетной команды - mov [ATAFeatures],0 - mov [ATASectorCount],0 - mov [ATASectorNumber],0 - mov [ATACylinder],0 - mov [ATAHead],0 - mov [ATACommand],0A0h - call SendCommandToHDD_1 - cmp [DevErrorCode],0 ;проверить код ошибки - jne @@End_9 ;закончить, сохранив код ошибки + mov [ATAFeatures],0 + mov [ATASectorCount],0 + mov [ATASectorNumber],0 + mov [ATACylinder],0 + mov [ATAHead],0 + mov [ATACommand],0A0h + call SendCommandToHDD_1 + cmp [DevErrorCode],0 ;проверить код ошибки + jne @@End_9 ;закончить, сохранив код ошибки ; Ожидание готовности дисковода к приему ; пакетной команды - mov DX,[ATABasePortAddr] - add DX,7 ;порт 1х7h + mov DX,[ATABasePortAddr] + add DX,7 ;порт 1х7h @@WaitDevice0_1: - call change_task - ; Проверить время ожидания - mov EAX,[timer_ticks] - sub EAX,[TickCounter_1] - cmp EAX,BSYWaitTime - ja @@Err1_3 ;ошибка тайм-аута - ; Проверить готовность - in AL,DX - test AL,80h ;состояние сигнала BSY - jnz @@WaitDevice0_1 - test AL,1 ;состояние сигнала ERR - jnz @@Err6_1 - test AL,08h ;состояние сигнала DRQ - jz @@WaitDevice0_1 + call change_task + ; Проверить время ожидания + mov EAX,[timer_ticks] + sub EAX,[TickCounter_1] + cmp EAX,BSYWaitTime + ja @@Err1_3 ;ошибка тайм-аута + ; Проверить готовность + in AL,DX + test AL,80h ;состояние сигнала BSY + jnz @@WaitDevice0_1 + test AL,1 ;состояние сигнала ERR + jnz @@Err6_1 + test AL,08h ;состояние сигнала DRQ + jz @@WaitDevice0_1 ; Послать пакетную команду ; cli - mov DX,[ATABasePortAddr] - mov AX,word [PacketCommand] - out DX,AX - mov AX,word [PacketCommand+2] - out DX,AX - mov AX,word [PacketCommand+4] - out DX,AX - mov AX,word [PacketCommand+6] - out DX,AX - mov AX,word [PacketCommand+8] - out DX,AX - mov AX,word [PacketCommand+10] - out DX,AX + mov DX,[ATABasePortAddr] + mov AX,word [PacketCommand] + out DX,AX + mov AX,word [PacketCommand+2] + out DX,AX + mov AX,word [PacketCommand+4] + out DX,AX + mov AX,word [PacketCommand+6] + out DX,AX + mov AX,word [PacketCommand+8] + out DX,AX + mov AX,word [PacketCommand+10] + out DX,AX ; sti cmp [ignore_CD_eject_wait],1 - je @@End_9 + je @@End_9 ; Ожидание подтверждения приема команды - mov DX,[ATABasePortAddr] - add DX,7 ;порт 1х7h + mov DX,[ATABasePortAddr] + add DX,7 ;порт 1х7h @@WaitDevice1_1: - call change_task - ; Проверить время выполнения команды - mov EAX,[timer_ticks] - sub EAX,[TickCounter_1] - cmp EAX,MaxCDWaitTime - ja @@Err1_3 ;ошибка тайм-аута - ; Ожидать освобождения устройства - in AL,DX - test AL,80h ;состояние сигнала BSY - jnz @@WaitDevice1_1 - test AL,1 ;состояние сигнала ERR - jnz @@Err6_1 - test AL,40h ;состояние сигнала DRDY - jz @@WaitDevice1_1 - jmp @@End_9 + call change_task + ; Проверить время выполнения команды + mov EAX,[timer_ticks] + sub EAX,[TickCounter_1] + cmp EAX,MaxCDWaitTime + ja @@Err1_3 ;ошибка тайм-аута + ; Ожидать освобождения устройства + in AL,DX + test AL,80h ;состояние сигнала BSY + jnz @@WaitDevice1_1 + test AL,1 ;состояние сигнала ERR + jnz @@Err6_1 + test AL,40h ;состояние сигнала DRDY + jz @@WaitDevice1_1 + jmp @@End_9 ; Записать код ошибки @@Err1_3: - mov [DevErrorCode],1 - jmp @@End_9 + mov [DevErrorCode],1 + jmp @@End_9 @@Err6_1: - mov [DevErrorCode],6 + mov [DevErrorCode],6 @@End_9: - popad - ret + popad + ret ;**************************************************** ;* ПОСЛАТЬ КОМАНДУ ЗАДАННОМУ ДИСКУ * @@ -423,119 +423,119 @@ SendPacketNoDatCommand: ;* возвращен код ошибки. * ;**************************************************** SendCommandToHDD_1: - pushad + pushad mov [DevErrorCode],0 ; Проверить значение кода режима - cmp [ATAAddressMode],1 - ja @@Err2_4 + cmp [ATAAddressMode],1 + ja @@Err2_4 ; Проверить корректность номера канала - mov BX,[ChannelNumber] - cmp BX,1 - jb @@Err3_4 - cmp BX,2 - ja @@Err3_4 + mov BX,[ChannelNumber] + cmp BX,1 + jb @@Err3_4 + cmp BX,2 + ja @@Err3_4 ; Установить базовый адрес - dec BX - shl BX,1 - movzx ebx,bx - mov AX,[ebx+StandardATABases] - mov [ATABasePortAddr],AX + dec BX + shl BX,1 + movzx ebx,bx + mov AX,[ebx+StandardATABases] + mov [ATABasePortAddr],AX ; Ожидание готовности HDD к приему команды - ; Выбрать нужный диск - mov DX,[ATABasePortAddr] - add DX,6 ;адрес регистра головок - mov AL,[DiskNumber] - cmp AL,1 ;проверить номера диска - ja @@Err4_4 - shl AL,4 - or AL,10100000b - out DX,AL - ; Ожидать, пока диск не будет готов - inc DX - mov eax,[timer_ticks] - mov [TickCounter_1],eax - mov ecx,NoTickWaitTime + ; Выбрать нужный диск + mov DX,[ATABasePortAddr] + add DX,6 ;адрес регистра головок + mov AL,[DiskNumber] + cmp AL,1 ;проверить номера диска + ja @@Err4_4 + shl AL,4 + or AL,10100000b + out DX,AL + ; Ожидать, пока диск не будет готов + inc DX + mov eax,[timer_ticks] + mov [TickCounter_1],eax + mov ecx,NoTickWaitTime @@WaitHDReady_2: - cmp [timer_ticks_enable],0 - jne @f - dec ecx - cmp ecx,0 - je @@Err1_4 - jmp .test + cmp [timer_ticks_enable],0 + jne @f + dec ecx + cmp ecx,0 + je @@Err1_4 + jmp .test @@: - call change_task - ; Проверить время ожидания - mov eax,[timer_ticks] - sub eax,[TickCounter_1] - cmp eax,BSYWaitTime ;300 ;ожидать 3 сек. - ja @@Err1_4 ;ошибка тайм-аута - ; Прочитать регистр состояния + call change_task + ; Проверить время ожидания + mov eax,[timer_ticks] + sub eax,[TickCounter_1] + cmp eax,BSYWaitTime ;300 ;ожидать 3 сек. + ja @@Err1_4 ;ошибка тайм-аута + ; Прочитать регистр состояния .test: - in AL,DX - ; Проверить состояние сигнала BSY - test AL,80h - jnz @@WaitHDReady_2 - ; Проверить состояние сигнала DRQ - test AL,08h - jnz @@WaitHDReady_2 + in AL,DX + ; Проверить состояние сигнала BSY + test AL,80h + jnz @@WaitHDReady_2 + ; Проверить состояние сигнала DRQ + test AL,08h + jnz @@WaitHDReady_2 ; Загрузить команду в регистры контроллера - cli - mov DX,[ATABasePortAddr] - inc DX ;регистр "особенностей" - mov AL,[ATAFeatures] - out DX,AL - inc DX ;счетчик секторов - mov AL,[ATASectorCount] - out DX,AL - inc DX ;регистр номера сектора - mov AL,[ATASectorNumber] - out DX,AL - inc DX ;номер цилиндра (младший байт) - mov AX,[ATACylinder] - out DX,AL - inc DX ;номер цилиндра (старший байт) - mov AL,AH - out DX,AL - inc DX ;номер головки/номер диска - mov AL,[DiskNumber] - shl AL,4 - cmp [ATAHead],0Fh ;проверить номер головки - ja @@Err5_4 - or AL,[ATAHead] - or AL,10100000b - mov AH,[ATAAddressMode] - shl AH,6 - or AL,AH - out DX,AL + cli + mov DX,[ATABasePortAddr] + inc DX ;регистр "особенностей" + mov AL,[ATAFeatures] + out DX,AL + inc DX ;счетчик секторов + mov AL,[ATASectorCount] + out DX,AL + inc DX ;регистр номера сектора + mov AL,[ATASectorNumber] + out DX,AL + inc DX ;номер цилиндра (младший байт) + mov AX,[ATACylinder] + out DX,AL + inc DX ;номер цилиндра (старший байт) + mov AL,AH + out DX,AL + inc DX ;номер головки/номер диска + mov AL,[DiskNumber] + shl AL,4 + cmp [ATAHead],0Fh ;проверить номер головки + ja @@Err5_4 + or AL,[ATAHead] + or AL,10100000b + mov AH,[ATAAddressMode] + shl AH,6 + or AL,AH + out DX,AL ; Послать команду - mov AL,[ATACommand] - inc DX ;регистр команд - out DX,AL - sti + mov AL,[ATACommand] + inc DX ;регистр команд + out DX,AL + sti ; Сбросить признак ошибки - mov [DevErrorCode],0 - jmp @@End_10 + mov [DevErrorCode],0 + jmp @@End_10 ; Записать код ошибки @@Err1_4: - mov [DevErrorCode],1 - jmp @@End_10 + mov [DevErrorCode],1 + jmp @@End_10 @@Err2_4: - mov [DevErrorCode],2 - jmp @@End_10 + mov [DevErrorCode],2 + jmp @@End_10 @@Err3_4: - mov [DevErrorCode],3 - jmp @@End_10 + mov [DevErrorCode],3 + jmp @@End_10 @@Err4_4: - mov [DevErrorCode],4 - jmp @@End_10 + mov [DevErrorCode],4 + jmp @@End_10 @@Err5_4: - mov [DevErrorCode],5 + mov [DevErrorCode],5 ; Завершение работы программы @@End_10: ; sti - popad - ret + popad + ret ;************************************************* ;* ОЖИДАНИЕ ГОТОВНОСТИ УСТРОЙСТВА К РАБОТЕ * @@ -545,43 +545,43 @@ SendCommandToHDD_1: ;* DiskNumber - номер диска на канале. * ;************************************************* WaitUnitReady: - pusha + pusha ; Запомнить время начала операции - mov EAX,[timer_ticks] - mov [WURStartTime],EAX + mov EAX,[timer_ticks] + mov [WURStartTime],EAX ; Очистить буфер пакетной команды - call clear_packet_buffer + call clear_packet_buffer ; Сформировать команду TEST UNIT READY - mov [PacketCommand],word 00h + mov [PacketCommand],word 00h ; ЦИКЛ ОЖИДАНИЯ ГОТОВНОСТИ УСТРОЙСТВА - mov ecx,NoTickWaitTime + mov ecx,NoTickWaitTime @@SendCommand: - ; Подать команду проверки готовности - call SendPacketNoDatCommand - cmp [timer_ticks_enable],0 - jne @f - cmp [DevErrorCode],0 - je @@End_11 - dec ecx - cmp ecx,0 - je .Error - jmp @@SendCommand + ; Подать команду проверки готовности + call SendPacketNoDatCommand + cmp [timer_ticks_enable],0 + jne @f + cmp [DevErrorCode],0 + je @@End_11 + dec ecx + cmp ecx,0 + je .Error + jmp @@SendCommand @@: - call change_task - ; Проверить код ошибки - cmp [DevErrorCode],0 - je @@End_11 - ; Проверить время ожидания готовности - mov EAX,[timer_ticks] - sub EAX,[WURStartTime] - cmp EAX,MaxCDWaitTime - jb @@SendCommand + call change_task + ; Проверить код ошибки + cmp [DevErrorCode],0 + je @@End_11 + ; Проверить время ожидания готовности + mov EAX,[timer_ticks] + sub EAX,[WURStartTime] + cmp EAX,MaxCDWaitTime + jb @@SendCommand .Error: - ; Ошибка тайм-аута - mov [DevErrorCode],1 + ; Ошибка тайм-аута + mov [DevErrorCode],1 @@End_11: - popa - ret + popa + ret ;************************************************* ;* ЗАПРЕТИТЬ СМЕНУ ДИСКА * @@ -591,21 +591,21 @@ WaitUnitReady: ;* DiskNumber - номер диска на канале. * ;************************************************* prevent_medium_removal: - pusha + pusha ; Очистить буфер пакетной команды - call clear_packet_buffer + call clear_packet_buffer ; Задать код команды - mov [PacketCommand],byte 0x1E + mov [PacketCommand],byte 0x1E ; Задать код запрета mov [PacketCommand+4],byte 11b ; Подать команду - call SendPacketNoDatCommand - mov eax,ATAPI_IDE0_lock - add eax,[cdpos] - dec eax - mov [eax],byte 1 - popa - ret + call SendPacketNoDatCommand + mov eax,ATAPI_IDE0_lock + add eax,[cdpos] + dec eax + mov [eax],byte 1 + popa + ret ;************************************************* ;* РАЗРЕШИТЬ СМЕНУ ДИСКА * @@ -615,21 +615,21 @@ prevent_medium_removal: ;* DiskNumber - номер диска на канале. * ;************************************************* allow_medium_removal: - pusha + pusha ; Очистить буфер пакетной команды - call clear_packet_buffer + call clear_packet_buffer ; Задать код команды - mov [PacketCommand],byte 0x1E + mov [PacketCommand],byte 0x1E ; Задать код запрета mov [PacketCommand+4],byte 00b ; Подать команду - call SendPacketNoDatCommand - mov eax,ATAPI_IDE0_lock - add eax,[cdpos] - dec eax - mov [eax],byte 0 - popa - ret + call SendPacketNoDatCommand + mov eax,ATAPI_IDE0_lock + add eax,[cdpos] + dec eax + mov [eax],byte 0 + popa + ret ;************************************************* ;* ЗАГРУЗИТЬ НОСИТЕЛЬ В ДИСКОВОД * @@ -639,18 +639,18 @@ allow_medium_removal: ;* DiskNumber - номер диска на канале. * ;************************************************* LoadMedium: - pusha + pusha ; Очистить буфер пакетной команды - call clear_packet_buffer + call clear_packet_buffer ; Сформировать команду START/STOP UNIT - ; Задать код команды - mov [PacketCommand],word 1Bh - ; Задать операцию загрузки носителя - mov [PacketCommand+4],word 00000011b + ; Задать код команды + mov [PacketCommand],word 1Bh + ; Задать операцию загрузки носителя + mov [PacketCommand+4],word 00000011b ; Подать команду - call SendPacketNoDatCommand - popa - ret + call SendPacketNoDatCommand + popa + ret ;************************************************* ;* ИЗВЛЕЧЬ НОСИТЕЛЬ ИЗ ДИСКОВОДА * @@ -660,18 +660,18 @@ LoadMedium: ;* DiskNumber - номер диска на канале. * ;************************************************* EjectMedium: - pusha + pusha ; Очистить буфер пакетной команды - call clear_packet_buffer + call clear_packet_buffer ; Сформировать команду START/STOP UNIT - ; Задать код команды - mov [PacketCommand],word 1Bh - ; Задать операцию извлечения носителя - mov [PacketCommand+4],word 00000010b + ; Задать код команды + mov [PacketCommand],word 1Bh + ; Задать операцию извлечения носителя + mov [PacketCommand+4],word 00000010b ; Подать команду - call SendPacketNoDatCommand - popa - ret + call SendPacketNoDatCommand + popa + ret ;************************************************* ;* Проверить событие нажатия кнопки извлечения * @@ -681,39 +681,40 @@ EjectMedium: ;* ChannelNumber - номер канала; * ;* DiskNumber - номер диска на канале. * ;************************************************* +align 4 check_ATAPI_device_event: - pusha + pusha mov eax,[timer_ticks] sub eax,[timer_ATAPI_check] cmp eax,100 - jb .end_1 + jb .end_1 mov al,[DRIVE_DATA+1] and al,11b cmp al,10b - jz .ide3 + jz .ide3 .ide2_1: mov al,[DRIVE_DATA+1] and al,1100b cmp al,1000b - jz .ide2 + jz .ide2 .ide1_1: mov al,[DRIVE_DATA+1] and al,110000b cmp al,100000b - jz .ide1 + jz .ide1 .ide0_1: mov al,[DRIVE_DATA+1] and al,11000000b cmp al,10000000b - jz .ide0 + jz .ide0 .end: sti mov eax,[timer_ticks] mov [timer_ATAPI_check],eax .end_1: - popa - ret + popa + ret .ide3: cli @@ -723,19 +724,19 @@ check_ATAPI_device_event: jne .ide1_1 cmp [cd_status],0 jne .end - mov [IDE_Channel_2],1 + mov [IDE_Channel_2],1 call reserve_ok2 - mov [ChannelNumber],2 - mov [DiskNumber],1 - mov [cdpos],4 - call GetEvent_StatusNotification - cmp [CDDataBuf+4],byte 1 - je .eject_ide3 - call syscall_cdaudio.free + mov [ChannelNumber],2 + mov [DiskNumber],1 + mov [cdpos],4 + call GetEvent_StatusNotification + cmp [CDDataBuf+4],byte 1 + je .eject_ide3 + call syscall_cdaudio.free jmp .ide2_1 .eject_ide3: call .eject - call syscall_cdaudio.free + call syscall_cdaudio.free jmp .ide2_1 .ide2: @@ -746,19 +747,19 @@ check_ATAPI_device_event: jne .ide1_1 cmp [cd_status],0 jne .end - mov [IDE_Channel_2],1 + mov [IDE_Channel_2],1 call reserve_ok2 - mov [ChannelNumber],2 - mov [DiskNumber],0 - mov [cdpos],3 - call GetEvent_StatusNotification - cmp [CDDataBuf+4],byte 1 - je .eject_ide2 - call syscall_cdaudio.free + mov [ChannelNumber],2 + mov [DiskNumber],0 + mov [cdpos],3 + call GetEvent_StatusNotification + cmp [CDDataBuf+4],byte 1 + je .eject_ide2 + call syscall_cdaudio.free jmp .ide1_1 .eject_ide2: call .eject - call syscall_cdaudio.free + call syscall_cdaudio.free jmp .ide1_1 .ide1: @@ -769,19 +770,19 @@ check_ATAPI_device_event: jne .end cmp [cd_status],0 jne .end - mov [IDE_Channel_1],1 + mov [IDE_Channel_1],1 call reserve_ok2 - mov [ChannelNumber],1 - mov [DiskNumber],1 - mov [cdpos],2 - call GetEvent_StatusNotification - cmp [CDDataBuf+4],byte 1 - je .eject_ide1 - call syscall_cdaudio.free + mov [ChannelNumber],1 + mov [DiskNumber],1 + mov [cdpos],2 + call GetEvent_StatusNotification + cmp [CDDataBuf+4],byte 1 + je .eject_ide1 + call syscall_cdaudio.free jmp .ide0_1 .eject_ide1: call .eject - call syscall_cdaudio.free + call syscall_cdaudio.free jmp .ide0_1 .ide0: @@ -792,28 +793,28 @@ check_ATAPI_device_event: jne .end cmp [cd_status],0 jne .end - mov [IDE_Channel_1],1 + mov [IDE_Channel_1],1 call reserve_ok2 - mov [ChannelNumber],1 - mov [DiskNumber],0 - mov [cdpos],1 - call GetEvent_StatusNotification - cmp [CDDataBuf+4],byte 1 - je .eject_ide0 - call syscall_cdaudio.free + mov [ChannelNumber],1 + mov [DiskNumber],0 + mov [cdpos],1 + call GetEvent_StatusNotification + cmp [CDDataBuf+4],byte 1 + je .eject_ide0 + call syscall_cdaudio.free jmp .end .eject_ide0: call .eject - call syscall_cdaudio.free + call syscall_cdaudio.free jmp .end .eject: - call clear_CD_cache - call allow_medium_removal - mov [ignore_CD_eject_wait],1 - call EjectMedium - mov [ignore_CD_eject_wait],0 - ret + call clear_CD_cache + call allow_medium_removal + mov [ignore_CD_eject_wait],1 + call EjectMedium + mov [ignore_CD_eject_wait],0 + ret timer_ATAPI_check dd 0 ATAPI_IDE0_lock db 0 @@ -831,22 +832,22 @@ ignore_CD_eject_wait db 0 ;* DiskNumber - номер диска на канале. * ;************************************************* GetEvent_StatusNotification: - pusha - mov [CDDataBuf_pointer],CDDataBuf + pusha + mov [CDDataBuf_pointer],CDDataBuf ; Очистить буфер пакетной команды - call clear_packet_buffer + call clear_packet_buffer ; Задать код команды - mov [PacketCommand],byte 4Ah - mov [PacketCommand+1],byte 00000001b + mov [PacketCommand],byte 4Ah + mov [PacketCommand+1],byte 00000001b ; Задать запрос класса сообщений - mov [PacketCommand+4],byte 00010000b + mov [PacketCommand+4],byte 00010000b ; Размер выделенной области - mov [PacketCommand+7],byte 8h - mov [PacketCommand+8],byte 0h + mov [PacketCommand+7],byte 8h + mov [PacketCommand+8],byte 0h ; Подать команду - call SendPacketDatCommand - popa - ret + call SendPacketDatCommand + popa + ret ;************************************************* ; прочитать информацию из TOC @@ -856,22 +857,22 @@ GetEvent_StatusNotification: ;* DiskNumber - номер диска на канале. * ;************************************************* Read_TOC: - pusha - mov [CDDataBuf_pointer],CDDataBuf + pusha + mov [CDDataBuf_pointer],CDDataBuf ; Очистить буфер пакетной команды - call clear_packet_buffer + call clear_packet_buffer ; Сформировать пакетную команду для считывания ; сектора данных - mov [PacketCommand],byte 0x43 - ; Задать формат - mov [PacketCommand+2],byte 1 + mov [PacketCommand],byte 0x43 + ; Задать формат + mov [PacketCommand+2],byte 1 ; Размер выделенной области - mov [PacketCommand+7],byte 0xFF - mov [PacketCommand+8],byte 0h + mov [PacketCommand+7],byte 0xFF + mov [PacketCommand+8],byte 0h ; Подать команду - call SendPacketDatCommand - popa - ret + call SendPacketDatCommand + popa + ret ;************************************************* ;* ОПРЕДЕЛИТЬ ОБЩЕЕ КОЛИЧЕСТВО СЕКТОРОВ НА ДИСКЕ * @@ -895,7 +896,7 @@ Read_TOC: clear_packet_buffer: ; Очистить буфер пакетной команды - mov [PacketCommand],dword 0 - mov [PacketCommand+4],dword 0 - mov [PacketCommand+8],dword 0 - ret + mov [PacketCommand],dword 0 + mov [PacketCommand+4],dword 0 + mov [PacketCommand+8],dword 0 + ret diff --git a/kernel/trunk/blkdev/flp_drv.inc b/kernel/trunk/blkdev/flp_drv.inc index d3911bebb7..127bfe48e0 100644 --- a/kernel/trunk/blkdev/flp_drv.inc +++ b/kernel/trunk/blkdev/flp_drv.inc @@ -282,6 +282,7 @@ save_timer_fdd_motor: ;***************************************** ;* ПРОВЕРКА ЗАДЕРЖКИ ВЫКЛЮЧЕНИЯ МОТОРА * ;***************************************** +align 4 check_fdd_motor_status: cmp [fdd_motor_status],0 je end_check_fdd_motor_status_1 diff --git a/kernel/trunk/gui/button.inc b/kernel/trunk/gui/button.inc index 2e293b9672..f498180f2a 100644 --- a/kernel/trunk/gui/button.inc +++ b/kernel/trunk/gui/button.inc @@ -69,103 +69,103 @@ incecx2: drawbuttonframes: - push esi - push edi - push eax - push ebx - push ecx - push edx + push esi + push edi + push eax + push ebx + push ecx + push edx - shr ebx,16 - shr ecx,16 - mov eax,[TASK_BASE] + shr ebx,16 + shr ecx,16 + mov eax,[TASK_BASE] - add ebx,[eax-twdw + WDATA.box.left] - add ecx,[eax-twdw + WDATA.box.top] - mov eax, ebx - shl eax, 16 - mov ax, bx - add ax, word [esp+8] - mov ebx, ecx - shl ebx, 16 - mov bx, cx - push ebx - xor edi, edi - mov ecx, esi - call incecx - call [draw_line] + add ebx,[eax-twdw + WDATA.box.left] + add ecx,[eax-twdw + WDATA.box.top] + mov eax, ebx + shl eax, 16 + mov ax, bx + add ax, word [esp+8] + mov ebx, ecx + shl ebx, 16 + mov bx, cx + push ebx + xor edi, edi + mov ecx, esi + call incecx + call [draw_line] - movzx edx,word [esp+4+4] - add ebx,edx - shl edx,16 - add ebx,edx - mov ecx,esi - call dececx - call [draw_line] + movzx edx,word [esp+4+4] + add ebx,edx + shl edx,16 + add ebx,edx + mov ecx,esi + call dececx + call [draw_line] - pop ebx - push edx - mov edx,eax - shr edx,16 - mov ax,dx - mov edx,ebx - shr edx,16 - mov bx,dx - mov dx,[esp+4+4] - add bx,dx - pop edx - mov ecx,esi - call incecx - call [draw_line] + pop ebx + push edx + mov edx,eax + shr edx,16 + mov ax,dx + mov edx,ebx + shr edx,16 + mov bx,dx + mov dx,[esp+4+4] + add bx,dx + pop edx + mov ecx,esi + call incecx + call [draw_line] - mov dx,[esp+8] - add ax,dx - shl edx,16 - add eax,edx - add ebx,1*65536 - mov ecx,esi - call dececx - call [draw_line] + mov dx,[esp+8] + add ax,dx + shl edx,16 + add eax,edx + add ebx,1*65536 + mov ecx,esi + call dececx + call [draw_line] - pop edx - pop ecx - pop ebx - pop eax - pop edi - pop esi + pop edx + pop ecx + pop ebx + pop eax + pop edi + pop esi - ret + ret button_dececx: - cmp [buttontype],dword 1 - jne .finish + cmp [buttontype],dword 1 + jne .finish ; je bdece ; ret ; bdece: - push eax - mov eax,0x01 - cmp edi,20 - jg @f - mov eax,0x02 + push eax + mov eax,0x01 + cmp edi,20 + jg @f + mov eax,0x02 @@: - test ecx,0xff - jz @f - sub ecx,eax + test ecx,0xff + jz @f + sub ecx,eax @@: - shl eax,8 - test ecx,0xff00 - jz @f - sub ecx,eax + shl eax,8 + test ecx,0xff00 + jz @f + sub ecx,eax @@: - shl eax,8 - test ecx,0xff0000 - jz @f - sub ecx,eax + shl eax,8 + test ecx,0xff0000 + jz @f + sub ecx,eax @@: - pop eax + pop eax .finish: - ret + ret sys_button: @@ -190,7 +190,7 @@ sys_button: test edx, 0x40000000 jnz button_no_draw - pushad ; button body + pushad ; button body movzx edi, cx shr ebx, 16 shr ecx, 16 @@ -293,44 +293,44 @@ rnmba: find_pressed_button_frames: - pushad + pushad - movzx ebx,word [eax+0] - shl ebx,5 - add ebx,window_data + movzx ebx,word [eax+0] + shl ebx,5 + add ebx,window_data mov ecx, [ebx+ WDATA.box.left] ; window x start - movzx edx,word [eax+4] ; button x start - add ecx,edx - push ecx + movzx edx,word [eax+4] ; button x start + add ecx,edx + push ecx mov dx,[eax+6] ; button x size - add cx,dx - mov esi,ecx - inc esi + add cx,dx + mov esi,ecx + inc esi mov ecx, [ebx+WDATA.box.top] ; window y start mov dx,[eax+8] ; button y start - add ecx,edx - mov ebx,ecx - mov dx,[eax+10] ; button y size - add dx,cx - inc dx + add ecx,edx + mov ebx,ecx + mov dx,[eax+10] ; button y size + add dx,cx + inc dx - pop eax + pop eax - ; eax x beginning - ; ebx y beginning - ; esi x end - ; edx y end - ; ecx color + ; eax x beginning + ; ebx y beginning + ; esi x end + ; edx y end + ; ecx color - mov [pressed_button_eax],eax - mov [pressed_button_ebx],ebx - mov [pressed_button_ecx],ecx - mov [pressed_button_edx],edx - mov [pressed_button_esi],esi + mov [pressed_button_eax],eax + mov [pressed_button_ebx],ebx + mov [pressed_button_ecx],ecx + mov [pressed_button_edx],edx + mov [pressed_button_esi],esi - popad - ret + popad + ret uglobal pressed_button_eax dd 0 @@ -343,70 +343,70 @@ endg ; negative button image negativebutton: - ; If requested, do not display button - ; boarder on press. - test ebx,0x20000000 - jz draw_negative_button - ret + ; If requested, do not display button + ; boarder on press. + test ebx,0x20000000 + jz draw_negative_button + ret draw_negative_button: - pushad + pushad - mov eax,[pressed_button_eax] - mov ebx,[pressed_button_ebx] - mov ecx,[pressed_button_ecx] - mov edx,[pressed_button_edx] - mov esi,[pressed_button_esi] - mov ecx,0x01000000 + mov eax,[pressed_button_eax] + mov ebx,[pressed_button_ebx] + mov ecx,[pressed_button_ecx] + mov edx,[pressed_button_edx] + mov esi,[pressed_button_esi] + mov ecx,0x01000000 - dec edx - push edx - inc edx - dec esi - push esi - inc esi + dec edx + push edx + inc edx + dec esi + push esi + inc esi - push eax - push ebx - push ecx - push edx - push edi + push eax + push ebx + push ecx + push edx + push edi - call [disable_mouse] + call [disable_mouse] bdbnewline: - mov edi,1 ; force - cmp eax,[esp+16] - jz bneg - cmp eax,[esp+20] - jz bneg - cmp ebx,[esp+12] - jz bneg - cmp ebx,[esp+24] - jnz nbneg + mov edi,1 ; force + cmp eax,[esp+16] + jz bneg + cmp eax,[esp+20] + jz bneg + cmp ebx,[esp+12] + jz bneg + cmp ebx,[esp+24] + jnz nbneg ; jz bneg ; jmp nbneg bneg: - ;;;call [disable_mouse] - call [putpixel] + ;;;call [disable_mouse] + call [putpixel] nbneg: - inc eax - cmp eax,esi - jnz bdbnewline - mov eax,[esp+16] - inc ebx - cmp ebx,edx - jnz bdbnewline + inc eax + cmp eax,esi + jnz bdbnewline + mov eax,[esp+16] + inc ebx + cmp ebx,edx + jnz bdbnewline - add esp,28 + add esp,28 - popad + popad - ret + ret ; check buttons @@ -423,7 +423,7 @@ negativebutton: ; ; first at 0x10 - +align 4 checkbuttons: cmp [BTN_DOWN],byte 0 ; mouse buttons pressed @@ -455,7 +455,7 @@ checkbuttons: mov ax,[MOUSE_Y] mov [my],ax @@: - pop ax + pop ax ;and it is only refreshed after the mouse's button release ;..................................... end 2/5 : modified by vhanla ............................. @@ -471,7 +471,7 @@ checkbuttons: cmp edx,esi jge bch - popad ; no button pressed + popad ; no button pressed ret bch: @@ -494,8 +494,8 @@ checkbuttons: movzx ebx,word [eax+0] shl ebx,5 - test [ebx+window_data+WDATA.fl_wstate],WSTATE_MINIMIZED - jnz buttonnewcheck + test [ebx+window_data+WDATA.fl_wstate],WSTATE_MINIMIZED + jnz buttonnewcheck ; add ebx,window_data ; mov ecx,[window_data+ebx+8] ; window end X @@ -509,50 +509,50 @@ checkbuttons: jge buttonnewcheck ; check coordinates - ; mouse x >= button x ? + ; mouse x >= button x ? movzx ebx,word [eax+0] shl ebx,5 add ebx,window_data - mov ecx, [ebx+WDATA.box.left] ; window x start + mov ecx, [ebx+WDATA.box.left] ; window x start movzx edx,word [eax+4] ; button x start add edx,ecx ;..................................... start 3/5 : modified by vhanla ............................. mov cx,[mx] ;mov cx,[MOUSE_X] ;..................................... end 3/5 : modified by vhanla ............................. cmp edx,ecx - jg buttonnewcheck + jg buttonnewcheck movzx ebx,word [eax+6] ; button x size add edx,ebx cmp ecx,edx - jg buttonnewcheck + jg buttonnewcheck - ; mouse y >= button y ? + ; mouse y >= button y ? movzx ebx,word [eax+0] shl ebx,5 add ebx,window_data - mov ecx, [ebx+WDATA.box.top] ; window y start + mov ecx, [ebx+WDATA.box.top] ; window y start movzx edx,word [eax+8] ; button y start add edx,ecx ;..................................... start 4/5 : modified by vhanla ............................. mov cx,[my] ;mov cx,[MOUSE_Y] ;..................................... start 4/5 : modified by vhanla ............................. cmp edx,ecx - jg buttonnewcheck + jg buttonnewcheck movzx ebx,word [eax+10] ; button y size add edx,ebx cmp ecx,edx - jg buttonnewcheck + jg buttonnewcheck ; mouse on button pop edx pop esi - mov bx,[eax+0xc] ; button id : bits 16-31 + mov bx,[eax+0xc] ; button id : bits 16-31 shl ebx,16 - mov bx,[eax+2] ; button id : bits 00-16 + mov bx,[eax+2] ; button id : bits 00-16 push ebx mov [MOUSE_DOWN],byte 1 ; no mouse down checks @@ -596,46 +596,46 @@ endg pusha ; mouse x >= button x ? movzx ebx,word [eax+0] - shl ebx,5 - add ebx,window_data - mov ecx, [ebx+WDATA.box.left] ; window x start + shl ebx,5 + add ebx,window_data + mov ecx, [ebx+WDATA.box.left] ; window x start movzx edx,word [eax+4] ; button x start - add edx,ecx - mov cx,[MOUSE_X] - cmp edx,ecx - jg no_on_button ;if we release the pointer out of the button area + add edx,ecx + mov cx,[MOUSE_X] + cmp edx,ecx + jg no_on_button ;if we release the pointer out of the button area movzx ebx,word [eax+6] ; button x size - add edx,ebx - cmp ecx,edx - jg no_on_button + add edx,ebx + cmp ecx,edx + jg no_on_button - ; mouse y >= button y ? + ; mouse y >= button y ? movzx ebx,word [eax+0] - shl ebx,5 - add ebx,window_data - mov ecx, [ebx+WDATA.box.top] ; window y start + shl ebx,5 + add ebx,window_data + mov ecx, [ebx+WDATA.box.top] ; window y start movzx edx,word [eax+8] ; button y start - add edx,ecx - mov cx,[MOUSE_Y] - cmp edx,ecx - jg no_on_button + add edx,ecx + mov cx,[MOUSE_Y] + cmp edx,ecx + jg no_on_button movzx ebx,word [eax+10] ; button y size - add edx,ebx - cmp ecx,edx - jg no_on_button + add edx,ebx + cmp ecx,edx + jg no_on_button popa - mov [BTN_COUNT],byte 1 ; no of buttons in buffer - pop ebx - mov [BTN_BUFF],ebx ; lets put the button id in buffer + mov [BTN_COUNT],byte 1 ; no of buttons in buffer + pop ebx + mov [BTN_BUFF],ebx ; lets put the button id in buffer push ebx pusha jmp yes_on_button no_on_button: - mov [BTN_COUNT],byte 0 ; no of buttons in buffer + mov [BTN_COUNT],byte 0 ; no of buttons in buffer yes_on_button: - mov [MOUSE_DOWN],byte 0 ; mouse down -> do not draw + mov [MOUSE_DOWN],byte 0 ; mouse down -> do not draw popa pop ebx popa diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 62a9f4d8b1..da42000459 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -1016,7 +1016,7 @@ osloop: ; MAIN OS LOOP END ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - +align 4 checkidle: pushad call change_task diff --git a/kernel/trunk/network/stack.inc b/kernel/trunk/network/stack.inc index edbbc4c279..ab72790bf7 100644 --- a/kernel/trunk/network/stack.inc +++ b/kernel/trunk/network/stack.inc @@ -38,35 +38,35 @@ StackCounters: dumped_rx_count dd 0 arp_tx_count: dd 0 arp_rx_count: dd 0 - ip_rx_count: dd 0 - ip_tx_count: dd 0 + ip_rx_count: dd 0 + ip_tx_count: dd 0 endg ; socket buffers -SOCKETBUFFSIZE equ 4096 ; state + config + buffer. -SOCKETHEADERSIZE equ SOCKET.rxData ; thus 4096 - SOCKETHEADERSIZE bytes data +SOCKETBUFFSIZE equ 4096 ; state + config + buffer. +SOCKETHEADERSIZE equ SOCKET.rxData ; thus 4096 - SOCKETHEADERSIZE bytes data ;NUM_SOCKETS equ 16 ; Number of open sockets supported. Was 20 ; IPBUFF status values -BUFF_EMPTY equ 0 -BUFF_RX_FULL equ 1 -BUFF_ALLOCATED equ 2 -BUFF_TX_FULL equ 3 +BUFF_EMPTY equ 0 +BUFF_RX_FULL equ 1 +BUFF_ALLOCATED equ 2 +BUFF_TX_FULL equ 3 -NUM_IPBUFFERS equ 20 ; buffers allocated for TX/RX +NUM_IPBUFFERS equ 20 ; buffers allocated for TX/RX -NUMQUEUES equ 4 +NUMQUEUES equ 4 -EMPTY_QUEUE equ 0 -IPIN_QUEUE equ 1 -IPOUT_QUEUE equ 2 -NET1OUT_QUEUE equ 3 +EMPTY_QUEUE equ 0 +IPIN_QUEUE equ 1 +IPOUT_QUEUE equ 2 +NET1OUT_QUEUE equ 3 -NO_BUFFER equ 0xFFFF -IPBUFFSIZE equ 1500 ; MTU of an ethernet packet -NUMQUEUEENTRIES equ NUM_IPBUFFERS -NUMRESENDENTRIES equ 18 ; Buffers for TCP resend packets +NO_BUFFER equ 0xFFFF +IPBUFFSIZE equ 1500 ; MTU of an ethernet packet +NUMQUEUEENTRIES equ NUM_IPBUFFERS +NUMRESENDENTRIES equ 18 ; Buffers for TCP resend packets ; These are the 0x40 function codes for application access to the stack STACK_DRIVER_STATUS equ 52 @@ -81,10 +81,10 @@ SOCKET_INTERFACE equ 53 ;stack_data_end equ 0x71ffff ; 32 bit word -stack_config equ stack_data +stack_config equ stack_data ; 32 bit word - IP Address in network format -stack_ip equ stack_data + 4 +stack_ip equ stack_data + 4 ; 1 byte. 0 == inactive, 1 = active ethernet_active equ stack_data + 9 @@ -95,30 +95,30 @@ ethernet_active equ stack_data + 9 ; Address of selected socket ;sktAddr equ stack_data + 32 ; Parameter to checksum routine - data ptr -checkAdd1 equ stack_data + 36 +checkAdd1 equ stack_data + 36 ; Parameter to checksum routine - 2nd data ptr -checkAdd2 equ stack_data + 40 +checkAdd2 equ stack_data + 40 ; Parameter to checksum routine - data size -checkSize1 equ stack_data + 44 +checkSize1 equ stack_data + 44 ; Parameter to checksum routine - 2nd data size -checkSize2 equ stack_data + 46 +checkSize2 equ stack_data + 46 ; result of checksum routine -checkResult equ stack_data + 48 +checkResult equ stack_data + 48 ; holds the TCP/UDP pseudo header. SA|DA|0|prot|UDP len| -pseudoHeader equ stack_data + 50 +pseudoHeader equ stack_data + 50 ; receive and transmit IP buffer allocation ;sockets equ stack_data + 62 Next_free2 equ stack_data + 62;Next_free2 equ sockets + (SOCKETBUFFSIZE * NUM_SOCKETS) ; 1560 byte buffer for rx / tx ethernet packets -Ether_buffer equ Next_free2 -Next_free3 equ Ether_buffer + 1518 -last_1sTick equ Next_free3 -IPbuffs equ Next_free3 + 1 -queues equ IPbuffs + ( NUM_IPBUFFERS * IPBUFFSIZE ) -queueList equ queues + (2 * NUMQUEUES) -last_1hsTick equ queueList + ( 2 * NUMQUEUEENTRIES ) +Ether_buffer equ Next_free2 +Next_free3 equ Ether_buffer + 1518 +last_1sTick equ Next_free3 +IPbuffs equ Next_free3 + 1 +queues equ IPbuffs + ( NUM_IPBUFFERS * IPBUFFSIZE ) +queueList equ queues + (2 * NUMQUEUES) +last_1hsTick equ queueList + ( 2 * NUMQUEUEENTRIES ) ;resendQ equ queueList + ( 2 * NUMQUEUEENTRIES ) ;resendBuffer equ resendQ + ( 4 * NUMRESENDENTRIES ) ; for TCP @@ -128,7 +128,7 @@ last_1hsTick equ queueList + ( 2 * NUMQUEUEENTRIES ) ;resendQ equ 0x770000 ;resendBuffer equ resendQ + ( 4 * NUMRESENDENTRIES ) ; for TCP ; XTODO: validate size -resendBuffer equ resendQ + ( 8 * NUMRESENDENTRIES ) ; for TCP +resendBuffer equ resendQ + ( 8 * NUMRESENDENTRIES ) ; for TCP uglobal @@ -138,15 +138,15 @@ endg ; simple macro for memory set operation macro _memset_dw adr,value,amount { - mov edi, adr - mov ecx, amount - if value = 0 - xor eax, eax - else - mov eax, value - end if - cld - rep stosd + mov edi, adr + mov ecx, amount + if value = 0 + xor eax, eax + else + mov eax, value + end if + cld + rep stosd } @@ -170,21 +170,21 @@ include "socket.inc" ;*************************************************************************** stack_init: - ; Init two address spaces with default values - _memset_dw stack_data_start, 0, 0x20000/4 - _memset_dw resendQ, 0, NUMRESENDENTRIES * 2 + ; Init two address spaces with default values + _memset_dw stack_data_start, 0, 0x20000/4 + _memset_dw resendQ, 0, NUMRESENDENTRIES * 2 - mov [net_sockets], 0 - mov [net_sockets + 4], 0 + mov [net_sockets], 0 + mov [net_sockets + 4], 0 - ; Queries initialization - call queueInit + ; Queries initialization + call queueInit - ; The following block sets up the 1s timer - mov al, 0x0 - out 0x70, al - in al, 0x71 - mov [last_1sTick], al + ; The following block sets up the 1s timer + mov al, 0x0 + out 0x70, al + in al, 0x71 + mov [last_1sTick], al ret @@ -198,6 +198,7 @@ ret ; This is a kernel function, called in the main loop ; ;*************************************************************************** +align 4 stack_handler: call ethernet_driver @@ -207,7 +208,7 @@ stack_handler: ; Test for 10ms tick, call tcp timer mov eax, [timer_ticks] ;[0xfdf0] cmp eax, [last_1hsTick] - je sh_001 + je sh_001 mov [last_1hsTick], eax call tcp_tx_handler @@ -217,9 +218,9 @@ sh_001: ; Test for 1 second event, call 1s timer functions mov al, 0x0 ;second out 0x70, al - in al, 0x71 + in al, 0x71 cmp al, [last_1sTick] - je sh_exit + je sh_exit mov [last_1sTick], al @@ -246,7 +247,7 @@ proc checksum_jb stdcall uses ebx esi ecx,\ mov esi, dword[buf_ptr] mov ecx, dword[buf_size] shr ecx, 1 ; ecx=ecx/2 - jnc @f ; if CF==0 then size is even number + jnc @f ; if CF==0 then size is even number mov bh, byte[esi + ecx*2] @@: cld @@ -281,11 +282,11 @@ endp checksum: pusha mov eax, [checkAdd1] - xor edx, edx ; edx is the accumulative checksum + xor edx, edx ; edx is the accumulative checksum xor ebx, ebx mov cx, [checkSize1] shr cx, 1 - jz cs1_1 + jz cs1_1 cs1: mov bh, [eax] @@ -298,7 +299,7 @@ cs1: cs1_1: and word [checkSize1], 0x01 - jz cs_test2 + jz cs_test2 mov bh, [eax] xor bl, bl @@ -308,12 +309,12 @@ cs1_1: cs_test2: mov cx, [checkSize2] cmp cx, 0 - jz cs_exit ; Finished if no 2nd buffer + jz cs_exit ; Finished if no 2nd buffer mov eax, [checkAdd2] shr cx, 1 - jz cs2_1 + jz cs2_1 cs2: mov bh, [eax] @@ -326,7 +327,7 @@ cs2: cs2_1: and word [checkSize2], 0x01 - jz cs_exit + jz cs_exit mov bh, [eax] xor bl, bl @@ -393,7 +394,7 @@ not1: and bl, 0x7f cmp bl, 3 - je ash_eth_enable + je ash_eth_enable ; Ethernet isn't enabled, so make sure that the card is disabled mov [ethernet_active], byte 0 @@ -404,7 +405,7 @@ ash_eth_enable: ; if found call eth_probe cmp eax, 0 - je ash_eth_done ; Abort if no hardware found + je ash_eth_done ; Abort if no hardware found mov [ethernet_active], byte 1 @@ -497,75 +498,75 @@ not13: ; not14: - cmp eax, 15 - jnz not15 + cmp eax, 15 + jnz not15 ; in ebx we need 4 to read the last 2 bytes - cmp ebx, dword 4 - je read + cmp ebx, dword 4 + je read ; or we need 0 to read the first 4 bytes - cmp ebx, dword 0 - jnz param_error + cmp ebx, dword 0 + jnz param_error ; read MAC, returned (in mirrored byte order) in eax read: - mov eax, [node_addr + ebx] - jmp @f + mov eax, [node_addr + ebx] + jmp @f param_error: - mov eax, -1 ; params not accepted + mov eax, -1 ; params not accepted @@: - ret + ret ; 0 -> arp_probe ; 1 -> arp_announce ; 2 -> arp_responce (not supported yet) -not15: ; ARP stuff - cmp eax, 16 - jnz not16 +not15: ; ARP stuff + cmp eax, 16 + jnz not16 - cmp ebx, 0 - je a_probe + cmp ebx, 0 + je a_probe - cmp ebx, 1 - je a_ann ; arp announce + cmp ebx, 1 + je a_ann ; arp announce ; cmp ebx,2 ; jne a_resp ; arp response - jmp param15_error + jmp param15_error ; arp probe, sender IP must be set to 0.0.0.0, target IP is set to address being probed ; ecx: pointer to target MAC, MAC should set to 0 by application ; edx: target IP a_probe: - push dword [stack_ip] + push dword [stack_ip] - mov edx, [stack_ip] - mov [stack_ip], dword 0 - mov esi, ecx ; pointer to target MAC address - call arp_request + mov edx, [stack_ip] + mov [stack_ip], dword 0 + mov esi, ecx ; pointer to target MAC address + call arp_request - pop dword [stack_ip] - jmp @f + pop dword [stack_ip] + jmp @f ; arp announce, sender IP must be set to target IP ; ecx: pointer to target MAC a_ann: - mov edx, [stack_ip] - mov esi, ecx ; pointer to target MAC address - call arp_request - jmp @f + mov edx, [stack_ip] + mov esi, ecx ; pointer to target MAC address + call arp_request + jmp @f param15_error: - mov eax, -1 + mov eax, -1 @@: - ret + ret ; ; modified by [smb] @@ -582,7 +583,7 @@ not16: ; stack_driver_end: - ret + ret @@ -672,7 +673,7 @@ nots9: mov eax,dword[drvr_cable] test eax,eax - jnz @f ; if function is not implented, return -1 + jnz @f ; if function is not implented, return -1 mov al,-1 ret @@ -923,9 +924,9 @@ stack_get_packet: mov eax, NET1OUT_QUEUE call dequeue cmp ax, NO_BUFFER - je sgp_non_exit ; Exit if no buffer available + je sgp_non_exit ; Exit if no buffer available - push eax ; Save buffer number for freeing at end + push eax ; Save buffer number for freeing at end push edx ; convert buffer pointer eax to the absolute address @@ -934,7 +935,7 @@ stack_get_packet: add eax, IPbuffs pop edx - push eax ; save address of IP data + push eax ; save address of IP data ; Get the address of the callers data mov edi,[TASK_BASE] add edi,TASKDATA.mem_start @@ -942,10 +943,10 @@ stack_get_packet: mov edi, edx pop eax - mov ecx, 1500 ; should get the actual number of bytes to write + mov ecx, 1500 ; should get the actual number of bytes to write mov esi, eax cld - rep movsb ; copy the data across + rep movsb ; copy the data across ; And finally, return the buffer to the free queue pop eax @@ -976,7 +977,7 @@ stack_insert_packet: mov eax, EMPTY_QUEUE call dequeue cmp ax, NO_BUFFER - je sip_err_exit + je sip_err_exit push eax @@ -993,9 +994,9 @@ stack_insert_packet: ; So, edx holds the IPbuffer ptr - pop ecx ; count of bytes to send - mov ebx, ecx ; need the length later - pop eax ; get callers ptr to data to send + pop ecx ; count of bytes to send + mov ebx, ecx ; need the length later + pop eax ; get callers ptr to data to send ; Get the address of the callers data mov edi,[TASK_BASE] @@ -1005,7 +1006,7 @@ stack_insert_packet: mov edi, edx cld - rep movsb ; copy the data across + rep movsb ; copy the data across pop ebx diff --git a/kernel/trunk/video/vga.inc b/kernel/trunk/video/vga.inc index 942f6a41ad..12cc0f7dcd 100644 --- a/kernel/trunk/video/vga.inc +++ b/kernel/trunk/video/vga.inc @@ -113,7 +113,7 @@ palette320x200: loop palnew ret - +align 4 uglobal novesachecksum dd 0x0 EGA_counter db 0 @@ -123,7 +123,7 @@ uglobal temp: .cx dd 0 endg - +align 4 checkVga_N13: cmp [SCR_MODE],dword 0x13