Array mit Poke füllen geht nicht.

OP #6237766
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.
Beitrag #6237817 wurde von einem Moderator gelöscht.
#6237824
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.
Gast #6237983
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.
OP #6238168
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...
OP #6239714
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%
------------------------
Gast #6239747
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
OP #6239928
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
Gast #6239954
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
Gast #6239995
Lesenswert?

OP #6240622
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
OP #6240861
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

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