[asm + TP] Zmiana czcionki w trybie tekstowym

Odpowiedz Nowy wątek
2007-08-08 12:07

Rejestracja: 14 lat temu

Ostatnio: 4 lata temu

0

Hmmm, umyślałem sobie, coby zmienić czcionkę w pełnoekranowym trybie tekstowym. W Pascalu kiedyś lata temu używałem kodu bazującego na tym, co jest w Pastebinie:

http://pastebin.4programmers.net/2880

Teraz siedzę w C++, raczej w GCC, niż w Borlandzie, więc nawet wstawki inaczej się pisze. No i siedzę w 32 bitowym trybie, a 16 bitowym DOSowym, więc adresowanie też inaczej wygląda i tego kodu powyżej tak ot nie mogę użyć, ani dostosować z moją wiedzą o asmie...

Czy ktoś znający Pascala albo asemblera napisałby mi to w jakiejś user-friendly postaci do wykorzystania w GCC, albo wyjaśnił:

  1. co to jest: Inline($FA); i Inline($FB);
  2. jak w asemblerze AT&T wysłać coś na port
  3. jak dobrać się do pamięci, która zawiera wygląd znaków, bo pod Win32 to raczej nie składa się adresu z segmentu 0xA000 i offsetu

I sobie jakoś to poukładam...
Aha, mam jeszcze jakąś wersję, co robi to samo używając przerwania 10H, jak ktoś woli. Nie zamieściłem, bo nie lubię przerwań (a licho wie dlaczego... ;) ).

Dopisane:
dlaczego to w C/C++ wsadziłem dając taką sygnaturę? Bo potrzebuję wyniku w C, a najszybciej pomogą ci, co znają Pascala i asm, żeby ten fragment przetłumaczyć/wytłumaczyć. W Delphi to byłoby jeszcze gorzej, do Newbie chyba nie, bo to stare jak świat zagadnienie, i tylko jacyś ludzie z większym stażem przy PC będą wiedzieć, o co kaman ;P

Pozostało 580 znaków

RR
2007-08-08 15:03
RR
0

Nie jestem ekspertem, ale z tego co ja się orientuję to tylko pod DOSem można korzystać z tych przerwań i wielu innych rzeczy. Normalnie pisząc aplikacje pod windows, nawet jeśli konsolowa, takie operacje system ci odrzuci i nie pozwoli ich wykonać. Pisałem kiedyś taką prostą gierkę pod DOS wykorzystującą przerywania, ale nie było tam żadnych wstawek, bo ich unikałem. Niestety z przeniesieniem na kompilator borlanda nie było łatwo, przerobiłem wszystko co było związane z przerywaniami itd. Na dev-c++ nie próbowałem, ale problem pewnie będzie ten sam.

Dostęp do portów normalnie masz mocno ograniczony wewnątrz twojej aplikacji i od tak sobie z nich również nie możesz skorzystać, bo system nie pozwoli.

Pod DOS i 32 bitowym adresowaniu dostęp do ekranu był prosty z tego co pamiętam, ale za nic w świecie nie pamiętam jak to się robiło :/. Zazwyczaj korzystałem z graficznego ekranu, ale w starych programach znalazłem komendę np.
[code]
_dosmemgetw(0xb8000,80*23,tup);
[/code]
co świadczy o prostocie posługiwania się ekranem. Porty i przerywnia też były proste np.
[code]
REGS fa;
fa.x.ax=0x6a00;
fa.x.bx=0x0;
fa.x.cx=0x0;
fa.d.edx=0xffff;
fa.d.edi=(unsigned int)(bufor.p);
int386(0x10,&fa,&fa);
outportb(0x60,0xf3);
outportb(0x60,31);
[/code]
i ten kod działa pod windowsem XP normalnie. Niestety jest pod DOS ale 32-bitowy. Jak widać brak jest ASM ze względu na nieprzyjazną jak dla mnie składnię :)

Nie będę mówił że na pewno, ale moim zdaniem pozostaje ci jedynie kompilator DJGPP pod DOS, lub pogodzenie się z faktem, że pod windows system wielu rzeczy ci zabroni :). Resztę, czyli tryb pełnoekranowy, zmiana kolorów, dostęp do ekranu można zrealizować przy pomocy WinAPI pewnie.

Pozostało 580 znaków

RR
2007-08-08 15:06
RR
0

ups, widzę że źle wpisałem [code]. Miało być ``

Pozostało 580 znaków

2007-08-08 16:35

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

jesli piszesz 32bitowa aplikacje, to podejrzewam, ze sie nameczysz, taki pomysl, czy nie lepiej byłoby zapakowac 16bitowy exec do zasobow i przy przechodzeniu do trybu pelnoekranowego odpalac go ?

kiedys tez sie tym bawiłem: http://carramba.ath.cx/flabra/my_old_dos_programms/tfd.zip
kompilator: http://carramba.ath.cx/flabra/my_old_dos_programms/tcpp.zip

// słow kilka o pierwszym, tekstowe wykorzystuja to, ze przy 8kolorowej palecie vga mogla zaladowac 2 256 znakowe zestawy czcionek, a czcionke wybieralo sie bitem jasnosci tekstu albo bitem migania. tak wiec jeden zestaw sluzyl do wypelniania ekranu tekstem, drugi pokazywal zmieniana czcionke. najlepiej uzyc vgatfd2.exe bo najwiecej moze, łącznie z tworzeniem binarki i nawet nie exe a com (nie mam juz tego zrodel, czas je zagubil), ale, w zwiazku z rozwiazaniem najlepiej konsole odpalic wczesniej na pelnym ekranie, jesli nie pojdzie pod xp... pojdzie pod win98 w dol (niestety :/)

drugi to po prostu jeden z kompilatorów c borlanda - zdaje sie wersja 1.0, zeby uzyc asma w nim potrzebujesz pewnie do katalogu bin wrzucic tasm.exe


Linuksa, czy innego Uniksa, można opisać za pomocą logiki boolowskiej a nie za pomocą prawdopodobieństwa.

'System szesnastkowy jest wspaniały! W skali od 1 do 10 daję mu E'

extreme safety for Ubuntu:
sudo echo -e 'Defaults targetpw\nDefaults timestamp_timeout=0' >> /etc/sudoers

Pozostało 580 znaków

2007-08-08 23:46

Rejestracja: 14 lat temu

Ostatnio: 4 lata temu

0

Dzięki, pomysł z odpaleniem zewnętrznego programu bardzo prosty, ale skuteczny - nie będę kombinował, tylko skorzystam.

Zwłaszcza, że programy niektóre bardzo przydatne są (a raczej będą, bo teraz to w pracy lepiej żebym robił co trzeba, a nie czas na pierdoły hobbystyczne zużywał ;)).

Dziękuję bardzo.

Dopisane: a czy tylko ja tak mam, że myśląc nad czymś, czasem omijam rozwiązania najprostsze?? :>

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0