Tricks in BASIC

ZX-Team Forum
Antworten
Benutzeravatar
Jens
User
Beiträge: 1140
Registriert: 23.08.2005, 13:31
Wohnort: D-31582 Nienburg/Weser

Tricks in BASIC

Beitrag von Jens » 15.09.2007, 11:59

Hallo!

Ich finde, der Thread fehlt noch in diesem Forum. Deshalb hier ein kleines Programm (ist nicht von mir, geb ich zu, ist aber lustig):

10 LET A$=" HALLO USER. DIES IST DER BESTE COMPUTER DER WELT. DER SINCLAIR ZX81 "
20 LET A$=A$(2 TO )+A$(1)
30 PRINT AT 10,1;A$(1 TO 30)
40 GOTO 20

Nun denn...happy RUN

Gruß
Jens
Der ZX81 rechnet mit allem, nur nicht mit seinem Besitzer...
Neues aus der KI-Welt... Die Automate kann sich selbst essen.

Benutzeravatar
nils.eilers
User
Beiträge: 111
Registriert: 31.01.2005, 14:07
Wohnort: Leverkusen
Kontaktdaten:

Re: Tricks in BASIC

Beitrag von nils.eilers » 15.09.2007, 13:12

Stimmt, eigentlich ist so etwas überfällig!

Ich denke bei "Tricks in BASIC" spontan an Sachen wie...

- Speicherspar-Tricks
- READ/DATA/RESTORE-Ersatz
- MID$/LEFT$/RIGHT$-Ersatz
- Programme MERGEn

und natürlich...
- lange REM-Zeile erzeugen (für MC-Programme)
- Parameterübergabe an MC-Programme mit PRINT USR NAME, PARAMETER, PARAMETER...

Steht bestimmt schon alles in irgendwelchen ZX-Team-Magazinen! :D

Benutzeravatar
Jens
User
Beiträge: 1140
Registriert: 23.08.2005, 13:31
Wohnort: D-31582 Nienburg/Weser

Re: Tricks in BASIC

Beitrag von Jens » 15.09.2007, 18:02

Read und Data hatte Andre*** schon 1991 veröffentlicht:

http://www.zx-team.de/andre/zx91/_frame_e.htm

Gruß
Jens
Der ZX81 rechnet mit allem, nur nicht mit seinem Besitzer...
Neues aus der KI-Welt... Die Automate kann sich selbst essen.

Benutzeravatar
sbetamax
User
Beiträge: 482
Registriert: 04.03.2006, 22:01
Wohnort: Deutschland / Hessen / Nidda
Kontaktdaten:

Re: Tricks in BASIC

Beitrag von sbetamax » 16.09.2007, 13:30

Hi,
MID$ und co gehen doch gut mit dem TO Befehl im Handbuch auf Seite 137.
Und ehrlich gesagt gefällt mir diese befehlsparende Variante irgendwie besser :D
Gruß Stephan
_______________
ZX80 (nachbau), ZX81, ZX 2000, ZX NU, IQ8300, ZX Spectrum, ZX Spectrum plus, ZX Spectrum 128, Harlequin, C64

Benutzeravatar
Jens
User
Beiträge: 1140
Registriert: 23.08.2005, 13:31
Wohnort: D-31582 Nienburg/Weser

Re: Tricks in BASIC

Beitrag von Jens » 20.09.2007, 16:43

Tastaturabfrage:

200 PRINT "BITTE [S]TART DRUECKEN..."

Standard:

210 IF INKEY$<>"S" THEN GOTO 210

oder:

210 GOTO 210+(INKEY$="S")
Der ZX81 rechnet mit allem, nur nicht mit seinem Besitzer...
Neues aus der KI-Welt... Die Automate kann sich selbst essen.

Benutzeravatar
nils.eilers
User
Beiträge: 111
Registriert: 31.01.2005, 14:07
Wohnort: Leverkusen
Kontaktdaten:

Re: Tricks in BASIC

Beitrag von nils.eilers » 20.09.2007, 19:33

Diese INKEY$-Abfrage habe ich noch nie gesehen - was ist ihr Vorteil?

Benutzeravatar
Jens
User
Beiträge: 1140
Registriert: 23.08.2005, 13:31
Wohnort: D-31582 Nienburg/Weser

Re: Tricks in BASIC

Beitrag von Jens » 20.09.2007, 22:26

Vorteil: Der Rechner wartet auf die Eingabe und läßt nur das S zu. Das kann man auch anders machen, aber so ist es in eine Zeile verpackt!
Der ZX81 rechnet mit allem, nur nicht mit seinem Besitzer...
Neues aus der KI-Welt... Die Automate kann sich selbst essen.

Benutzeravatar
nils.eilers
User
Beiträge: 111
Registriert: 31.01.2005, 14:07
Wohnort: Leverkusen
Kontaktdaten:

Re: Tricks in BASIC

Beitrag von nils.eilers » 21.09.2007, 05:42

hm... beide "Vorteile" treffen auch auf die Zeile

Code: Alles auswählen

210 IF INKEY$<>"S" THEN GOTO 210
zu, die aber wesentlich lesbarer ist...

Aber als ON-GOTO / ON-GOSUB-Ersatz hat dieser Konstrukt Sinn:

Statt

Code: Alles auswählen

ON A GOSUB 100,110,120,130,500
kann man dann beispielsweise schreiben:

Code: Alles auswählen

GOSUB 100+A*10*(A<5)+400*(A=5)

Benutzeravatar
Jens
User
Beiträge: 1140
Registriert: 23.08.2005, 13:31
Wohnort: D-31582 Nienburg/Weser

Re: Tricks in BASIC

Beitrag von Jens » 16.12.2007, 14:15

Tach!

Viele von Euch werden das schon kennen:

An Stelle einer FOR/NEXT-Schleife

10 FOR I=1 TO 10
20 NEXT I

kann man einfach

10 PRINT SQR SQR SQR 1

schreiben.

Gruß
Jens
Der ZX81 rechnet mit allem, nur nicht mit seinem Besitzer...
Neues aus der KI-Welt... Die Automate kann sich selbst essen.

Benutzeravatar
MatthiasS
User
Beiträge: 115
Registriert: 11.05.2004, 15:29
Wohnort: Wuppertal
Kontaktdaten:

Re: Tricks in BASIC

Beitrag von MatthiasS » 10.06.2008, 18:12

Ich weiss ja nicht, ob ihr den Trick schon (noch) kennt:

Wie verhindert man den automatischen Start eines Basic Programms beim Laden?
So:
  • FAST
    RAND USR 836
Nach dem Laden erscheint die Fehlermeldung C/0 und das Programm liegt einem zu Füßen.
Im EightyOne muss man die Speedload Option dazu ausschalten. Dann gehts sogar im Emulator

Benutzeravatar
Jens
User
Beiträge: 1140
Registriert: 23.08.2005, 13:31
Wohnort: D-31582 Nienburg/Weser

Re: Tricks in BASIC

Beitrag von Jens » 10.06.2008, 19:52

Danke Matthias!

Danach habe ich schon gesucht!

Gruß
Jens
Der ZX81 rechnet mit allem, nur nicht mit seinem Besitzer...
Neues aus der KI-Welt... Die Automate kann sich selbst essen.

Benutzeravatar
MatthiasS
User
Beiträge: 115
Registriert: 11.05.2004, 15:29
Wohnort: Wuppertal
Kontaktdaten:

Noch so ein billiger Trick...

Beitrag von MatthiasS » 13.06.2008, 18:50

Wie kann man ganz schnell und einfach eine Zahl zwischen 0 un 64000 in Highbyte und Lowbyte zerlegen?

So:
  • RAND ZAHL
    LET LOWBYTE = PEEK 16434
    LET HIGHBYTE = PEEK 16435

Benutzeravatar
siggi
User
Beiträge: 2351
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Tricks in BASIC

Beitrag von siggi » 14.06.2008, 00:26

Klappt aber nicht für 0
;-)
Siggi

Benutzeravatar
MatthiasS
User
Beiträge: 115
Registriert: 11.05.2004, 15:29
Wohnort: Wuppertal
Kontaktdaten:

Re: Tricks in BASIC

Beitrag von MatthiasS » 14.06.2008, 23:37

Jau, stimmt! (weiss eigentlich auch jeder warum nicht?)
Als Trost gehts dafür aber auch etwas höher als nur 64000 ;-)

Benutzeravatar
bodo
User
Beiträge: 319
Registriert: 14.02.2007, 17:21
Kontaktdaten:

Re: Tricks in BASIC

Beitrag von bodo » 21.06.2008, 11:21

Die Lösung steht im BASIC-Handbuch: wenn RAND mit 0 als Parameter aufgerufen wird, benutzt der ZX stattdessen den aktuellen Stand von FRAMES, also die Anzahl Fernsehbilder seit dem letzten Reset.

Weil die Zufallszahl mit 16 Bit gespeichert wird, könnt ihr den Trick für den Bereich 1 bis 65535 benutzen. Die Umwandlung für den Wert 0 ist ja trivial, muss aber extra abgefangen werden.
B0D0: Real programmers do it in hex.

Antworten