PDA

Просмотр полной версии : Поделить бинарный файл на два



Shumadan
29.12.2021, 17:11
Подскажите какой прогой или HEX редактором можно поделить 8-битный бинарный файл?
Т.е. старшие биты зашить в одну ПЗУ, младшие - в другую.

Serg6845
29.12.2021, 19:02
Подскажите какой прогой или HEX редактором можно поделить 8-битный бинарный файл?
Т.е. старшие биты зашить в одну ПЗУ, младшие - в другую.

часто софтина программатора это умеет. просто поделить файл - можно взять например софт от программатора Турбо (правда он досовый), загрузить файл и выгрузить через байт сначала с 0 адреса, потом с 1.
а, вот - winhex умеет. tools - file tools - dissect

fikus8
29.12.2021, 19:43
https://phantom.sannata.org/viewtopic.php?f=12&t=18820

Shumadan
29.12.2021, 20:18
Мне нужно делить не по принципу четные-нечетные байты, а каждый байт делить на старшие 4 бита и на младшие 4 бита. У каждой ПЗУ выход на 4 разряда

Serg6845
29.12.2021, 21:13
Мне нужно делить не по принципу четные-нечетные байты, а каждый байт делить на старшие 4 бита и на младшие 4 бита. У каждой ПЗУ выход на 4 разряда

тогда например вот так


DIM m AS STRING * 1
cmd$ = COMMAND$
OPEN cmd$ FOR BINARY AS #1
OPEN "low.bin" FOR OUTPUT AS #2
OPEN "high.bin" FOR OUTPUT AS #3

FOR k = 1 TO LOF(1)
GET #1, k, m
n = ASC(m)
b_low = n AND 15
b_high = (n AND 240) / 16

PRINT #2, CHR$(b_low);
PRINT #3, CHR$(b_high);
NEXT k
RESET

END



Microsoft visual basic/DOS v1.0

klingon
29.12.2021, 21:41
split -b 1024 имя_файла.bin

Shumadan
30.12.2021, 09:10
split -b 1024 имя_файла.bin
ничего не понял. Это в DOSe?

Serg6845
30.12.2021, 09:35
ничего не понял. Это в DOSe?

в линухе. и вика брешет (https://ru.wikipedia.org/wiki/Split) что делает оно совсем не то что запрашивалось.

впрочем вот (http://sksb3.no-ip.org:8085/nibbles.exe) вышеприведенный код в виде exe. в качестве параметра при запуске - имя входного файла, после отработки создает файлы high.bin и low.bin.

klingon
30.12.2021, 15:47
import sys
with open(sys.argv[1], 'rb') as file1, open(sys.argv[2], 'wb') as file2, open(sys.argv[3], 'wb') as file3:
lobyte = file1.read(1)
hibyte = file1.read(1)
while (lobyte or hibyte):
if not hibyte:
file2.write(lobyte)
else:
file2.write(lobyte)
file3.write(hibyte)
lobyte = file1.read(1)
hibyte = file1.read(1)

на питоне программа
запускать так
python split.py zork123_80.zip zork123_80.zip.h zork123_80.zip.l

результат - такой

MacAir:prod alexdindikov$ hexdump ~/Downloads/zork123_80.zip|head
0000000 50 4b 03 04 0a 00 00 00 06 00 00 00 21 00 5c d5
0000010 8d 1c 87 13 00 00 00 22 00 00 09 00 00 00 5a 4f
0000020 52 4b 31 2e 43 4f 4d 0f 00 12 03 24 15 36 27 38
0000030 39 6a 7b 4c 9d 6e 1f 09 06 01 13 34 e5 f6 96 f7
0000040 87 03 14 f8 f3 a2 d6 a7 52 97 c6 04 09 12 64 c0
0000050 00 7f 06 1c 76 cc 83 0e 87 9b 86 38 fc eb 41 95
0000060 06 01 f6 f5 ff df e5 ff 92 3a b5 87 64 6d 3e 20
0000070 f0 92 c9 65 d6 65 18 92 2b 40 83 0c 9b 2f 1d f8
0000080 5a 26 5f 80 21 d8 17 89 46 78 b5 00 23 50 f7 dc
0000090 f0 0e 1f 36 2f 08 90 27 70 9d b5 03 de 46 ee 33
MacAir:prod alexdindikov$ hexdump ~/Downloads/zork123_80.zip.h|head
0000000 50 03 0a 00 06 00 21 5c 8d 87 00 00 00 09 00 5a
0000010 52 31 43 4d 00 03 15 27 39 7b 9d 1f 06 13 e5 96
0000020 87 14 f3 d6 52 c6 09 64 00 06 76 83 87 86 fc 41
0000030 06 f6 ff e5 92 b5 64 3e f0 c9 d6 18 2b 83 9b 1d
0000040 5a 5f 21 17 46 b5 23 f7 f0 1f 2f 90 70 b5 de ee
0000050 00 91 01 7d d8 62 bf f6 5f 7a af 0d 7b e8 e3 1c
0000060 57 35 40 ba c0 c8 36 55 b8 4e 98 17 b1 40 08 81
0000070 40 2e 69 41 2c a1 95 8c 5a 19 35 55 eb 36 bb ad
0000080 31 7f 5f 18 86 1d b7 8a 2d 9f 70 f3 67 6f 60 94
0000090 4d 10 cb ec 64 93 0f 95 26 40 01 54 f4 01 c9 f6
MacAir:prod alexdindikov$ hexdump ~/Downloads/zork123_80.zip.l|head
0000000 4b 04 00 00 00 00 00 d5 1c 13 00 22 00 00 00 4f
0000010 4b 2e 4f 0f 12 24 36 38 6a 4c 6e 09 01 34 f6 f7
0000020 03 f8 a2 a7 97 04 12 c0 7f 1c cc 0e 9b 38 eb 95
0000030 01 f5 df ff 3a 87 6d 20 92 65 65 92 40 0c 2f f8
0000040 26 80 d8 89 78 00 50 dc 0e 36 08 27 9d 03 46 33
0000050 b4 83 27 0a 06 72 23 af bc 79 0e 3c f8 c1 f7 fe
0000060 40 b2 35 b2 90 05 ff 3c 62 ad b3 18 60 83 87 35
0000070 97 82 a2 a9 a3 56 b2 94 64 3d a8 91 17 1f f0 0e
0000080 ef 60 e5 07 cc d2 f6 03 37 bc 58 cd 69 12 ca cd
0000090 0e a6 8b 23 ff 17 31 df 6e ef 03 51 06 79 9a f0

Serg6845
30.12.2021, 16:05
результат - такой

MacAir:prod alexdindikov$ hexdump ~/Downloads/zork123_80.zip|head
0000000 50 4b 03 04 0a 00 00 00 06 00 00 00 21 00 5c d5
0000010 8d 1c 87 13 00 00 00 22 00 00 09 00 00 00 5a 4f
0000020 52 4b 31 2e 43 4f 4d 0f 00 12 03 24 15 36 27 38
0000030 39 6a 7b 4c 9d 6e 1f 09 06 01 13 34 e5 f6 96 f7
0000040 87 03 14 f8 f3 a2 d6 a7 52 97 c6 04 09 12 64 c0
0000050 00 7f 06 1c 76 cc 83 0e 87 9b 86 38 fc eb 41 95
0000060 06 01 f6 f5 ff df e5 ff 92 3a b5 87 64 6d 3e 20
0000070 f0 92 c9 65 d6 65 18 92 2b 40 83 0c 9b 2f 1d f8
0000080 5a 26 5f 80 21 d8 17 89 46 78 b5 00 23 50 f7 dc
0000090 f0 0e 1f 36 2f 08 90 27 70 9d b5 03 de 46 ee 33
MacAir:prod alexdindikov$ hexdump ~/Downloads/zork123_80.zip.h|head
0000000 50 03 0a 00 06 00 21 5c 8d 87 00 00 00 09 00 5a
0000010 52 31 43 4d 00 03 15 27 39 7b 9d 1f 06 13 e5 96
0000020 87 14 f3 d6 52 c6 09 64 00 06 76 83 87 86 fc 41
0000030 06 f6 ff e5 92 b5 64 3e f0 c9 d6 18 2b 83 9b 1d
0000040 5a 5f 21 17 46 b5 23 f7 f0 1f 2f 90 70 b5 de ee
0000050 00 91 01 7d d8 62 bf f6 5f 7a af 0d 7b e8 e3 1c
0000060 57 35 40 ba c0 c8 36 55 b8 4e 98 17 b1 40 08 81
0000070 40 2e 69 41 2c a1 95 8c 5a 19 35 55 eb 36 bb ad
0000080 31 7f 5f 18 86 1d b7 8a 2d 9f 70 f3 67 6f 60 94
0000090 4d 10 cb ec 64 93 0f 95 26 40 01 54 f4 01 c9 f6
MacAir:prod alexdindikov$ hexdump ~/Downloads/zork123_80.zip.l|head
0000000 4b 04 00 00 00 00 00 d5 1c 13 00 22 00 00 00 4f
0000010 4b 2e 4f 0f 12 24 36 38 6a 4c 6e 09 01 34 f6 f7
0000020 03 f8 a2 a7 97 04 12 c0 7f 1c cc 0e 9b 38 eb 95
0000030 01 f5 df ff 3a 87 6d 20 92 65 65 92 40 0c 2f f8
0000040 26 80 d8 89 78 00 50 dc 0e 36 08 27 9d 03 46 33
0000050 b4 83 27 0a 06 72 23 af bc 79 0e 3c f8 c1 f7 fe
0000060 40 b2 35 b2 90 05 ff 3c 62 ad b3 18 60 83 87 35
0000070 97 82 a2 a9 a3 56 b2 94 64 3d a8 91 17 1f f0 0e
0000080 ef 60 e5 07 cc d2 f6 03 37 bc 58 cd 69 12 ca cd
0000090 0e a6 8b 23 ff 17 31 df 6e ef 03 51 06 79 9a f0

а если внимательно прочитать условие задачи?


Мне нужно делить не по принципу четные-нечетные байты, а каждый байт делить на старшие 4 бита и на младшие 4 бита. У каждой ПЗУ выход на 4 разряда

Shumadan
30.12.2021, 16:12
на питоне программа
запускать так
python split.py zork123_80.zip zork123_80.zip.h zork123_80.zip.l

результат - такой


Не то
Нужно так:
Исходник:0000 50 2b 3a.....
Стало
1 образ: 0000 5 2 3...
2 образ: 0000 0 b a...

klingon
30.12.2021, 16:22
shudaman
я такое готовое решение видел на питоне в сети, как тебе нужно

reddie
30.12.2021, 17:30
То чувство, когда на Спектруме нужную прогу можешь в асме накидать за две минуты, но на Писюке полный нубас и ничем помочь не в состоянии.
Это про себя, если что =)

klingon
30.12.2021, 17:35
import sys
with open(sys.argv[1], 'rb') as file1, open(sys.argv[2], 'wb') as file2, open(sys.argv[3], 'wb') as file3:
byte1 = file1.read(1)
byte2 = file1.read(1)
while (byte1 or byte2):
if not byte2:
high1, low1 = ord(byte1) & 0xF0, (ord(byte1) & 0x0F) << 4
high2, low2 = ord(byte2) >> 4, ord(byte2) & 0x0F
file2.write(chr(high1))
file3.write(chr(low1))
else:
high1, low1 = ord(byte1) & 0xF0, (ord(byte1) & 0x0F) << 4
high2, low2 = ord(byte2) >> 4, ord(byte2) & 0x0F
file2.write(chr(high1+high2))
file3.write(chr(low1+low2))
byte1 = file1.read(1)
byte2 = file1.read(1)



MacAir:Downloads alexdindikov$ python split.py zork123_80.zip zork123_80.zip.h zork123_80.zip.l
MacAir:Downloads alexdindikov$ hexdump zork123_80.zip|head
0000000 50 4b 03 04 0a 00 00 00 06 00 00 00 21 00 5c d5
0000010 8d 1c 87 13 00 00 00 22 00 00 09 00 00 00 5a 4f
0000020 52 4b 31 2e 43 4f 4d 0f 00 12 03 24 15 36 27 38
0000030 39 6a 7b 4c 9d 6e 1f 09 06 01 13 34 e5 f6 96 f7
0000040 87 03 14 f8 f3 a2 d6 a7 52 97 c6 04 09 12 64 c0
0000050 00 7f 06 1c 76 cc 83 0e 87 9b 86 38 fc eb 41 95
0000060 06 01 f6 f5 ff df e5 ff 92 3a b5 87 64 6d 3e 20
0000070 f0 92 c9 65 d6 65 18 92 2b 40 83 0c 9b 2f 1d f8
0000080 5a 26 5f 80 21 d8 17 89 46 78 b5 00 23 50 f7 dc
0000090 f0 0e 1f 36 2f 08 90 27 70 9d b5 03 de 46 ee 33
MacAir:Downloads alexdindikov$ hexdump zork123_80.zip.h|head
0000000 54 00 00 00 00 00 20 5d 81 81 00 02 00 00 00 54
0000010 54 32 44 40 01 02 13 23 36 74 96 10 00 13 ef 9f
0000020 80 1f fa da 59 c0 01 6c 07 01 7c 80 89 83 fe 49
0000030 00 ff fd ef 93 b8 66 32 f9 c6 d6 19 24 80 92 1f
0000040 52 58 2d 18 47 b0 25 fd f0 13 20 92 79 b0 d4 e3
0000050 0b 98 02 70 d0 67 b2 fa 5b 77 a0 03 7f ec ef 1f
0000060 54 3b 43 bb c9 c0 3f 53 b6 4a 9b 11 b6 48 08 83
0000070 49 28 6a 4a 2a a5 9b 89 56 13 3a 59 e1 31 bf a0
0000080 3e 76 5e 10 8c 1d bf 80 23 9b 75 fc 66 61 6c 9c
0000090 40 1a c8 e2 6f 91 03 9d 26 4e 00 55 f0 07 c9 ff
MacAir:Downloads alexdindikov$ hexdump zork123_80.zip.l|head
0000000 0b 34 a0 00 60 00 10 c5 dc 73 00 02 00 90 00 af
0000010 2b 1e 3f df 02 34 56 78 9a bc de f9 61 34 56 67
0000020 73 48 32 67 27 64 92 40 0f 6c 6c 3e 7b 68 cb 15
0000030 61 65 ff 5f 2a 57 4d e0 02 95 65 82 b0 3c bf d8
0000040 a6 f0 18 79 68 50 30 7c 0e f6 f8 07 0d 53 e6 e3
0000050 04 13 17 da 86 22 f3 6f fc a9 fe dc b8 81 37 ce
0000060 70 52 05 a2 00 85 6f 5c 82 ed 83 78 10 03 87 15
0000070 07 e2 92 19 c3 16 52 c4 a4 9d 58 51 b7 6f b0 de
0000080 1f f0 f5 87 6c d2 76 a3 d7 fc 08 3d 79 f2 0a 4d
0000090 de 06 bb c3 4f 37 f1 5f 6e 0f 13 41 46 19 9a 60

reddie
30.12.2021, 18:18
klingon тоже не то, ему нужны половинки отдельно, в разных байтах, а не засунутые из соседних в один.
То бишь значение в разделённых массивах от 0 до F в любом байте.

klingon
30.12.2021, 18:37
правильно я понял, что нужно так?
Исходник:0000 50 2b 3a.....
Стало
1 образ: 0000 50 20 30...
2 образ: 0000 00 0b 0a...

а то я еще много вариантов могу придумать
или как ты говоришь
нужно
1 образ: 0000 05 02 03...
2 образ: 0000 00 0b 0a...

- - - Добавлено - - -


import sys
with open(sys.argv[1], 'rb') as file1, open(sys.argv[2], 'wb') as file2, open(sys.argv[3], 'wb') as file3:
byte1 = file1.read(1)
while (byte1):
high1, low1 = ord(byte1) >> 4, ord(byte1) & 0x0F
file2.write(chr(high1))
file3.write(chr(low1))
byte1 = file1.read(1)


MacAir:Downloads alexdindikov$ hexdump zork123_80.zip |head -n 2
0000000 50 4b 03 04 0a 00 00 00 06 00 00 00 21 00 5c d5
0000010 8d 1c 87 13 00 00 00 22 00 00 09 00 00 00 5a 4f
MacAir:Downloads alexdindikov$ hexdump zork123_80.zip.h |head -n 2
0000000 05 04 00 00 00 00 00 00 00 00 00 00 02 00 05 0d
0000010 08 01 08 01 00 00 00 02 00 00 00 00 00 00 05 04
MacAir:Downloads alexdindikov$ hexdump zork123_80.zip.l |head -n 2
0000000 00 0b 03 04 0a 00 00 00 06 00 00 00 01 00 0c 05
0000010 0d 0c 07 03 00 00 00 02 00 00 09 00 00 00 0a 0f

так надо?

Shumadan
30.12.2021, 18:45
Это ближе. Но нужно конвертировать в полбайта. Т. ё. не 05 , а просто 5 . А то мне еще нули нужно будет убирать )

klingon
30.12.2021, 18:53
Это ближе. Но нужно конвертировать в полбайта. Т. ё. не 05 , а просто 5 . А то мне еще нули нужно будет убирать )
вот это не понял совсем, нету там никаких нулей, это ж байт состоит из двух половинок, а верхняя теперь будет 0
последний скрипт делает так, что каждый байт был равен половинке байта исходного, верхней или нижней
05 = 5
в чем проблема?
это вывод hexdump

четко сформулируйте задачу, либо из #14 подходит, либо из #16

Serg6845
30.12.2021, 18:59
Это ближе. Но нужно конвертировать в полбайта. Т. ё. не 05 , а просто 5 . А то мне еще нули нужно будет убирать )

осталось понять, как в файл, состоящий из целых байтов, сложить половинки байтов.
есть возможность взять целевой программатор, прочитать 4-битную ПЗУ, сохранить и выложить файл сюда?

Shumadan
30.12.2021, 20:10
вот это не понял совсем, нету там никаких нулей, это ж байт состоит из двух половинок, а верхняя теперь будет 0
последний скрипт делает так, что каждый байт был равен половинке байта исходного, верхней или нижней
05 = 5
в чем проблема?
это вывод hexdump

четко сформулируйте задачу, либо из #14 подходит, либо из #16

Прошу прощения, заработался. Все нормально.
Запутался с этими байтами - полубайтами. Проверил сейчас, пишется младший полубайт, старший заменяется нулем
Спасибо за помощь. Буду пробовать