daten vom compy-ram sichtbar machen im bereich $4000-$7fff

1, 2

daten vom compy-ram sichtbar machen im bereich $4000-$7fff

von robbifan » Do 23. Aug 2007, 14:22
hallo, ich habe unten ein programm, welches ein gemaltes bild in den 256kbyte-compy-speicher einlädt, bis der speicher voll ist (32x).

nun möchte ich nach dem einlesen die daten aus dem compy-ramspeicher wieder als bild sichtbar machen ohne den move-befehl.

die 16kbyte vom compy-speicher werden ja immer ab $4000 eingeblendet.

wenn ich die display-list-bildadresse auf diesen bereich lege, erscheint nicht das gemalte bild sondern sondern ein pixel-allerlei.
woran liegt das?

Code: Alles auswählen
100 GRAPHICS 7+16
110 COLOR 1:PLOT 5,5:DRAWTO 155,5:DRAWTO 155,75:DRAWTO 5,75:DRAWTO 5,5
120 COLOR 3:CIRCLE 80,40,35
130 PAINT 80,40:COLOR 1:PAINT 6,6:PAINT 100,6:COLOR 2:PAINT 0,0
200 RESTORE 1010
210 FOR I=1 TO 16
220   READ BANK
230   POKE 54017,BANK
240   Z=1:COLOR 2:TEXT 50,35,"BANK":TEXT 85,35,I:TEXT 105,35,Z:Z=Z+1
250   MOVE DPEEK(88),16384,7680
260   TEXT 105,35,Z
270   MOVE DPEEK(88),16384+$2000,7680
280 NEXT I
290 POKE 54017,254
300 RESTORE 1010
310 GRAPHICS 7+16
320 a=dpeek(560)
330 a=a+4
340 FOR I=1 TO 16
350   READ BANK
360   POKE 54017,BANK
370   dpoke a,$4000
380   GET KEY
390   dpoke a,$4000+$2000
400   GET KEY
410 NEXT I
420 POKE 54017,254
1000 REM BANKDATEN (COMPY-SHOP)
1010 DATA 238,234,230,226
1020 DATA 174,170,166,162
1030 DATA 110,106,102,98
1040 DATA 46,42,38,34

von robbifan » Do 23. Aug 2007, 15:26
hallo, ist evtl der speicheranfang vom turbo-basic im wege ?
wie kann ich den turbo-basicspeicher ab $8000 beginnen lassen?

aber warum kann der poke-befehl von compy-ram den bereich ab $4000 beim unteren programm benutzen ohne das turbo-basic zu stören?

mfg peter

von robbifan » Sa 25. Aug 2007, 09:48
weiss hier keiner weiter?

mfg

von cas » Sa 25. Aug 2007, 10:37
Hello,

Ist der ANTIC Zugriff auf die RAMDISK angeschaltet (BIT 5)? Ansonsten "sieht" nur die CPU den Speicher aus der RAMDISK in $4000-$7FFF, aber nicht der ANTIC Chip.

der erste Wert der Tabelle ist 238, binär 11101110
versuche es mail mit 11001110 = 206

Carsten

von robbifan » Sa 25. Aug 2007, 14:29
hallo, danke. habe jetzt mit deinem wert "206" angefangen :

Code: Alles auswählen
1000 REM BANKDATEN (COMPY-SHOP)
1010 DATA 206,202,198,192
1020 DATA 142,138,132,128
1030 DATA 78,74,68,62
1040 DATA 14,10,6,2


mit diesen werten kann ich jetzt die 256kbyte compy-ram sichtbar machen, also 32 bildschirmseiten darstellen. jetzt steht den experiementen hinsichtlich grafik/daten nichts mehr im wege....oder doch???

wie kann ich dem turbo-basic sagen , das es nun erst ab $8000 anfangen soll?

mfg peter

von robbifan » Sa 25. Aug 2007, 15:23
es hat geklappt , läuft aber nur im atari800win , weiss der teufel warum :
auf der sichbaren normalen seite wird gewartet, während der ersten compy-seite (wert 206) ab $4000 mit dem dpoke 88,$4000 der schreibzugriff zugewiesen wird und gezeichnet wird.
dazwischen habe ich mal eine warteschleife. dann wird auf die 1. compy-seite geschaltet zum anschauen , was da gezeichnet wurde und wieder eine kleine warteschleife.


Code: Alles auswählen
100 GRAPHICS 7+16
101 COLOR 1
102 CIRCLE 80,40,35
103 COLOR 2
104 TEXT 50,35,"IN ARBEIT"
110 A=DPEEK(560)+4
120 DPOKE 88,$4000
130 POKE 54017,206
140 COLOR 1:PLOT 5,5:DRAWTO 155,5:DRAWTO 155,75:DRAWTO 5,75:DRAWTO 5,5
150 COLOR 3:CIRCLE 80,40,35
160 PAINT 80,40:COLOR 1:PAINT 6,6:PAINT 100,6:COLOR 2:PAINT 0,0
170 FOR B=0 TO 3000:NEXT B
180 DPOKE A,$4000
190 FOR B=0 TO 3000:NEXT B
200 POKE 54017,254

von PacMan » So 26. Aug 2007, 11:40
Die Warteschleife kannst Du auch mit "PAUSE 300" machen. Bei LOMEM $80,$81 kann man die Startadresse für das Basic-Programm festlegen. Das wäre dann Poke 128,0 und Poke 129,128 für $8000. Ob das im TBasic funktioniert kann ich aber nicht sagen.

von cas » So 26. Aug 2007, 11:54
PacMan hat geschrieben:Die Warteschleife kannst Du auch mit "PAUSE 300" machen. Bei LOMEM $80,$81 kann man die Startadresse für das Basic-Programm festlegen. Das wäre dann Poke 128,0 und Poke 129,128 für $8000. Ob das im TBasic funktioniert kann ich aber nicht sagen.


Ich verstehe die Adresse andersherum: in LOMEM kann man nachschauen, welches die Startadresse des BASIC Programmes ist, die kann man aber nicht setzen.

Die höhere Startadresse muss man vor der Initialisierung des (Tutbo-) Basic setzen.

von robbifan » So 26. Aug 2007, 13:06
Die höhere Startadresse muss man vor der Initialisierung des (Tutbo-) Basic setzen.


aber wie....?

mfg peter

von cas » So 26. Aug 2007, 13:31
ich habe es selber nicht ausprobiert, aber man müsste MEMLO ($2e7/$2e8) nach dem laden des DOS und vor der Initialisierung des (Turbo-) Basic setzen.

Mapping the Atari sagt dazu:

743,744 2E7,2E8 MEMLO

Pointer to the bottom of free memory, initialized to 1792 ($700)
and updated by the presence of DOS or any other low-memory
application program. It is used by the OS; the BASIC pointer to
the bottom of free memory is at locations 128, 129 ($80, $81). The
value in MEMLO is never altered by the OS after powerup.

This is the address of the first free location in RAM available for
program use. Set after all FMS buffers have been allocated (see
locations 1801 and 1802; $709 and $70A). The address of the last
sector buffer is incremented by 128 (the buffer size in bytes) and
the value placed in MEMLO. The value updates on powerup or
when RESET is pressed. This value is passed back to locations
128, 129 ($80, $81) on the execution of the BASIC NEW
command, but not RUN, LOAD or RESET.

If you are reserving space for your own device driver(s) or
reserving buffer space, you load your routine into the address
specified by MEMLO, add the size of your routine to the MEMLO
value, and POKE the new value plus one back into MEMLO.

When you don't have DOS or any other application program
using low-memory resident, MEMLO points to 1792 ($700. With
DOS 2.0 present, MEMLO points to 7420 ($1CFC). If you change
the buffer defaults mentioned earlier, you will raise or lower this
latter value by 128 ($80) bytes for every buffer added or deleted,
respectively. When you boot up the 850 Interface with or without
disk, you add another 1728 ($6C0) bytes to the value in MEMLO.

You can alter MEMLO to protect an area of memory below your
program. This is an alternative to protecting an area above
RAMTOP (location 106; $6A) and avoids the problem of the
CLEAR SCREEN routine destroying data. However, unless you
have created a MEM.SAV file, the data will be wiped out when
you call DOS. To alter MEMLO, you start by POKEing WARMST
(location 8) with zero, then doing a JMP to the BASIC cartridge
entry point at 40960($A000) after defining your area to protect.
For example, try this:

10 DIM MEM$(24):PROTECT=700:REM NUMBE
R OF BYTES TO CHANGE
15 HIBYTE=INT(PROTECT/256):LOBYTE=PRO
TECT-256*HIBYTE
20 FOR N=1 TO 24:READ PRG:MEM$(N)=CHR
$(PRG):NEXT N
30 MEM$(6,6)=CHR$(LOBYTE):MEM$(14,14)
=CHR$(HIBYTE)
40 RESERVE=USR(ADR(MEM$))
50 DATA 24,173,231,2,105,0,141,231,2,
173,232,2,105
60 DATA 0,141,232,2,169,0,133,8,76,0,
160

You will find the address of your reserved memory by: PRINT
PEEK(743) + PEEK(744) * 256 before you run the program. This
program will wipe itself out when run. Altering MEMLO is the
method used by both DOS and the RS-232 port driver in the 850
Interface. See COMPUTE!, July 1981.


Im Atari Basic kann man das innerhalb eines AUTORUN.SYS Programmes machen, bei Turbo-BASIC muss man warscheinlich eine eigene Initialisierungsroutine an das Turbo-Basic anhängen (nicht trivial).

von cas » So 26. Aug 2007, 13:35
(Turbo-)Basic ist nicht ideal für Programme, welche auf den erweiterten Speicher zugreifen, da man wenig Kontrolle darüber hat, wo Basic seine Daten ablegt (das liegt in der Natur von Basic, der Benutzer soll sich ja auch keine Gedanken über die Speicherbelegung des Rechners machen).

Beim Zugriff auf den erweiterten Speicher muss man sich aber über die Speicherbelegung Gedanken machen und diese Kontrollieren.

Das geht mit ACTION! oder Assembler, bedingt auch mit Forth, besser.

von PacMan » So 26. Aug 2007, 15:16
Richtig. Ich habe mal die Initadresse vom TBasic-File ( Byte 7+8 ) auf $8000 geändert. Jetzt zeigt FRE(0) 15118 Bytes an.

@ robbifan: Das geänderte TBasic kommt per Mail.

von robbifan » So 26. Aug 2007, 15:20
he, wie hast du das gemacht...???
kannst du zaubern? du kennst das turbasic aber sehr gut.
:roll:
kannst du hier auch mal erklären, mit was du das turbobasic zerflückt hast?

nach dem anschauen bei mir :

:oops::oops:
natürlich mit einem hexeditor
:D:D



mfg

von robbifan » So 26. Aug 2007, 15:52
dann fängt das turbo-basic normal bei "13865" an?

dann könnte ich ja jetzt mit dem geänderten turbobasic den speicher von "13865" bis "16383" mit asm voll proggen, ist das richtig?

oder ist die speicheranfangadresse jetz nicht mehr "13865", weil turbobasic verlegt wurde, funkt da jetzt was anderes rein, welches ich nicht weiss? :cry:

manche asm-programme fangen bei $600 an, habe ich etwa den speicher ab $600 frei bis $3fff? das wär ja toll :lol:

mfg peter

von PacMan » So 26. Aug 2007, 17:01
Hallo Peter,

Zauberer sind leider andere Leute. Die Startadresse des Basic-Progs (LOMEM $80,$81) wird bei der Basic-Initialisierung aus MEMLO ($2E7,$2E8) übernommen. Mit "HEA Filename" kann man sich im TurboDos die Filestruktur vom TBasic anzeigen lassen und zum Schluß noch die beiden Bytes im File ändern.
Richtig der Bereich von $3629-$3FFF ist dann frei. Bis $207F ist vom DOS belegt und $2080-$3628 belegt ein Teil des TBasic-Interpreters.

Gruß,
Steffen

von robbifan » So 26. Aug 2007, 17:41
irgendwie hatte ich hier im forum mal den freien speicher für asm-routinen gelesen, finde den aber nicht mehr.

kannst du ihn hier mal erläutern, wo man noch was hineinstopfen kann?

mfg peter

von PacMan » So 26. Aug 2007, 20:40
$480-$57D und $600-$6FF (Page 6) sollte frei sein. Mehr kann ich dazu nicht sagen.

von robbifan » Mo 27. Aug 2007, 20:53
warum läuft das programm oben "Sa Aug 25, 2007 11:23 pm " nur im atari800win-emu richtig, im realen atari wird zwar gezeichnet , wird aber vom pixelwirrwarr überdeckt???

mfg peter

von PacMan » Mi 29. Aug 2007, 10:46
Hallo Peter,

Im Speicherbereich wo im Hintergrund gezeichnet wird sind noch irgendwelche Daten drin die ohne Graphics Befehl nicht gelöscht werden. Also nach Bankumschaltung und vor dem Zeichnen einfach auf Null setzen.

Gruß,
Steffen

von robbifan » Mi 29. Aug 2007, 21:53
ich brauche in der zeropape freien speicher für eine asm-scheife.

wo ist da noch speicher frei beim atari800xl?

mfg
1, 2