Forum: PC-Programmierung Array mit Poke füllen geht nicht.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter B. (funkheld)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo, guten Tag.

Warum kann man bitte das Array nicht mit Poke füllen im PDS ?
Es werden zur Kontrolle nur "0" ausgegeben.
1
rem $dynamic 
2
DIM array%(1000)
3
4
FOR x% = 0 TO 999
5
  array%(x%) = 0
6
NEXT
7
8
segia%=varseg(array%(0))
9
ofsia%=varptr(array%(0))
10
11
def seg=segia%
12
for z%=0 to 50
13
  poke ofsia%+z%,z%
14
next
15
def seg
16
17
for a%=0 to 50
18
  print array%(a%)
19
next

Danke.

von PIClig (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vermutlich fehlt dem poke die Segmentadresse.
Und nun stochert es im Trueben.

von Systemgewinner (Gast)


Bewertung
4 lesenswert
nicht lesenswert
was ist das denn für eine beschissene programmiersprache.

von Wegstaben V. (wegstabenverbuchsler)


Bewertung
-1 lesenswert
nicht lesenswert
"poke" (und sein Bruder "peek") ist ein noch üblerer Befehl als "goto" 
und sollte mit mindestens einmal auf die Hand schlagen bestraft werden.

von Codo (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
Systemgewinner schrieb:
> was ist das denn für eine beschissene programmiersprache.

Also erstens wird eine Frage mit einem Fragezeichen beendet und nicht 
mit einem Punkt.
Zweitens die Frage, wie du auf "beschissen" kommst.
Und drittens ist es von Vorteil, wenn man lesen kann.
Die Antwort lautet: "PDS Basic"

Beitrag #6237817 wurde von einem Moderator gelöscht.
von Michael M. (Firma: DO7TLA) (do7tla)


Bewertung
1 lesenswert
nicht lesenswert
Wegstaben V. schrieb:
> "poke" (und sein Bruder "peek") ist ein noch üblerer Befehl als
> "goto"
> und sollte mit mindestens einmal auf die Hand schlagen bestraft werden.

Erinnert stark an Commodore C64 Basic.

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Wegstaben V. schrieb:
> "poke" (und sein Bruder "peek") ist ein noch üblerer Befehl als "goto"
> und sollte mit mindestens einmal auf die Hand schlagen bestraft werden.

jeder nutzt zu jeder Zeit das Werkzeug welches er besitzt!
Peek & Poke sind nicht verwerflicher als BEGINN & END oder TAB 
Einrückungen.

Auch mit Peek & Poke konnte man tolle ASM Programme schreiben!
Beim CBM, beim PC1500 uvam.

von 2⁵ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter B. schrieb:
> for z%=0 to 50
>   poke ofsia%+z%,z%
> next

POKE schreibt Bytes, dein Array sind WORDs. Probiere mal:

poke ofsia%+z%*2,z%

von Zeno (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Joachim B. schrieb:
> verwerflicher als BEGINN & END

Was sollte denn an BEGIN (nur ein N) und END denn verwerflich sein? 
Erschließt sich mir nicht wirklich? - Jetzt hab ich's ist für dieses 
Forum die falsche Programmiersprache.

von PIClig (Gast)


Bewertung
2 lesenswert
nicht lesenswert
> BEGIN & END

sind viel zu ausschweifend. Wo doch schon { und } voellig reichen.
Im uebrigen scheint der TO
1
def seg=segia%
2
for z%=0 to 50
3
  poke ofsia%+z%,z%
4
next
5
def seg

nur zu definieren. Aber nicht aufzurufen.
Aber das mag taeuschen. Soll er gefaelligst selber ins Manual scheun.

von Codo (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
PIClig schrieb:
>> BEGIN & END
>
> sind viel zu ausschweifend. Wo doch schon { und } voellig reichen.

Glückwunsch! Du hast die Neuigkeit herausgefunden, dass es Unterschiede 
zwischen verschiedenen Programmiersprachen gibt.

von Blub B. (googoo)


Bewertung
1 lesenswert
nicht lesenswert
PIClig schrieb:
> Im uebrigen scheint der TO
>
> nur zu definieren. Aber nicht aufzurufen.
> Aber das mag taeuschen.

Das täuscht.
Def Seg legt das Segmentregister für die folgenden peek/poke fest. So 
alter 16bit-Krams ist das

von c-hater (Gast)


Bewertung
3 lesenswert
nicht lesenswert
Joachim B. schrieb:

> Auch mit Peek & Poke konnte man tolle ASM Programme schreiben!

Nicht wirklich.

Man konnte allenfalls Poke benutzen, um ein paar Stücke Maschinencode in 
den Speicher zu befördern. Aber Assemblerprogrammierung ist eigentlich 
was anderes...

von Karl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Zeno schrieb:
> Jetzt hab ich's ist für dieses Forum die falsche Programmiersprache.

Jetzt hast du es erfasst.

von Peter B. (funkheld)


Bewertung
-5 lesenswert
nicht lesenswert
Ich bin hier auch falsch.

Wusste nicht das hier die Elite dazwischen Schreibt bei meinem 
DOS-Programm , die das Programm für den VW-Diesel entwickelt hat. Wenn 
ihr POKE/PEEK und GOTO genommen hättet , dann wäre es aufgefallen das 
hinten falsche Werte raus kommen.

Na,dann...

von georg (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Peter B. schrieb:
> Wenn
> ihr POKE/PEEK und GOTO genommen hättet

Dann wäre der Dieselbetrug bis heute verborgen geblieben, weil bei den 
Prüfbehörden niemand mehr weiss was das überhaupt ist.

Georg

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kannst du in ein einzelnen Integer mit poke schreiben?

von 2⁵ (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Peter B. schrieb:
> Ich bin hier auch falsch.

Hm... hast du das überhaupt mal probiert?

2⁵ schrieb:
> poke ofsia% + z% *2, z%

von Peter B. (funkheld)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo, guten Tag.

Das funktioniert :
-----------------------
a%=123
segia%=varseg(a%)
ofsia%=varptr(a%)

def seg= segia%
print peek(ofsia%+0)
def seg
-----------------------

Das funktioniert auch nicht mit dem Array.
Das Array muss wohl eine andere Lage haben,
wo jetzt Segment und Offset nicht alleine ausreicht.
-----------------------
> poke ofsia% + z% *2, z%
------------------------

von TR.0LL (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter B. schrieb:
>
1
> rem $dynamic
2
[...]
3
> for a%=0 to 50
4
>   print array%(a%)
5
> next
6
>


Weleche Sprache ist das?

von Falstaff (Gast)


Bewertung
0 lesenswert
nicht lesenswert
TR.0LL schrieb:
> Weleche Sprache ist das?

PDS-Basic

Peter B. schrieb:
> mit Poke füllen im PDS

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter B. schrieb:
> a%=123
> segia%=varseg(a%)
> ofsia%=varptr(a%)
>
> def seg= segia%
> print peek(ofsia%+0)
> def seg

Jetzt mach mal daraus ein Array mit genau einem Eintrag

Und so nebenbei: nutzt doch bitte die as int,long etc. Schreibweise 
diese % s postfixes sind nicht wirklich sprechend

von Peter B. (funkheld)


Bewertung
0 lesenswert
nicht lesenswert
Danke.
Dieses funktioniert:
1
rem $dynamic
2
dim arraya(32000) as Integer
3
dim arrayb(32000) as Integer
4
5
dim segia as integer
6
dim ofsia as integer
7
8
dim segib as integer
9
dim ofsib as integer
10
11
segia=varseg(arraya(0))
12
ofsia=varptr(arraya(0))
13
14
segib=varseg(arrayb(0))
15
ofsib=varptr(arrayb(0))
16
17
arraya(30000)=105
18
arrayb(31000)=207
19
20
def seg= segia
21
print peek(ofsia+30000*2)
22
def seg
23
24
def seg= segib
25
print peek(ofsib+31000*2)
26
def seg

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter B. schrieb:
> Dieses funktioniert:

D.h. dein print zeigt 105 und 207?

Dann muss poke so auch funktioniere, also gleicher offset,segment nur 
eben poke

Was mir noch nicht klar ist: du meintest PDS basic kann keine bytes, 
schreibt poke dann auch nur integer oder doch nur bytes, dann musst du 
ein int > 255 mit zwei pokes schreiben

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Du solltest mind Feldwerte 64 und 344 testen sonst merkst du es nicht 
wenn dein schreiben nur mit bytes funktionier (dein 105 und 207 sind bei 
in einem byte abbildbar)

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von blub (Gast)


Bewertung
0 lesenswert
nicht lesenswert
poke x+(2*y)+1, z / 256
poke x+(2*y), z mod 256
so sollte es eigentlich gehen

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
blub schrieb:
> poke x+(2*y)+1, z / 256
> poke x+(2*y), z mod 256

x = array offset aus varptr
y = array index

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
cppbert schrieb:
> blub schrieb:
>> poke x+(2*y)+1, z / 256
>> poke x+(2*y), z mod 256
>
> x = array offset aus varptr
> y = array index

Und z = integer wert

von Peter B. (funkheld)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die Info.
Poke und Peek geht nur Byte.
Darum habe ich auch nach einem Pokeword/Peekword gesucht und dieses 
funktioniert in PDS :
1
.Model Medium, Basic
2
.Code
3
4
public PeekWord 
5
PeekWord Proc Uses ES, SegAddr:DWord
6
  Les  BX,SegAddr     ;load the segment and address
7
  Mov  AX,ES:[BX]     ;read the word into AX
8
  Ret                 ;return to BASIC
9
PeekWord Endp
10
11
public PokeWord 
12
PokeWord Proc Uses ES, SegAddr:DWord, Value:Word
13
  Les  BX,SegAddr     ;load the segment and address
14
  Mov  AX,Value       ;and the new value to store there
15
  Mov  ES:[BX],AX     ;write the value into memory
16
  Ret                 ;return to BASIC
17
  
18
PokeWord Endp
19
End

: Bearbeitet durch User
von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
geht auch in pure Basic mit
>> poke x+(2*y)+1, z / 256
>> poke x+(2*y), z mod 256

Jetzt mal wieder die grosse Frage:
Woran hat es denn gelegen wenn jetzt alles geht?

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Peter B. schrieb:
> Warum kann man bitte das Array nicht mit Poke füllen im PDS ?

Warum sollte man das überhaupt?
Es ist doch viel bequemer, schneller und sicherer, einfach über den 
Index auf das Array zuzugreifen.
Peek und Poke nimmt man nur dann als Krücke, wenn der Speicher einem 
nicht gehört, z.B. dem OS.

von Peter B. (funkheld)


Bewertung
0 lesenswert
nicht lesenswert
Dieses habe ich:
DIM array%(32000)

umgewandelt in:
DIM array(32000) as integer

Danke.

1
rem $dynamic 
2
DIM array(32000) as integer
3
4
FOR x% = 0 TO 999
5
  array(x%) = 0
6
NEXT
7
8
segia%=varseg(array(0))
9
ofsia%=varptr(array(0))
10
11
def seg=segia%
12
for z%=0 to 50
13
  poke ofsia%+z%*2,z%
14
next
15
def seg
16
17
for a%=0 to 50
18
  print array(a%)
19
next

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.