Biblioteka Allegro i Asembler.
30 May, 2018
Biblioteka Allegro w wersji 4 nie jest już rozwijana. Jednak pokażę w tym wpisie jak skorzystać z tej biblioteki posługując się asemblerem. Wykorzystam NASM. Strona oficjalna projektu znajduje się pod adresem www.nasm.us
Potrzebny również będzie kompilator gcc i jego biblioteki. Można pobrać z tej strony - GNU GCC Collection
Dla programujących pod Windows wystarczy zainstalować MinGW.
Dla chcących coś więcej Cygwin powinien zadowolić swoją funkcjonalnością.
Program graf1.exe działa w trybie okienkowym. Wyświetla napis i rysuje prostą i okrąg. Następnie czeka na wciśnięcie klawisza, po czym zostaje zamknięty.
; Program graf1.exe wykorzystuje bibliotekę Allegro
;
; Autor: Bogdan D., bogdandr (at) op.pl
; Modyfikacja: Sylvi91
;
; kompilacja:
;
; nasm -f win32 -o graf1.o graf1.asm
;
; linkowanie dynamiczne. Uwaga program wymaga biblioteki .dll do działania!
;
; gcc -o graf1 graf1.o -L"YourDirectorylib" -lalleg -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound
;
; linkowanie statyczne.
;
; gcc -o graf1 graf1.o -L"YourDirectorylib" -lalleg_s -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound
;
section .text
; wymagane przez Allegro:
global _main
global _mangled_main
global _mangled_main_address
; deklaracje elementów zewnętrznych:
extern _install_allegro
extern _install_keyboard
extern _set_color_depth
extern _set_gfx_mode
extern _allegro_exit
extern _text_mode
extern _set_palette
extern _default_palette
extern _clear_to_color
extern _screen
extern _textout
extern _font
extern _line
extern _makecol
extern _circle
extern _readkey
%define GFX_AUTODETECT 0 ; autowykrywanie sterownika
%define GFX_AUTODETECT_WINDOWED 2 ; autowykrywanie sterownika
_main: ; TO WŁĄCZYĆ, JEŚLI ALLEGRO WYMAGA FUNKCJI MAIN
_mangled_main:
; inicjalizacja biblioteki:
push dword 0
push err ; nasza zmienna do błędów
push dword 0
call _install_allegro
add esp, 3*4 ; zdjęcie parametrów ze stosu
; instalacja klawiatury
call _install_keyboard
; ustawienie głębi kolorów:
push dword 8
call _set_color_depth
add esp, 1*4 ; zdjęcie parametrów ze stosu
; ustawienie rozdzielczości:
push dword 0 ; wysokość okna
push dword 0 ; szerokość okna
push dword 480 ; wysokość całego trybu
push dword 640 ; szerokość całego trybu
push dword GFX_AUTODETECT_WINDOWED
call _set_gfx_mode
add esp, 5*4
; sprawdź, czy się udało
cmp eax, 0
jne koniec
; ustaw tło pod tekstem
push dword -1
call _text_mode
add esp, 1*4
; ustaw domyślną paletę
push dword _default_palette
call _set_palette
add esp, 1*4
; wyczyść ekran
push dword 0 ; czyść na czarno
push dword [_screen] ; co czyścić
call _clear_to_color
add esp, 2*4
; wyświetl napis
push dword 15 ; kolor
push dword 10 ; współrzędna Y
push dword 10 ; współrzędna X
push dword napis ; napis do wyświetlenia
push dword [_font] ; czcionka
push dword [_screen] ; gdzie wyświetlić
call _textout
add esp, 6*4
; stwórz kolor biały do narysowania linii
push dword 255 ; składowa niebieska
push dword 255 ; składowa zielona
push dword 255 ; składowa czerwona
call _makecol
add esp, 3*4
; narysuj linię
push eax ; kolor
push dword 240 ; współrzędna Y końca
push dword 320 ; współrzędna X końca
push dword 400 ; współrzędna Y początku
push dword 540 ; współrzędna X początku
push dword [_screen]
call _line
add esp, 6*4
; stwórz kolor zielony do narysowania koła
push dword 0
push dword 255
push dword 0
call _makecol
add esp, 3*4
; narysuj koło
push eax ; kolor
push dword 20 ; promień
push dword 240 ; współrzędna Y środka
push dword 320 ; współrzędna X środka
push dword [_screen]
call _circle
add esp, 5*4
; czekaj na klawisz
call _readkey
koniec:
; zamknij Allegro
call _allegro_exit
; powróć z naszej funkcji głównej
ret
section .data
napis db "Allegro", 0 ; napis do wyświetlenia
_mangled_main_address dd _mangled_main ; wymagane
err dd 0 ; nasza zmienna błędów
Przykład pochodzi z tej strony.
... i to tyle.