Ну, смотря редактирования какого, чего... Сделать можно все, положив на это полжизни... Другой вопрос - нафига?
Просто я слишком часто его перепрошиваю, поэтому немешало бы эту часть ода урезать, так как иногда забываю проверять CRC...
Филипп Тогда как будете угадывать из-за чего не грузится? :D
А зачем угадывать? Ну негрузится и негрузится, возьму и перепрошью, просто мешает она мне, так же как и КМОП ЦРЦ... постоянно приходится нажимать Ф1 или ДЕЛ...
коды CRC-16 checking для Award БИОС (v.4.51 с бутблоком):
[code:1]
.....
2000:7085 copy_dcomprssion_result proc near
2000:7085 ; CODE XREF: lzh_expand+42p
2000:7085 50 push ax
2000:7086 53 push bx
2000:7087 52 push dx
2000:7088 51 push cx
2000:7089 06 push es
2000:708A 56 push si
2000:708B A1 04 01 mov ax, ds:104h
2000:708E 8E C0 mov es, ax
2000:7090 assume es:nothing
2000:7090 8B 1E 06 01 mov bx, ds:106h
2000:7094 BE 1C 37 mov si, 371Ch ; ds:si = decompressed buffer
2000:7097 next_byte_2_copy: ; CODE XREF: copy_dcomprssion_result+19j
2000:7097 8A 04 mov al, [si]
2000:7099 26 88 07 mov es:[bx], al
2000:709C 46 inc si
2000:709D 43 inc bx
2000:709E E2 F7 loop next_byte_2_copy
2000:70A0 89 1E 06 01 mov ds:106h, bx
2000:70A4 0B DB or bx, bx
2000:70A6 75 06 jnz not_next_seg
2000:70A8 81 06 04 01 00 10 add word ptr ds:104h, 1000h
2000:70AE not_next_seg: ; CODE XREF: copy_dcomprssion_result+21j
2000:70AE 5E pop si
2000:70AF 07 pop es
2000:70B0 59 pop cx
2000:70B1 3B C1 cmp ax, cx
2000:70B3 72 30 jb exit
2000:70B5 41 inc cx
2000:70B6 BB 1C 37 mov bx, 371Ch
2000:70B9 next_byte: ; CODE XREF: copy_dcomprssion_result+5Ej
2000:70B9 0F B6 07 movzx ax, byte ptr [bx] ; get next byte to calc crc16
2000:70BC 49 dec cx
2000:70BD E3 26 jcxz exit
2000:70BF 50 push ax
2000:70C0 53 push bx
2000:70C1 56 push si
2000:70C2 8B F0 mov si, ax
2000:70C4 A1 0C 03 mov ax, ds:30Ch
2000:70C7 33 C6 xor ax, si ; calc CRC16 value
2000:70C9 25 FF 00 and ax, 0FFh
2000:70CC 8B F0 mov si, ax
2000:70CE D1 E6 shl si, 1
2000:70D0 8B 9C 0C 01 mov bx, [si+10Ch]
2000:70D4 A1 0C 03 mov ax, ds:30Ch
2000:70D7 C1 E8 08 shr ax, 8
2000:70DA 33 C3 xor ax, bx
2000:70DC A3 0C 03 mov ds:30Ch, ax
2000:70DF 5E pop si
2000:70E0 5B pop bx
2000:70E1 58 pop ax
2000:70E2 43 inc bx
2000:70E3 EB D4 jmp short next_byte
2000:70E5 ; ---------------------------------------------------------------------------
2000:70E5 exit: ; CODE XREF: copy_dcomprssion_result+2Ej
2000:70E5 ; copy_dcomprssion_result+38j
2000:70E5 5A pop dx
2000:70E6 5B pop bx
2000:70E7 58 pop ax
2000:70E8 C3 retn
2000:70E8 copy_dcomprssion_result endp ;
.....
2000:790B --- Make_CRC16_Table ---
2000:790B 1st pass, the base address for DS is 3_0000h
2000:790B in: ds = scratch_pad_segment for CRC table
2000:790B out: ds:10Ch - ds:11Bh = CRC-16 table
2000:790B ; --------------- S U B R O U T I N E ---------------------------------------
2000:790B Make_CRC16_Table proc near ; CODE XREF: decomprssion_ngine+ECp
2000:790B 51 push cx
2000:790C 53 push bx
2000:790D 50 push ax
2000:790E 56 push si
2000:790F BE 0C 01 mov si, 10Ch
2000:7912 B9 00 01 mov cx, 100h
2000:7915 next_byte: ; CODE XREF: Make_CRC16_Table+2Bj
2000:7915 B8 00 01 mov ax, 100h
2000:7918 2B C1 sub ax, cx
2000:791A 50 push ax
2000:791B BB 00 00 mov bx, 0
2000:791E next_bit: ; CODE XREF: Make_CRC16_Table+25j
2000:791E A9 01 00 test ax, 1
2000:7921 74 07 jz LSB_is_0
2000:7923 D1 E8 shr ax, 1
2000:7925 35 01 A0 xor ax, 0A001h ; "CRC-substract" with the poly (the poly is A001h)
2000:7928 EB 02 jmp short write_tmp_crc_val
2000:792A ; ---------------------------------------------------------------------------
2000:792A LSB_is_0: ; CODE XREF: Make_CRC16_Table+16j
2000:792A D1 E8 shr ax, 1
2000:792C write_tmp_crc_val: ; CODE XREF: Make_CRC16_Table+1Dj
2000:792C 43 inc bx
2000:792D 83 FB 08 cmp bx, 8
2000:7930 72 EC jb next_bit
2000:7932 5B pop bx
2000:7933 89 00 mov [bx+si], ax ; 1st pass:
2000:7933 ; mov ds:[bx+si], ax <=> mov 3000:[bx+si], ax
2000:7935 46 inc si
2000:7936 E2 DD loop next_byte
2000:7938 5E pop si
2000:7939 58 pop ax
2000:793A 5B pop bx
2000:793B 59 pop cx
2000:793C C3 retn
2000:793C Make_CRC16_Table endp
....
2000:793D --- Calc_LZH_hdr_CRC16 ---
2000:793D in: ds:571Ch = LZH_hdr_len
2000:793D ds:102h = LZH_hdr_byte_index
2000:793D ds:10Ch - ds:30Bh = CRC16 table
2000:793D
2000:793D out: ds:30Ch = LZH_hdr CRC16 calculated value
2000:793D ds:314h = size of LZH_hdr saved to ram in byte
2000:793D ; --------------- S U B R O U T I N E ---------------------------------------
2000:793D Calc_LZH_hdr_CRC16 proc near ; CODE XREF: ReadHeader+2Cp
2000:793D 50 push ax
2000:793E 53 push bx
2000:793F 51 push cx
2000:7940 52 push dx
2000:7941 0F B6 0E 1C 57 movzx cx, byte ptr ds:571Ch ; cx = LZH_hdr_len
2000:7946 06 push es
2000:7947 56 push si
2000:7948 8B 1E 02 01 mov bx, ds:102h ; 1st pass, bx = LZH_hdr_byte_index (2)
2000:7948 ; i.e. after hdr_len and 8-bit chksum
2000:794C BE 00 00 mov si, 0
2000:794F next_byte: ; CODE XREF: Calc_LZH_hdr_CRC16+19j
2000:794F E8 79 01 call FetchByte
2000:7952 88 04 mov [si], al ; save LZH_hdr byte at ds:[si], i.e. 1st pass 3000:[si]
2000:7954 43 inc bx
2000:7955 46 inc si
2000:7956 E2 F7 loop next_byte ; loop until last LZH hdr byte
2000:7958 8B C3 mov ax, bx
2000:795A 2B 06 02 01 sub ax, ds:102h ; ax = real_LZH_hdr_len (not including the first two ID bytes)
2000:795E 89 1E 02 01 mov ds:102h, bx ; ds:102h = index_to_byte_after_LZH_hdr
2000:7962 5E pop si
2000:7963 07 pop es
2000:7964 A2 1C 57 mov ds:571Ch, al ; ds:571Ch = real_LZH_hdr_len (not including the first two ID bytes)
2000:7967 8B C8 mov cx, ax ; cx = ax = real hdr len
2000:7969 01 06 14 03 add ds:314h, ax ; ds:314h = total size of LZH_hdr saved to ram (in byte)?
2000:796D 41 inc cx
2000:796E BB 00 00 mov bx, 0
2000:7971 _next_byte: ; CODE XREF: Calc_LZH_hdr_CRC16+5Ej
2000:7971 0F B6 07 movzx ax, byte ptr [bx]
2000:7974 49 dec cx
2000:7975 E3 26 jcxz exit
2000:7977 50 push ax
2000:7978 53 push bx
2000:7979 56 push si
2000:797A 8B F0 mov si, ax ; si = LZH_hdr_byte
2000:797C A1 0C 03 mov ax, ds:30Ch ; mov ax, tmp_CRC_16_calculation_result;
2000:797C ; ds:30Ch = tmp_CRC_16_calculation_result
2000:797F 33 C6 xor ax, si ; calculate 16-bit CRC of the LZH header
2000:7981 25 FF 00 and ax, 0FFh
2000:7984 8B F0 mov si, ax
2000:7986 D1 E6 shl si, 1
2000:7988 8B 9C 0C 01 mov bx, [si+10Ch] ; mov bx, CRC_16_table[si]
2000:798C A1 0C 03 mov ax, ds:30Ch
2000:798F C1 E8 08 shr ax, 8
2000:7992 33 C3 xor ax, bx ; calculate 16-bit CRC of the LZH header
2000:7994 A3 0C 03 mov ds:30Ch, ax ; mov tmp_CRC_16_calculation_result, ax ;
2000:7994 ; ds:30Ch = tmp_CRC_16_calculation_result
2000:7997 5E pop si
2000:7998 5B pop bx
2000:7999 58 pop ax
2000:799A 43 inc bx
2000:799B EB D4 jmp short _next_byte
2000:799D ; ---------------------------------------------------------------------------
2000:799D exit: ; CODE XREF: Calc_LZH_hdr_CRC16+38j
2000:799D 5A pop dx
2000:799E 59 pop cx
2000:799F 5B pop bx
2000:79A0 58 pop ax
2000:79A1 C3 retn
2000:79A1 Calc_LZH_hdr_CRC16 endp
........
[/code:1]
... greetz Pinczakko :wink:
Немного подкорректировал грамматику, если ты не против :wink: - ivp
Вот сейчас и не вспомню даже - в патчере, вроде, как-то встраивал "недокументированный" ключик по отключению проверки BIOS-CRC. Всего-то надо один байтик занопить. А Пинчакко, похоже, спутал с lha-CRC.
Если захотите - поищите строчки "cmp ah,[si]" в бутблоке. Там их должно быть как минимум две - одна на биос и одна на SizeMem - он тоже "законтроллен". Можно не напрягаться и занопить обе проверки. Тогда сможете смело делать чего хотите.
п.с. это не освободит от выприведенной цээрцэшки для отдельного модуля, однако при проблемах и с ней, ясный пень, уже и так ничего не заработает... :)
Ну, дык. Шарит, плесень... :)
(и не пробуй переводить ;) )
и не пробуй переводить ;)
срасибо :)
just happen to learn your language guys :lol: . Not so hard this far coz I already know quite lots of languages (not computer languages, but human languages). Nevertheless the grammar is still broken :wink:
Нет - это составная часть POST...
[code:1]
.....
2000:7085 copy_dcomprssion_result proc near
2000:7085 ; CODE XREF: lzh_expand+42p
2000:7085 50 push ax
2000:7086 53 push bx
2000:7087 52 push dx
2000:7088 51 push cx
2000:7089 06 push es
2000:708A 56 push si
2000:708B A1 04 01 mov ax, ds:104h
2000:708E 8E C0 mov es, ax
2000:7090 assume es:nothing
2000:7090 8B 1E 06 01 mov bx, ds:106h
2000:7094 BE 1C 37 mov si, 371Ch ; ds:si = decompressed buffer
2000:7097 next_byte_2_copy: ; CODE XREF: copy_dcomprssion_result+19j
2000:7097 8A 04 mov al, [si]
2000:7099 26 88 07 mov es:[bx], al
2000:709C 46 inc si
2000:709D 43 inc bx
2000:709E E2 F7 loop next_byte_2_copy
2000:70A0 89 1E 06 01 mov ds:106h, bx
2000:70A4 0B DB or bx, bx
2000:70A6 75 06 jnz not_next_seg
2000:70A8 81 06 04 01 00 10 add word ptr ds:104h, 1000h
2000:70AE not_next_seg: ; CODE XREF: copy_dcomprssion_result+21j
2000:70AE 5E pop si
2000:70AF 07 pop es
2000:70B0 59 pop cx
2000:70B1 3B C1 cmp ax, cx
2000:70B3 72 30 jb exit
2000:70B5 41 inc cx
2000:70B6 BB 1C 37 mov bx, 371Ch
2000:70B9 next_byte: ; CODE XREF: copy_dcomprssion_result+5Ej
2000:70B9 0F B6 07 movzx ax, byte ptr [bx] ; get next byte to calc crc16
2000:70BC 49 dec cx
2000:70BD E3 26 jcxz exit
2000:70BF 50 push ax
2000:70C0 53 push bx
2000:70C1 56 push si
2000:70C2 8B F0 mov si, ax
2000:70C4 A1 0C 03 mov ax, ds:30Ch
2000:70C7 33 C6 xor ax, si ; calc CRC16 value
2000:70C9 25 FF 00 and ax, 0FFh
2000:70CC 8B F0 mov si, ax
2000:70CE D1 E6 shl si, 1
2000:70D0 8B 9C 0C 01 mov bx, [si+10Ch]
2000:70D4 A1 0C 03 mov ax, ds:30Ch
2000:70D7 C1 E8 08 shr ax, 8
2000:70DA 33 C3 xor ax, bx
2000:70DC A3 0C 03 mov ds:30Ch, ax
2000:70DF 5E pop si
2000:70E0 5B pop bx
2000:70E1 58 pop ax
2000:70E2 43 inc bx
2000:70E3 EB D4 jmp short next_byte
2000:70E5 ; ---------------------------------------------------------------------------
2000:70E5 exit: ; CODE XREF: copy_dcomprssion_result+2Ej
2000:70E5 ; copy_dcomprssion_result+38j
2000:70E5 5A pop dx
2000:70E6 5B pop bx
2000:70E7 58 pop ax
2000:70E8 C3 retn
2000:70E8 copy_dcomprssion_result endp ;
.....
2000:790B --- Make_CRC16_Table ---
2000:790B 1st pass, the base address for DS is 3_0000h
2000:790B in: ds = scratch_pad_segment for CRC table
2000:790B out: ds:10Ch - ds:11Bh = CRC-16 table
2000:790B ; --------------- S U B R O U T I N E ---------------------------------------
2000:790B Make_CRC16_Table proc near ; CODE XREF: decomprssion_ngine+ECp
2000:790B 51 push cx
2000:790C 53 push bx
2000:790D 50 push ax
2000:790E 56 push si
2000:790F BE 0C 01 mov si, 10Ch
2000:7912 B9 00 01 mov cx, 100h
2000:7915 next_byte: ; CODE XREF: Make_CRC16_Table+2Bj
2000:7915 B8 00 01 mov ax, 100h
2000:7918 2B C1 sub ax, cx
2000:791A 50 push ax
2000:791B BB 00 00 mov bx, 0
2000:791E next_bit: ; CODE XREF: Make_CRC16_Table+25j
2000:791E A9 01 00 test ax, 1
2000:7921 74 07 jz LSB_is_0
2000:7923 D1 E8 shr ax, 1
2000:7925 35 01 A0 xor ax, 0A001h ; "CRC-substract" with the poly (the poly is A001h)
2000:7928 EB 02 jmp short write_tmp_crc_val
2000:792A ; ---------------------------------------------------------------------------
2000:792A LSB_is_0: ; CODE XREF: Make_CRC16_Table+16j
2000:792A D1 E8 shr ax, 1
2000:792C write_tmp_crc_val: ; CODE XREF: Make_CRC16_Table+1Dj
2000:792C 43 inc bx
2000:792D 83 FB 08 cmp bx, 8
2000:7930 72 EC jb next_bit
2000:7932 5B pop bx
2000:7933 89 00 mov [bx+si], ax ; 1st pass:
2000:7933 ; mov ds:[bx+si], ax <=> mov 3000:[bx+si], ax
2000:7935 46 inc si
2000:7936 E2 DD loop next_byte
2000:7938 5E pop si
2000:7939 58 pop ax
2000:793A 5B pop bx
2000:793B 59 pop cx
2000:793C C3 retn
2000:793C Make_CRC16_Table endp
....
2000:793D --- Calc_LZH_hdr_CRC16 ---
2000:793D in: ds:571Ch = LZH_hdr_len
2000:793D ds:102h = LZH_hdr_byte_index
2000:793D ds:10Ch - ds:30Bh = CRC16 table
2000:793D
2000:793D out: ds:30Ch = LZH_hdr CRC16 calculated value
2000:793D ds:314h = size of LZH_hdr saved to ram in byte
2000:793D ; --------------- S U B R O U T I N E ---------------------------------------
2000:793D Calc_LZH_hdr_CRC16 proc near ; CODE XREF: ReadHeader+2Cp
2000:793D 50 push ax
2000:793E 53 push bx
2000:793F 51 push cx
2000:7940 52 push dx
2000:7941 0F B6 0E 1C 57 movzx cx, byte ptr ds:571Ch ; cx = LZH_hdr_len
2000:7946 06 push es
2000:7947 56 push si
2000:7948 8B 1E 02 01 mov bx, ds:102h ; 1st pass, bx = LZH_hdr_byte_index (2)
2000:7948 ; i.e. after hdr_len and 8-bit chksum
2000:794C BE 00 00 mov si, 0
2000:794F next_byte: ; CODE XREF: Calc_LZH_hdr_CRC16+19j
2000:794F E8 79 01 call FetchByte
2000:7952 88 04 mov [si], al ; save LZH_hdr byte at ds:[si], i.e. 1st pass 3000:[si]
2000:7954 43 inc bx
2000:7955 46 inc si
2000:7956 E2 F7 loop next_byte ; loop until last LZH hdr byte
2000:7958 8B C3 mov ax, bx
2000:795A 2B 06 02 01 sub ax, ds:102h ; ax = real_LZH_hdr_len (not including the first two ID bytes)
2000:795E 89 1E 02 01 mov ds:102h, bx ; ds:102h = index_to_byte_after_LZH_hdr
2000:7962 5E pop si
2000:7963 07 pop es
2000:7964 A2 1C 57 mov ds:571Ch, al ; ds:571Ch = real_LZH_hdr_len (not including the first two ID bytes)
2000:7967 8B C8 mov cx, ax ; cx = ax = real hdr len
2000:7969 01 06 14 03 add ds:314h, ax ; ds:314h = total size of LZH_hdr saved to ram (in byte)?
2000:796D 41 inc cx
2000:796E BB 00 00 mov bx, 0
2000:7971 _next_byte: ; CODE XREF: Calc_LZH_hdr_CRC16+5Ej
2000:7971 0F B6 07 movzx ax, byte ptr [bx]
2000:7974 49 dec cx
2000:7975 E3 26 jcxz exit
2000:7977 50 push ax
2000:7978 53 push bx
2000:7979 56 push si
2000:797A 8B F0 mov si, ax ; si = LZH_hdr_byte
2000:797C A1 0C 03 mov ax, ds:30Ch ; mov ax, tmp_CRC_16_calculation_result;
2000:797C ; ds:30Ch = tmp_CRC_16_calculation_result
2000:797F 33 C6 xor ax, si ; calculate 16-bit CRC of the LZH header
2000:7981 25 FF 00 and ax, 0FFh
2000:7984 8B F0 mov si, ax
2000:7986 D1 E6 shl si, 1
2000:7988 8B 9C 0C 01 mov bx, [si+10Ch] ; mov bx, CRC_16_table[si]
2000:798C A1 0C 03 mov ax, ds:30Ch
2000:798F C1 E8 08 shr ax, 8
2000:7992 33 C3 xor ax, bx ; calculate 16-bit CRC of the LZH header
2000:7994 A3 0C 03 mov ds:30Ch, ax ; mov tmp_CRC_16_calculation_result, ax ;
2000:7994 ; ds:30Ch = tmp_CRC_16_calculation_result
2000:7997 5E pop si
2000:7998 5B pop bx
2000:7999 58 pop ax
2000:799A 43 inc bx
2000:799B EB D4 jmp short _next_byte
2000:799D ; ---------------------------------------------------------------------------
2000:799D exit: ; CODE XREF: Calc_LZH_hdr_CRC16+38j
2000:799D 5A pop dx
2000:799E 59 pop cx
2000:799F 5B pop bx
2000:79A0 58 pop ax
2000:79A1 C3 retn
2000:79A1 Calc_LZH_hdr_CRC16 endp
........
[/code:1]
... greetz Pinczakko :wink:
Немного подкорректировал грамматику, если ты не против :wink: - ivp
Если захотите - поищите строчки "cmp ah,[si]" в бутблоке. Там их должно быть как минимум две - одна на биос и одна на SizeMem - он тоже "законтроллен". Можно не напрягаться и занопить обе проверки. Тогда сможете смело делать чего хотите.
п.с. это не освободит от выприведенной цээрцэшки для отдельного модуля, однако при проблемах и с ней, ясный пень, уже и так ничего не заработает... :)
[code:1]
2000:E32E assume ds:_1000
2000:E32E 8B 1E 09 00 mov bx, cmprssd_size_hi_word ; bx = 1
2000:E332 8B 0E 07 00 mov cx, cmprssd_size_lo_word ; cx = 355Fh
2000:E336 02 0E 00 00 add cl, hdr_len ; hdr_len = 25h
2000:E33A 80 D5 00 adc ch, 0
2000:E33D 83 D3 00 adc bx, 0
2000:E340 83 C1 03 add cx, 3 ; cx = 3587h
2000:E343 83 D3 00 adc bx, 0
2000:E346 74 04 jz hi_word_zero
2000:E348 8B D9 mov bx, cx
2000:E34A 33 C9 xor cx, cx
2000:E34C hi_word_zero: ; CODE XREF: 2000:E346j
2000:E34C 33 F6 xor si, si
2000:E34E 32 E4 xor ah, ah
2000:E350 _next_byte: ; CODE XREF: 2000:E353j
2000:E350 ; 2000:E365j
2000:E350 AC lodsb
2000:E351 02 E0 add ah, al
2000:E353 E2 FB loop _next_byte
2000:E355 0B DB or bx, bx
2000:E357 74 0E jz cmp_chk_sum
2000:E359 8B CB mov cx, bx
2000:E35B 8C DB mov bx, ds
2000:E35D 81 C3 00 10 add bx, 1000h
2000:E361 8E DB mov ds, bx
2000:E363 assume ds:_2000
2000:E363 33 DB xor bx, bx
2000:E365 EB E9 jmp short _next_byte
2000:E367 ; ---------------------------------------------------------------------------
2000:E367 cmp_chk_sum: ; CODE XREF: 2000:E357j
2000:E367 3A 24 cmp ah, [si] ;<<---------------- compare "whole" module 8-bit checksum here <<--
2000:E369 0F 85 2E 00 jnz chk_sum_error
[/code:1]
...greetz Pinczakko :wink:
(и не пробуй переводить ;) )
срасибо :)
just happen to learn your language guys :lol: . Not so hard this far coz I already know quite lots of languages (not computer languages, but human languages). Nevertheless the grammar is still broken :wink: