Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » rom basic своими руками |
<<Назад Вперед>> | Страницы: 1 * 2 3 4 5 6 7 | Печать |
Alex-M
Junior Member
Всего сообщений: 136 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 6 мая 2008 |
Вот сдесь можно качнуть архив прошивок и БИОСов и есть РОМ Басик, смотрите в самом архиве тхт файлик, там написано, что за прошифки : http://www.mediafire.com/?2iyijya4iwu |
Alex-M
Junior Member
Всего сообщений: 136 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 6 мая 2008 |
Alex-M написал: http://www.mediafire.com/?2iyijya4iwuПросматривал Нортоном в ДОСе файлики в этом архиве, один очень интересный : 1501512.bin - в нутри есть такие строчки : The IBM Personal Computer Basic Version C1.10 Copyright IBM Corp 1981 Вот сдесь можно качнуть архив прошивок и БИОСов и есть РОМ Басик, смотрите в самом архиве тхт файлик, там написано, что за прошифки : так же ясно просматриваются слова : LOAD RUN SCREEN и т.д. Похоже он и есть - ROM BASIC и весит 32 кило как раз под ПЗУ 27256 |
Sergei Frolov
Advanced Member
Коллекционер Откуда: Питер Всего сообщений: 2719 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июля 2003 |
Вот BIOS от IBM PS/2 c бейсиком. Может пригодится. http://slil.ru/26318925 |
uav1606
Advanced Member
Откуда: Енакиево Всего сообщений: 4373 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 16 янв. 2008 |
Сигнатуры 55h AAh таки нет. Да и в тех файлах (http://www.mediafire.com/?2iyijya4iwu) тоже, вроде, этой сигнатуры нет. Непонятно, где находится точка входа. Вот BIOS от IBM PS/2 c бейсиком |
0leg
Advanced Member
Откуда: Город-герой Тула Всего сообщений: 1991 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 6 окт. 2007 |
uav1606, эти прошивки очень похожи на обычные БИОСы — см. последние 16 байт. В файле 1501215.bin по адресу 7ff0h находится команда jmp 0f000:0e05b, вот это и есть точка входа. Файлы от Сергея надо объединить в один, через байт. И там та же фигня получится, только адрес другой (0fff0). |
Alex-M
Junior Member
Всего сообщений: 136 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 6 мая 2008 |
uav1606 написал: Эти сигнатуры нужны для загрузки с диска :Сигнатуры 55h AAh таки нет. Да и в тех файлах (http://www.mediafire.com/?2iyijya4iwu) тоже, вроде, этой сигнатуры нет. Непонятно, где находится точка входа. Вот BIOS от IBM PS/2 c бейсиком "Во время начальной загрузки базовая система ввода-вывода проверяет два последних байта главной загрузочной записи (первый сектор жесткого диска), значение "сигнатуры" которых должно быть 55AAh. Если два последних байта не равны 55AAh, вызывается прерывание 18h. В результате происходит обращение к подпрограмме, которая выводит на экран полученное сообщение или вызывает в системе IBM интерпретатор Cassette (ROM) BASIC." 0leg написал: Вот-вот Петя Нортон в свое время то же писал что то подобное : uav1606, эти прошивки очень похожи на обычные БИОСы — см. последние 16 байт. В файле 1501215.bin по адресу 7ff0h находится команда jmp 0f000:0e05b, вот это и есть точка входа. Файлы от Сергея надо объединить в один, через байт. И там та же фигня получится, только адрес другой (0fff0). 6.4. Анализ содержимого ПЗУ - реконструкция интерпретатора В качестве примера попробуем деассемблировать фрагмент Бэйсик-ПЗУ. Начнем с исходного параграфа, т.е. параграфа с адресом F600(16). На рисунке 6.3 представлен результат деассемблирования первых 32 байтов. Шестнадцатеричные нули в конце фрагмента программы (преобразованы деассемблером в команды ADD (Сложить)) представляют собой данные. Они "хорошо" иллюстрируют высказанное ранее положение о том, что нулевые данные нетипичны для ПЗУ-программ. Команда DB (определить байт), предшествующая полю нулей, появилась как реакция деассемблера на кодовую комбинацию, которая не может быть преобразована в команду ассемблера (такая ситуация, благодаря широкому набору команд, встречается довольно редко). Итак, являются ли все данные, которым предшествует команда безусловного перехода собственно осмысленными командами? Предварительный ответ на этот вопрос может быть положительным, поскольку для завершения выполнения подпрограммы используется команда возврата (RET). Пока все идет хорошо. Можно ли приписать какие-то осмысленные действия первым пяти командам деассемблированной программы? Эти команды выглядят несколько странно, поскольку начинаются с команды безусловного перехода (JMP). Большинство программ, однако, первым делом выполняют ряд действий настроечного плана, обращаясь для этого посредством команд вызова подпрограмм или переходов, к нужным процедурам. Таким образом, безусловный переход в начале программы - каким бы причудливым он не казался - не такая уж бессмыслица. Следующие четыре команды - две пары обращения к подпрограммам с последующими командами возврата в процедуру не особенно понятны, но, по крайней мере, не противоречат друг другу и могут в какой-то степени служить признаком наличия последовательности команд. Можно, следовательно, сделать предположение о том, что мы имеем дело с реальной последовательностью команд. Из того, чем мы располагаем - даже при том, что на рисунке 6.3 представлена реальная последовательность команд - вряд ли можно извлечь какую-то пользу. Только пять команд почти ничего не совершающих. И все-таки есть ряд интересных моментов. Если это действительно реальная последовательность, то нам названы три адреса, где могут оказаться вещи более интересные. Речь идет об адресе в команде перехода и адресах двух последующих каманд обращения к процедуре. Следует ли нам пойти по адресу перехода? Деассемблер дает нам этот адрес (относительно начала нашей программы, т.е. адреса F600/16) - FE92/16. Выполним деассемблирование небольшого участка памяти, начинающегося с этого адреса (результат приведен на рис 6.4.) -U F600:0000 F600:0000 E98F7E JMP 7E92 F600:0003 E8A76B CALL 6BAD F600:0006 CB RET L F600:0007 E80265 CALL 650C F600:000A CB RET L F600:000B C1 DB C1 F600:000C 0000 ADD [BX+SI],AL F600:000E 0000 ADD [BX+SI],AL F600:0010 0000 ADD [BX+SI],AL F600:0012 0000 ADD [BX+SI],AL F600:0014 0000 ADD [BX+SI],AL F600:0016 0000 ADD [BX+SI],AL F600:0018 0000 ADD [BX+SI],AL F600:001A 0000 ADD [BX+SI],AL F600:001C 0000 ADD [BX+SI],AL F600:001E 0000 ADD [BX+SI],AL Рис. 6.3. Деассемблирование начального участка Бэйсика Похоже, мы попали в точку. Во-первых, перед нами совокупность осмысленных команд, не содержащая ни последовательностей операторов DB, ни последовательностей операторов ADD.Во-вторых, эти команды весьма напоминают команды настройки.Об этом говорит прежде всего команда CLI, (CLI (Clear interrupt flag) - очистка флага прерывания). Прерывание в микропроцессоре INTEL 8086/8088 воспринимается по завершении выполнения некоторой команды. Немаскируемое прерывание в общем случае обслуживается непосредственно после выполнения текущей команды. Прерывание по вектору воспринимается только тогда, когда разряд IF (флаг прерывания) в регистре FLAGS имеет значение, равное 1. Для того, чтобы микропроцессор 8086 воспринял прерывание, необходимо выполнение следующих трех условий: 1) разряд IF регистра FLAGS должен иметь значение, равное 1 (для прерываний по вектору); 2) разряд разрешения прерываний в интерфейсе устройства должен находиться в состоянии "Прерывание разрешено"; 3) интерфейс должен зафиксировать некоторое событие, вызывающее прерывание (например, поступление символа с клавиатуры, готовность к выводу символа на дисплей, завершение передачи блока данных с диска и т.п.) (Прим.перев.)). которая, как мы видели в главе 3 используется как средство блокировки прерываний; таким образом вся последовательность выполнения расположенных ниже команды прервана быть не может. Именно такая последовательномть команд характерна для начальных аргументов ответственных программ, поскольку значения сегментных регистров целесообразно устанавливать одновременно с обработкой прерываний. Ниже производятся как раз те действия, о которых мы говорили выше, а именно: загрузка сегментных регистров. С помощью четырех команд MOV (команды пересылки данных) осуществляется загрузка трех сегментных регистров из четырех: DS, ES и SS. Загрузка этих регистров осуществляется весьма редко, поэтому естественно это сделать один раз в начале программы. (Сегментный регистр программы CS к этому моменту уже загружен ( F600 : 0000, рис. 6.3.). Вслед за группой, состоящей из четырех команд MOV, осуществляющих загрузку сегментных регистров, следует две команды, выполняющие одну логическую операцию. Первая команда - это команда "исключающего ИЛИ" XOR - заносит в регистр AL значение "нуль" (поскольку в результате применения "исключающего ИЛИ" к эквивалентным данным образуется новая величина), а вторая команда заносит эту величину по конкретному адресу. Программа не содержит никаких сведений относительно содержательной интепретации этих операций, но это вполне осмысленное сочетание команд, выполняющих конкретную функцию. Если бы мы располагали более полной информацией об особенностях работы Бэйсика, то нам, вероятно, было бы известно, что нулевая величина, пересылаемая в память с помощью двух двух последовательных команд представляет собой переключатель предохраняющий защищенные программы. При загрузке защищенных программ, написанных на языке Бэйсик, этот переключатель устанавливается с целью предотвращения выдачи их на печать. Это, однако, никак не следует из представленного листинга. Первые семь команд рассматриваемого участка программы, таким образом, выглядят вполне осмысленно. Они реализуют рациональные и согласованные между собой действия и естественным образом распадаются на два класса: команды со 2-й по 5-ю реализуют одну логическую операцию, а с 6-й по 7-ю - другую. Пред'явленные команды отвечают всем критериям реального участка программы. -U F600:7E92 F600:7E93 8A6000 CLI F600:7E93 8A6000 MOV DX,0060 F600:7E96 8EDA MOV DS,DX F600:7E98 8EC2 MOV ES,DX F600:7E9A 8ED2 MOV SS,DX F600:7E9C 32CO XOR AL,AL F600:7E9E A26404 MOV [0464],AL F600:7EA1 B591 MOV CH,91 F600:7EA3 BB0000 MOV BX,0000 F600:7EA6 BA9A06 MOV DX,069A F600:7EA9 BBF2 MOV SI,DX F600:7EAB 2E SEG CG F600:7EAC AC LODSB F600:7EAD 8807 MOV [BX],AL F600:7EAF 43 INC BX F600:7EBO 42 INC DX F600:7EB1 FECD DEC CH |
0leg
Advanced Member
Откуда: Город-герой Тула Всего сообщений: 1991 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 6 окт. 2007 |
Alex-M, > Эти сигнатуры нужны для загрузки с диска > [...] > главной загрузочной записи (первый сектор жесткого диска) Здесь разговор идёт не о загрузочной записи на диске, а о сигнатуре в БИОСе карт расширения. К загрузке с диска она никакого отношения не имеют, эти сигнатуры ищутся основным БИОСом с целью инициализации карт расширения. А вот руководство от Пети мог бы и как-нить отдельно выложить... А то много букф, ниасилил |
Alex-M
Junior Member
Всего сообщений: 136 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 6 мая 2008 |
0leg написал: Самое интересное, что сигнатура 55АА именно на биусах для дисковых контроллеров и видеокарт которые стартуют с адресов типа С800, D000 ну или подобных, а басик стартует с F600 через int18h, если не обнаруживаются дисководы или винты. Alex-M, |
uav1606
Advanced Member
Откуда: Енакиево Всего сообщений: 4373 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 16 янв. 2008 |
Из всего этого делаем вывод, что Basic хранится не в стандартном блоке расширения BIOS. Интересно, так ли это в случае наличия доп. панельки под Basic? Как тогда основная BIOS узнаёт о наличии микросхемы в этой панельке? Хотя, наверное, есть и другие способы это узнать... |
Alex-M
Junior Member
Всего сообщений: 136 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 6 мая 2008 |
uav1606 написал: Наверное, типа так : Как тогда основная BIOS узнаёт о наличии микросхемы в этой панельке? MOV AX,0F600h ; AX --> Rom basic segment MOV DS,AX ; DS --> " " " XOR BX,BX ; BX = Rom basic offset MOV AH,4 ; Four basic roms to check MOV BP,SP ; Save the stack pointer PUSH CS ; ...push code segment MOV DX,offset SKIP ; Save the code offset PUSH DX ; ...for RAM_PATCH subroutine MOV DX,0EA90h ; Mov DX,'NOP,JMP_FAR' PUSH DX ; ...save it on stack MOV DX,0178Bh ; Mov DX,'MOV DX,[BX]' PUSH DX ; ...save it on stack PUSH SS ; Save stack segment MOV DX,SP ; ...get the stack offset ADD DX,02h ; ...calculate xfer addr. PUSH DX ; ...save it on the stack ; RETF ; Test for BASIC rom ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; MOV DX,[BX] ; Executes off the stack ; ; JMPF 0F000h,SKIP ; ...in RAM space ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SKIP: MOV SP,BP ; Restore the stack pointer CMP DL,DH ; ...compare 1st and 2nd byte JE kosher ; ...perfection. No piracy B_ROM: CALL CHKSUM ; Scan for BASIC roms JNZ kosher ; ...bad basic rom DEC AH ; Continue JNZ B_ROM ; ...yes, more POP DS ; Else valid basic MOV DI,60h ; ...install basic XOR AX,AX ; ...zero BASIC interrupt STOSW ; ...offset MOV AX,0F600h ; ...F600h BASIC interrupt STOSW ; ...segment PUSH DS kosher: POP DS ; Setup special low vectors MOV Word ptr ES:8,offset int_2 ; ...NMI interrupt MOV Word ptr ES:14h,offset int_5 ; ...print screen interrupt MOV Word ptr ES:7Ch,0 ; No special graphics chars. MOV Word ptr ES:7Eh,0 ; ...so zero vector 1Fh MOV DX,61h IN AL,DX ; Read machine flags OR AL,00110000b ; ...clear old parity error |
<<Назад Вперед>> | Страницы: 1 * 2 3 4 5 6 7 | Печать |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » rom basic своими руками |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |