Autor |
Wiadomość |
CichyHD
Administrator
Dołączył: 16 Paź 2013
Posty: 25
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
|
[TuT]Konfiguracja DOSBox, polecenie do nasma. |
|
1.Uruchamiamy "DOSBox options" na końcu dodajemy mount c: d:\users\(nazwa naszego katalogu)\ i zapisujemy
2.Odpalamy DOSBox-a, wpisujemy c: i klikamy enter.
Odpalamy nasma znajdziemy go na dysku P w folderze nasm.
Aby skompilować program w nasmie wpisujemy:
cd (nazwa naszego katalogu)
"nasm (nazwa pliku).asm -f bin -o (nazwa pliku).com"
Teraz możemy odpalic nasz program w DOSBoxie, wpisujemy nazwe naszego programu i klikamy enter
Post został pochwalony 0 razy
Ostatnio zmieniony przez CichyHD dnia Czw 17:44, 24 Paź 2013, w całości zmieniany 4 razy
|
|
Czw 17:55, 17 Paź 2013 |
|
 |
|
 |
mostrom
Moderator
Dołączył: 17 Paź 2013
Posty: 3
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
|
|
|
Program ułatwiający tworzenie, kompilowanie i odpalanie jednoplikowych programów w asemblerze.
Link:
 |  | http://puu.sh/53daa.zip |
mam nadzieję, że wam zadziała..
insktrukcja:
1) rozpakować plik do jakiegoś katalogu
!! Program utworzy plik konfiguracyjny i katalog z "biblioteką" programów w asemblerze obok exeka
można odpalić program
2) Jeśli ścieżki w konfiguracyjnym pliku się nie zgadzają z preferowanym położeniem biblioteki oraz z miejscem instalacji nasma i dosboxa, to trzeba zmienić wg potrzeb.
- pierwsza linijka: miejsce biblioteki (może być gdziekolwiek)
- druga linijka: katalog nasma
- trzecia linijka: plik DOSBox.exe
3) zapisujemy config.txt i jedziemy
Projekt zostaje utworzony w bibliotece (podanej w pliku config.txt w pierwszym wierszu).
Nasz kod źródłowy to <nazwa_projektu>.asm
Kompilujemy program uruchamiając plik wsadowy "kompiluj.bat"
Uruchamiamy program plikiem "odpalamy.bat"
Programik napisany w c++, a oto jego kod:
 |  | /*
AsmProject
:p by jacek q:
*/
#include <fstream>
#include <string>
#include <iostream>
#include <Windows.h>
#include <unistd.h> //acces(const char*, FLAGI), F_OK - plik istnieje
using namespace std;
string instance_path() //zwraca sciezke do pliku wykonywanego (znalazłem gdzieś na internetach to)
{
int max_buf = 100;
char buffer[ max_buf ];
GetModuleFileNameA( NULL, buffer, max_buf );
string::size_type pos = string( buffer ).find_last_of( "\\/" ); // of /
return string( buffer ).substr( 0, pos + 1 ); // ze znakiem "/" na koncu
}
const string DEFAULT_PATH = instance_path() + "programy\\";
string f_conf_name = "config.txt";
const string DOSBOX_DEFAULT_FILE = "D:\\Programy\\DOSBox-0.74\\DOSBox.exe";
string NASM_DEFAULT_PATH;
string nasm_pth(char** env)
{
string program_files, program_files_path;
while(*env)
{
string zmienna = string(*env);
if(zmienna.substr(0, zmienna.find('=')) == "ProgramFiles(x86)")
{
program_files = "%ProgramFiles(x86)";
program_files_path = zmienna.substr(zmienna.find('=')+1, zmienna.length() - zmienna.find('='));
break;
}
else
{
if(zmienna.substr(0, zmienna.find('=')) == "ProgramFiles")
{
program_files = "ProgramFiles";
program_files_path = zmienna.substr(zmienna.find('=')+1, zmienna.length() - zmienna.find('='));
break;
}
}
*env++;
}
return program_files_path+"\\nasm";
}
bool reset_conf( fstream & plik )
{
if( plik.is_open() )
plik.close();
plik.clear();
plik.open( f_conf_name.c_str(), ios::out | ios::trunc );
if( !plik || !plik.is_open() ) return false;
plik << DEFAULT_PATH << endl
<< NASM_DEFAULT_PATH << endl
<< DOSBOX_DEFAULT_FILE;
plik.close();
plik.clear();
plik.open( f_conf_name.c_str(), ios::in );
if( !plik || !plik.is_open() ) return false;
return true;
}
string existing_path( string path ) //czysty substr
{
string ret_path;
string::size_type pos = 0, pocz_pos = 0;
while(( pos = path.find_first_of( "\\", pos ) ) != string::npos )
{
if( access( path.substr( 0, pos ).c_str(), F_OK ) == 0 )
{
ret_path = path.substr( 0, pos );
}
pocz_pos = pos;
pos++;
}
//ostatni przebieg, jesli na koncu nie ma "\"
if( path[ path.length() - 1 ] != '\\' )
{
if( access( path.substr( 0, pos ).c_str(), F_OK ) == 0 )
{
ret_path = path.substr( 0, pos );
}
}
return ret_path;
}
string missing_path( string path ) //czysty substr
{
string ret_path;
string::size_type pos = 0, pocz_pos = 0;
while(( pos = path.find_first_of( "\\", pos ) ) != string::npos )
{
if( access( path.substr( 0, pos ).c_str(), F_OK ) == 0 )
{
pocz_pos = pos;
}
pos++;
}
ret_path = path.substr( pocz_pos, path.length() - pocz_pos );
return ret_path;
}
bool zaladuj_dosbox_conf(fstream & plik, string path, string nazwa)
{
plik << "[sdl]" << endl
<< "fullscreen=false" << endl
<< "fulldouble=false" << endl
<< "fullresolution=0x0" << endl
<< "windowresolution=0x0" << endl
<< "output=overlay" << endl
<< "autolock=true" << endl
<< "sensitivity=100" << endl
<< "waitonerror=true" << endl
<< "priority=higher,normal" << endl
<< "mapperfile=mapper.txt" << endl
<< "usescancodes=true" << endl
<< endl
<< "[dosbox]" << endl
<< "language=" << endl
<< "machine=svga_s3" << endl
<< "captures=capture" << endl
<< "memsize=16" << endl
<< endl
<< "[render]" << endl
<< "frameskip=0" << endl
<< "aspect=false" << endl
<< "scaler=normal2x" << endl
<< endl
<< "[cpu]" << endl
<< "core=auto" << endl
<< "cputype=auto" << endl
<< "cycles=auto" << endl
<< "cycleup=10" << endl
<< "cycledown=20" << endl
<< endl
<< "[mixer]" << endl
<< "nosound=false" << endl
<< "rate=44100" << endl
<< "blocksize=1024" << endl
<< "prebuffer=20" << endl
<< endl
<< "[midi]" << endl
<< "mpu401=intelligent" << endl
<< "mididevice=default" << endl
<< "midiconfig=" << endl
<< endl
<< "[sblaster]" << endl
<< "sbtype=sb16" << endl
<< "sbbase=220" << endl
<< "irq=7" << endl
<< "dma=1" << endl
<< "hdma=5" << endl
<< "sbmixer=true" << endl
<< "oplmode=auto" << endl
<< "oplemu=default" << endl
<< "oplrate=44100" << endl
<< endl
<< "[gus]" << endl
<< "gus=false" << endl
<< "gusrate=44100" << endl
<< "gusbase=240" << endl
<< "gusirq=5" << endl
<< "gusdma=3" << endl
<< "ultradir=C:\\ULTRASND" << endl
<< endl
<< "[speaker]" << endl
<< "pcspeaker=true" << endl
<< "pcrate=44100" << endl
<< "tandy=auto" << endl
<< "tandyrate=44100" << endl
<< "disney=true" << endl
<< endl
<< "[joystick]" << endl
<< "joysticktype=auto" << endl
<< "timed=true" << endl
<< "autofire=false" << endl
<< "swap34=false" << endl
<< "buttonwrap=false" << endl
<< endl
<< "[serial]" << endl
<< "serial1=dummy" << endl
<< "serial2=dummy" << endl
<< "serial3=disabled" << endl
<< "serial4=disabled" << endl
<< endl
<< "[dos]" << endl
<< "xms=true" << endl
<< "ems=true" << endl
<< "umb=true" << endl
<< "keyboardlayout=auto" << endl
<< endl
<< "[ipx]" << endl
<< "ipx=false" << endl
<< endl
<< "[autoexec]" << endl
<< "mount d: " << path << "\\binary\\" << endl
<< "d:" << endl
<< "cls" << endl
<< nazwa << endl;
return true;
}
bool zaladuj_dosbox_bat(fstream & plik, string path, string dosbox_file)
{
plik << "@\"" << dosbox_file << "\" -conf \"" << path <<"dosbox.conf\"";
return true;
}
bool zaladuj_kompiluj_bat( fstream & plik, string path, string nazwa, string nasm_path )
{
//nasm -o naszplik.com -f bin naszplik.asm
if( !plik || !plik.is_open() ) return false;
plik << "@echo off" << endl
<< "@echo nasm -o " << path.substr( 0, 3 ) << "...\\" << nazwa << "\\binary\\" << nazwa << ".com -f bin " << path.substr( 0, 3 ) << "...\\" << nazwa << "\\" << nazwa << ".asm" << endl
<< "@echo." << endl
<< "@mkdir binary" << endl
<< "@set path=" << nasm_path << ";" << endl
<< "@nasm -o " << path << "binary\\"<< nazwa << ".com -f bin " << path << nazwa << ".asm" << endl
<< "@echo." << endl
<< "pause";
return true;
}
bool zaladuj_asm( fstream & plik )
{
if( !plik || !plik.is_open() ) return false;
plik << ";To jest komentarz" << endl
<< "; tu można wstawić:"
<< "; section .text" << endl
<< "; aby dać znać NASMowi, że to będzie w sekcji kodu." << endl
<< "section .text" << endl
<< endl
<< "org 100h" << endl
<< "start:" << endl
<< " mov ah, 9" << endl
<< " mov dx, label " << endl
<< " int 21h" << endl
<< endl
<< " mov ah, 0" << endl
<< " int 16h" << endl
<< endl
<< " mov ax, 4C00h" << endl
<< " int 21h" << endl
<< endl
<< "label db \"Pierwszy program w asemblerze.$\"" << endl
<< endl
<< endl
<< ";nasm -o naszplik.com -f bin naszplik.asm";
return true;
}
int main(int argc, char** argv, char** env)
{
fstream f_conf;
string f_conf_path = instance_path() + f_conf_name;
string library_path, nasm_path, dosbox_file;
NASM_DEFAULT_PATH = nasm_pth(env);
nasm_path = NASM_DEFAULT_PATH;
if( access( f_conf_path.c_str(), F_OK ) == 0 ) //jesli jest plik konfiguracyjny w folderze aplikacji
{
cout << "Znaleziono plik konfiguracyjny.\n\n";
f_conf.open( f_conf_name.c_str(), ios::in );
if( !f_conf ) { cout << "Nie udalo sie otworzyc pliku konfiguracyjnego.\n"; getchar(); return - 1; }
}
else //jesli nie znaleziono pliku
{
cout << "Tworzenie pliku konfiguracyjnego...\n";
reset_conf( f_conf );
if( !f_conf ) { cout << "Nie udalo sie utworzyc pliku konfiguracyjnego.\n"; getchar(); return - 1; }
cout << "Utworzono!\n\n";
}
//w tym momencie, ZAWSZE plik f_conf jest otwarty w trybie READ_ONLY.
getline( f_conf, library_path ); //odczytaj sciezke do biblioteki z pliku config.txt
getline( f_conf, nasm_path ); //odczytaj sciezke do katalogu z nasmem
getline( f_conf, dosbox_file ); //odczytaj sciezke do pliku dosboxa
cout << "Odczytano z pliku conf.txt: " << endl
<< "Katalog z biblioteka:\n" << library_path << endl
<< "Katalog z nasmem:\n" << nasm_path << endl
<< "Sciezka do DOSBox.exe:\n" << dosbox_file << endl;
f_conf.close();
//dodaj ukosnik na koncu library_path
if( library_path[ library_path.length() - 1 ] != '\\' )
{
library_path += "\\";
}
int przebieg = 0;
while( access( library_path.c_str(), F_OK ) == - 1 )
{
// tutaj stworz taki folder jaki jest podany w pliku, ewentualnie wykaz bledy
if( przebieg == 0 ) {
cout << "\nNie znaleziono biblioteki programow.\n";
cout << "Podana sciezka znajduje sie na dysku: " << existing_path( library_path ) << endl;
cout << "Brakuje zatem " << missing_path( library_path ) << endl << endl;
}
string current = existing_path( library_path ) + missing_path( library_path ).substr( 0, missing_path( library_path ).find_first_of( "\\", 1 ) );
cout << "Dodawanie folderu " << missing_path( library_path ).substr( 0, missing_path( library_path ).find_first_of( "\\", 1 ) ) << "...\n";
if( !CreateDirectory( current.c_str(), NULL ) ) { cout << "BLAD PRZY TWORZENIU FOLDEROW!!! sprawdz pierwsza linijke pliku config.txt"; getchar(); return -1; }
cout << "Dodano " << existing_path( library_path ) << endl;
przebieg++;
}
cout << "\nZnaleziono " << existing_path( library_path ) << endl;
if(access( nasm_path.c_str(), F_OK ) == 0) cout << "Znaleziono " << nasm_path << endl;
else { cout << "Nie znaleziono nasma! Otworz conf.txt i popraw druga linijke." << endl; getchar(); return -2; }
if(access( dosbox_file.c_str(), F_OK ) == 0) cout << "Znaleziono " << dosbox_file << endl << endl;
else { cout << "Nie znaleziono dosboxa! Otworz conf.txt i popraw trzecia linijke." << endl; getchar(); return -2; }
string polecenie;
cout << "Wpisz \"!reset\" zeby zresetowac plik konfiguracyjny.\n";
cout << "Utworz projekt o nazwie: ";
cin >> polecenie;
cin.ignore();
if( polecenie == "!reset" )
{
if( !reset_conf( f_conf ) ) { cout << "Blad przy resecie.\n"; getchar(); return - 1; }
cout << "Zrestartuj program.";
getchar();
return 0;
}
string project_path = library_path + polecenie + "\\";
if( !CreateDirectory( project_path.c_str(), NULL ) ) { cout << "BLAD PRZY TWORZENIU FOLDERU PROJEKTU!!!"; getchar(); return - 1; } //stworz folder projektu
string asm_full_path = project_path + polecenie + ".asm";
string bat_full_path = project_path + "kompiluj.bat";
string dosbox_conf_full_path = project_path + "dosbox.conf";
string dosbox_bat_full_path = project_path + "odpalamy.bat";
fstream f_asm( asm_full_path.c_str(), ios::out );
if( !f_asm || !f_asm.is_open() ) { cout << "NIE MOZNA UTWORZYC PLIKU"; getchar(); return - 1; }
fstream f_kompiluj_bat( bat_full_path.c_str(), ios::out );
if( !f_kompiluj_bat || !f_kompiluj_bat.is_open() ) { cout << "NIE MOZNA UTWORZYC PLIKU"; getchar(); return - 1; }
fstream f_dosbox_conf( dosbox_conf_full_path.c_str(), ios::out );
if( !f_dosbox_conf || !f_dosbox_conf.is_open() ) { cout << "NIE MOZNA UTWORZYC PLIKU"; getchar(); return - 1; }
fstream f_dosbox_bat( dosbox_bat_full_path.c_str(), ios::out );
if( !f_dosbox_bat || !f_dosbox_bat.is_open() ) { cout << "NIE MOZNA UTWORZYC PLIKU"; getchar(); return - 1; }
zaladuj_kompiluj_bat( f_kompiluj_bat, project_path, polecenie, nasm_path );
zaladuj_asm( f_asm );
zaladuj_dosbox_conf( f_dosbox_conf, project_path, polecenie );
zaladuj_dosbox_bat(f_dosbox_bat, project_path, dosbox_file);
f_kompiluj_bat.close();
f_asm.close();
f_dosbox_conf.close();
f_dosbox_bat.close();
string polecenie_otwarcia_folderu = "explorer " + project_path;
system( polecenie_otwarcia_folderu.c_str() );
cout << "Utworzono! Wcisnij klawisz by zakonczyc...";
getchar();
return 0;
}
|
Post został pochwalony 0 razy
Ostatnio zmieniony przez mostrom dnia Śro 0:44, 30 Paź 2013, w całości zmieniany 3 razy
|
|
Pią 20:55, 18 Paź 2013 |
|
 |
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
|
|