Программирование расширения BIOS

Тема в разделе "WASM.ASSEMBLER", создана пользователем ukun, 24 июн 2007.

  1. ukun

    ukun New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2007
    Сообщения:
    4
    Создано расширение BIOS для PCI-устройства в виде exe-файла (инструмент Turbo Assembler, ver 3.1, MODEL TINY, размер 4К). Его надо превратить в двоичный bin-файл и прошить в ПЗУ. Но!!! стандартный способ получения bin-файла через com-файл не работает. Линкер выдает ошибку и не делает потому что "обнаружил stack segment". Но без стека не получается а и ни одно руководство по Turbo Assembler не запрещает иметь стек в com-файле.
    Помогите разобраться с проблемой! (форум на эту тему я уже просмотрел и попробывал все предлагаемые варианты). ниже приведен кусок из программы на который ругается линкер:

    IDEAL
    P386
    LOCALS
    MODEL TINY

    CODESEG
    ORG 0
    ;========== PCI ROM Header structure ==========
    RomSignByte1 DB 055h
    RomSignByte2 DB 0AAh
    InitSize DB 010h ;length by units of 512 bytes (?)
    jmp START ;3 bytes command !!!
    EntryPointInit DB 3 DUP (?)
    RsvPciRom DB 12h DUP (?) ;reserved
    PciDataPointer DW SHORT OFFSET PciSign ; pointer to PCI DATA structure
    ;====== End of PCI ROM Header structure =======

    ;========== PCI DATA structure ============
    PciSign DB "PCIR" ;50h,43h,49h,52h
    VendorIdent DW 0000h
    DeviceIdent DW 0001h
    RsvPciData1 DW 0000h ;reserved
    ;PciDataStrucLenrth DW (OFFSET DevSignPtr)+(SIZE DevSignPtr)-(OFFSET PciSign)
    PciDataStrucLenrth DW SIZE_PciDataStruc
    PciDataStrucRev DB 01h
    DevClassCode DB 01h,01h,080h
    ImageLength DW 08h ;length by units of 512 bytes
    RevisionLevel DW 01h
    Codetype DB 0 ;Intel x86, PC-AT compatible
    Indicator DB 080h ;bit-7=1:Last image in ROM
    RsvPciData2 DW 0000h ;reserved
    DevSignPtr DW 0000h ;pointer to device signature
    ;========= End of PCI DATA structure ==========

    SIZE_PciDataStruc = (OFFSET DevSignPtr)+(SIZE DevSignPtr)-(OFFSET PciSign)
    ENDS

    DATASEG
    ;messages
    AnyK DB YELLOW,23,29,"Press any key",0
    ENDS

    SEGMENT sseg para stack 'STACK' ;//ругается линкер !!!
    DB 400h DUP(?)
    ENDS

    CODESEG
    ;//------------------------------------------------------------------//
    ;// MAIN PROCEDURE //
    ;//------------------------------------------------------------------//
    START:
    PROC P2A_ROM_Expansion
    mov AX,DGROUP
    mov DS,AX
    ;set display text mode and clear screen
    mov AX,3
    int 10h
    ;clear screen
    call ClearScreen

    *
    *
    ; Основное тело программы
    *
    *

    @@EndRomExp:
    ;set Green color and show message ("Press any key")
    mov SI,offset AnyK
    call ShowColorString
    ; waiting press any key
    call GetChar
    ;set display mode
    mov ax,3
    int 10h
    ;return to BIOS
    retf
    ;return to DOS // используется в exe-файле
    ; mov AH,4Ch
    ; int 21h

    ENDP P2A_ROM_Expansion
    ENDS
    END START
     
  2. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    обсуждалось недавно
    http://wasm.ru/forum/viewtopic.php?id=20620http://wasm.ru/forum/viewtopic.php?id=20620
    в твоем случае как org, так и размер результата меньше 64К, так что хватит чисто средств ТАСМа.

    только тебе это едва ли поможет, ты пытаешься как бинарник собрать конкретный .exe -- со стеком, датасегом и entrypoint'ом не с начала, со всеми выкающими выводами...
     
  3. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Переделай в скомканый файл, тоесть напиши вручную инициализацию стека и перенеси данные после кода. И есчё одно - фасм в деле создания бинарных файлов помоему рулит больше.
     
  4. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    ukun

    А в какое ПЗУ ты пытаешься это прошить? - эта самая серьезная проблема.

    - а со стеком, и собственно с инструкциями
    mov AX,DGROUP
    mov DS,AX
    это не проблема - выдели участок памяти установи на него ss:sp и работай, если память еще не инициализированна, то посмотри как это сделано в BIOS на начальных этапах загрузи.
     
  5. ukun

    ukun New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2007
    Сообщения:
    4
    to _BC_: что я что-то делаю не так я и сам понял. Я прошу совета что делать правильно. Ну хотя бы что и где капать. А эту ссылку я и смотрел, однако она мне не помогла...
     
  6. ukun

    ukun New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2007
    Сообщения:
    4
    to rudik: переходить на нет смысла, т.к. в TASM'е уже сделано много библиотек и макросов
     
  7. ukun

    ukun New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2007
    Сообщения:
    4
    to PROFi: а почему прошивка ПЗУ - эта самая серьезная проблема? При наличии программатора мне это пока не видится затруднительным
     
  8. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Так не переходи, это всево лишь совет. Инициализируй данные и стек где нибуть в памяти и перепрошивай - все будет работать.