Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jean
Anmeldungsdatum: 26.12.2004 Beiträge: 15 Wohnort: Schweiz
|
Verfasst am: 31.12.2004, 13:42 Titel: Speicheradressen |
|
|
Hallo
Kann mir jemand sagen wie ich einen Wert in eine Speicheradresse schreiben kann und wie man einen Wert von einer Speicheradresse lesen kann ?
Vielen Dank Jean |
|
Nach oben |
|
 |
Quark48

Anmeldungsdatum: 16.10.2004 Beiträge: 559 Wohnort: Saltendorf a.d. Naab bzw. Teublitz i.d. Oberpfalz / Bayern
|
Verfasst am: 31.12.2004, 14:38 Titel: |
|
|
Hallo!
Q(uick)Basic arbeitet im Real-Mode. In diesem Modus kann man insgesamt 1 MB Arbeitsspeicher adressieren, ein Programm darf höchstens 640 KB groß sein! Der Speicher ist im Real-Modus in Segmente (Von &H0000 bis &HFFFF) und Offsets (von &H0000 bis &HFFFF) aufgeteilt. Hier ein Beispiel, wie man im Segment &HFF das Offset &H1234 unter QBasic auslesen kann:
Code: |
DEF SEG = &HFF
PRINT PEEK(&H1234)
DEF SEG ' Damit man wieder woanders weitermachen kann, muss nicht unbedingt dastehen...
|
Man kann auch in die gleiche Speicherstelle schreiben:
Code: |
DEF SEG = &HFF
POKE &H1234, 1 ' Schreibt an die Speicherstelle 00FF:1234 den Wert 1.
DEF SEG ' Wie oben ;)
|
Falls du dich fragst, warum ich immer &H vor Zahlen hinschreibe:
Diese Zahlen sind H e x a d e z i m a l.
Noch etwas wichtiges: Man kann mit PEEK und POKE 16-Bit-Zahlen (also Integer, von 1 bis &HFFFF) in den Speicher schreiben/lesen.
Und wichtig!!! Man kann damit auch viel kaputtmachen, also VORSICHT!!!
Gruß, Quark48 _________________ Grüßle, Stefan
***
Wenn ein Programm auf nem alten Rechner gut läuft, dann läuft´s auf nem neuen erst recht!
Ich habe/hatte keine feste Spange und auch keine Schwester. Der Rest stimmt. Es tut mir leid... :-/ |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 07.01.2005, 16:49 Titel: |
|
|
Ach, ja, PEEK und POKE....
Damit hat wohl jeder Anfänger so seine Probleme, und ich merke grade, dass ich selber nicht länger als etwa ein halbes jahr mit den beiden arbeite....
naja.
Eines sei dir auf jeden Fall gesagt:
PEEK und POKE lassen sich nicht nur für direkte manipulation von Variablen benutzen; den viel größeren Nutzen ziehst du daraus, wenn du schon ein paar Adressen kennst:
Seg A000h:
Video-Ram. Den zu bearbeiten ist allerdings oft ziemlich tricky, weil du nur ganze Bytes setzen kannst, so dass sich dieses Wissen erst im SCREEN 13 auszahlt. Hier nämlich ist die Farbinformation pro Pixen genau 1 Byte - ideal *g*
Das OFFSET errechnet sich übrigens aus:
x + y * 320, bzw * Screenwidth, etwa 640 für SCREEN 12.
Seg B800h:
Auch Video-Ram, allerdings für die Text-Modi.
Hiermit kannst du dir einen kleinen ersatz für PRINT zusammenbasteln.
Dabei setzt du für jedes Zeichen ein WORD:
(Spalte + Zeile * 80) * 2 => ASCII- Code
(Spalte + Zeile * 80) * 2 +1 => Farbwert. Dabei kannst du selbstverständlich die Hintergrundfarbe gleich mitbestimmen. Sie ist dann in den oberen 4 Bits gespeichert. Achtung: Wennd du das Bit 7 setzt, wird der Text Blinkend dargestellt! (Außer du schaltest auf Intensitat um, was mit einem INTERRUPT geht *g*)
Seg 0040h:
BIOS-Segment!
Hier kannst du ne ganze Menge einstellen!
Was das alles ist, liest du am besten auf www.qbasic.de nach, in den Monster FAQ.
viel Spaß! |
|
Nach oben |
|
 |
Jean
Anmeldungsdatum: 26.12.2004 Beiträge: 15 Wohnort: Schweiz
|
Verfasst am: 07.01.2005, 17:08 Titel: |
|
|
Vielen Dank Genau das wollte ich wissen  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 07.01.2005, 19:12 Titel: |
|
|
Dusky_Joe hat Folgendes geschrieben: | Ach, ja, PEEK und POKE....
Damit hat wohl jeder Anfänger so seine Probleme(...) |
Also ich hatte damit nie Probleme.
ich habs auch nie wirklich benutzt Habs ned gebraucht und da wo ichs mal mit Hilfe versucht hab hats nix gebrach. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 07.01.2005, 21:37 Titel: |
|
|
Auf dem legendären Commodore 64 gab es seinerzeit im dortigen ROM-BASIC noch überhaupt keine High Level-Befehle speziell in Sachen Grafik und Sound - da musste man sämtliche Chips direkt mit PEEK() und POKE ansteuern.
Findige Köpfe schrieben damals BASIC-Erweiterungen, in dem sie beispielsweise die "SYNTAX ERROR"-Routine auf einen eigenen Handler umleiteten, welcher Dinge wie LINE und CIRCLE auswerten konnte. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 09.01.2005, 22:27 Titel: |
|
|
Tja, wenn ich PEEK und POKE ned gebraucht hätte, hätt ich wohl auch nie probleme gehabt.
Das erste mal bin ich auf den befehl gestoßen, wo ich von irgendjemanden ein Grafik-demo runtergeladen hab. Aber mit der QB-Hilfe kann man wohl kaum wirklich was anfangen. Schreckliches Fachchinesisch.
Woher soll man denn wissen, was ein Segment und was ein Offset ist, und ab wo der Video-Ram beginnt...
Bin froh, dass ich mich da jetzt einigermaßen auskenne.
Inzwischen käm ich wohl gar nicht mehr ohne direkten speicherzugriff aus!
Man denke bloß mal an SVGA!
Etwas, mit dem ich erst vor ein paar Tagen angefangen habe....
Naja, jedem das seine *g*
Ciao |
|
Nach oben |
|
 |
|