TPC 6.1 macht 2 Array mit 64000 Byte

OP #6153510
Lesenswert?

Hallo, guten Tag.

Wie macht das Borland Pascal 6.1 , das es 2 Array mit 64000Byte 
verkraftet?
Wo ich mich als Anfänger bei dem TC 3.0   so gequält habe?

Danke.
GRuss

----------------------------------------
Ein Auszug:
Virtual = Array [1..64000] of byte;
VirtPtr = ^Virtual;
.....
.....
VAR Virscr : VirtPtr;  { Our first Virtual screen }
VirScr2 :    VirtPtr;  { Our second Virtual screen }
-------------------------------------
Gast #6153585
Lesenswert?

Peter B. schrieb:
> ----------------------------------------
> Ein Auszug:
> Virtual = Array [1..64000] of byte;
> VirtPtr = ^Virtual;
> .....
> .....
> VAR Virscr : VirtPtr;  { Our first Virtual screen }
> VirScr2 :    VirtPtr;  { Our second Virtual screen }
> -------------------------------------

Das ist nur ein Array - wo siehst du zwei?
#6153680
Lesenswert?

Peter B. schrieb:
> ------------------------------------------
> Das ist nur ein Array - wo siehst du zwei?
> ------------------------------------------
>
> Es werden 2 64kb Bilder abgelegt zum umschalten im Programm .
Da irrst du dich aber. Zumindest dein Codefragment definiert nur ein 
array
Zusätzlich gibt's zwei Pointer auf eben dieses array.

Nochmal da du das offensichtlich noch nicht kapiert hast. Du kannst bei 
16 Bit Compilern max 64k an globalen Daten nutzen wenn du mehr brauchst 
musst du malloc benutzen um Speicher vom Heap anzufordern. Auch dann 
gilt mehr oder weniger die 64k Grenze dann aber pro Anforderung.
Gast #6153687
Lesenswert?

Thomas Z. schrieb:
> Peter B. schrieb:
>> ------------------------------------------
>> Das ist nur ein Array - wo siehst du zwei?
>> ------------------------------------------
>>
>> Es werden 2 64kb Bilder abgelegt zum umschalten im Programm .
> Da irrst du dich aber. Zumindest dein Codefragment definiert nur ein
> array
> Zusätzlich gibt's zwei Pointer auf eben dieses array.
>
> Nochmal da du das offensichtlich noch nicht kapiert hast. Du kannst bei
> 16 Bit Compilern max 64k an globalen Daten nutzen wenn du mehr brauchst
> musst du malloc benutzen um Speicher vom Heap anzufordern. Auch dann
> gilt mehr oder weniger die 64k Grenze dann aber pro Anforderung.

das stimmt nicht - wenn er mehrere Datensegmente hat kann er auch ohne 
malloc solche Arrays haben

@Peter: Das mit den Speichermodels haben wir hier schon mehrfach 
gepostet - es ist blöd wenn du dann darauf nicht reagierst und 1 Woche 
später Fragen stellst die dadurch schon beantwortet wurden

Tiny, Small, Compact, Huge, Large

Bei Compact geht z.B. ein Codesegment (also nicht mehr als 64k Code, 
aber n Datensegmente)
Gast #6153748
Lesenswert?

Thomas Z. schrieb:
> cppbert schrieb:
>> das stimmt nicht - wenn er mehrere Datensegmente hat kann er auch ohne
>> malloc solche Arrays haben
>
> Kannst du dafür ein Beispiel posten?

Hab gerade keines zur Hand aber frag dich einfach warum eine Exe mehrere 
Datensegmente haben kann, was ist der Sinn n 64K segmente zu haben wenn 
man die nicht nutze kann, ausserdem ist ein far pointer ob von malloc 
oder aus dem exe image ein far pointer da gibt es keinen Unterschied
OP #6153789
Lesenswert?

Ich setze mal das Programm vom TPC 6.1 hier rein und daraus diese 2 
angeblichen 64000Byte Speicher die ich oben schon gemeldet hatte.

Hier dieses bringt mich durcheinander:
-------------------------------
Procedure SetUpVirtual;
BEGIN
  GetMem (VirScr,64000);
  vaddr := seg (virscr^);
  GetMem (VirScr2,64000);
  vaddr2 := seg (virscr2^);
END;
----------------------------
Angehängte Dateien:
Gast #6153813
Lesenswert?

Peter B. schrieb:
> Sind also hier jetzt 2 Segmente mit je 64kb?
>
> vaddr := seg (virscr^);
>
> Und die vaddr enthält die Segmentadresse?
>
> Danke.

Könnte so sein, habe keine Ahnung wie der pascal
kompiler das genau macht er verbirgt aber definitiv mehr von den details 
als der c compiler
Gast #6153816
Lesenswert?

cppbert schrieb:
> Peter B. schrieb:
>> Sind also hier jetzt 2 Segmente mit je 64kb?
>>
>> vaddr := seg (virscr^);
>>
>> Und die vaddr enthält die Segmentadresse?
>>
>> Danke.
>
> Könnte so sein, habe keine Ahnung wie der pascal
> kompiler das genau macht er verbirgt aber definitiv mehr von den details
> als der c compiler

Technisch muessen es mind. zwei segmente darunter sein - und ja die 
segment adresse  steht dann da drin
Gast #6153886
Lesenswert?

Peter B. schrieb:
> Ich meine jedes kleine Array kann man mit Getmem dann ein eigenen
> Segment zuweisen wie bei C mit malloc.

Es wird keinem array ein segment zu gewiese, ein speicherbereich wird im 
heap manager reserviert, unter dos ist dieser reservierte bereich immer 
auf einer segmentadresse und diesen speicherbereich nutzt du dann mit 
array syntax/semantik, ob das per malloc, getmem oder fix in deinem 
programm allokiert ist ist voellig egal

> Nur das funktioniert hier bei TPC nicht:
> vaddr[10]:=65; bei C funktioniert es .

Pascal syntax lernen?
Gast #6153901
Lesenswert?

Peter B. schrieb:
> Weil es hier heraus entstanden ist meine ich :
>
> Virtual = Array [1..64000] of byte;
> VirtPtr = ^Virtual;
> VAR Virscr : VirtPtr;
>
> GetMem (VirScr,64000);
> vaddr := seg (virscr^);
>
> vaddr[10]:=65; ?

In c wendest du doch nicht MK_SEG auf den malloc pointer an und 
versuchst den dann mit [] darauf zu zugreifen - schaur dir deinen code 
an
#6153917
Lesenswert?

Pascal ist nicht C, C ist nicht Pascal.

Pascal ist ein Lehrsprache. Damit sollen Konzepte der Programmierung und 
auch programmieren beigebracht werden.

C ist von Profis (für sich selber), die wissen was sie tun.
Die wollten sich die Arbeit leichter machen.

C ist zwar einfach aufgebaut, hat aber genug Fallstricke, die beim 8086 
nochmal verschärft sind.

Pascal versteckt einiges vor dem Programmierer.
Die Programme sind meist sicherer, weil man nicht so viel Mist machen 
kann.
(Ein C-Compiler gibt da „nur“ Warnungen aus)
#6153945
Lesenswert?

nimms mir nicht übel aber vieleich soltest du mal mit was einfachem 
anfangen. Eine Einführung in C oder auch Pascal startet sicher nicht mit 
der Grafikprogrammierung und schon garnicht mit dem Schreiben in den 
Bildschirmspeicher. das ist fortgeschrittenes Wissen und heute sowas von 
obsolet.
OP #6154048
Lesenswert?

------------
obsolet.
------------

Man soll auch mal auf die kleinen Dinge achten die Vergangenheit waren.
Un das tue ich.  Ihr lebt manchmal am Leben vorbei und denkt nur an den 
Supergau und das macht euch Abhängig davon , ihr  könnt kleine Dinge 
nicht mehr erkennen. Gönnt euch die mal , es bringt große Freude.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren