Welcome, Guest. Please login or register.


Author Topic: BASIC (Read 210697 times)

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13727
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #1290 on: 2019.February.01. 13:05:49 »
Rövidebb név valóban gyorsabb, bár ki kéne mérni, hogy mennyire észrevehető.
Ami biztos: kisebb lesz a programméret, valamint futás közben is kevesebb memóriát igényel a program. Nagy méretű, a Basic memóriát kitöltő programnál ez már számíthat.
Minél kevesebb változót használni szintén spórolás a memóriával. És amikor egy még nem használt változót használunk, akkor azt létre kell hozni a rendszernek, így biztos gyorsabb újrafelhasznált változókkal dolgozni. Szintén kérdés, hogy ez vajon mennyire észlelhető.
Zzzipnél szerintem a neveket eldobja, lefordított címeket használ, valamint eleve definiálja az összes változót, így szerintem sebesség befolyásolás nincs. De a zzzipelt programnál eleve hamarabb elszokott fogyni a memória, így a minél kevesebb változó használata ajánlott.

Offline Povi

  • EP addict
  • *
  • Posts: 1965
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 71.0.3578.98 Chrome 71.0.3578.98
    • View Profile
    • http://povi.fw.hu
Re: BASIC
« Reply #1291 on: 2019.February.01. 13:29:53 »
Van bármilyen előnye a program működése szempontjából, ha hosszú változónevek helyett rövideket adunk meg? Pl. LET BOMBA=3 helyett LET B=3. Akár a program sebessége szempontjából, vagy Zzzippel lefordítva gyorsabb lesz? Előnyös, ha minél kevesebb változónevet használunk? Pl. átmeneti változóknak ugyanazt a nevet adni, pl.
100 FOR WAIT=1 to 200
110 NEXT
(És mindig a WAIT változót használni átmeneti kis feladatokra, a WAIT tartalmát máshol nem használja fel a program.)
Nem tudom, az IS-BASIC hogy működik, de pl. a C64-nél (és az összes korai Microsoft BASIC esetében) a változó neveit deklarálás sorrendjében rakta el a memóriába, és hivatkozáskor lineáris kereséssel kereste meg azokat. Ezért a gyakran használt változókat minél előbb kellett deklarálni, hogy hamarabb megtalálja.
A BBC BASIC-ben már ABC sorrednben rakta el a változóneveket, lehet, hogy az IS-BASIC is így működik, elég sok ötletet át vettek belőle
*** Speicherplatz zu klein

Offline endi

  • EP addict
  • *
  • Posts: 7305
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 70.0.3538.102 Chrome 70.0.3538.102
    • View Profile
    • Honlapom
Re: BASIC
« Reply #1292 on: 2019.February.01. 13:58:43 »
ez érdekes. ezek szerint az x használata nem igazán jó, ahol abc sorrendben van indexelve :)
ki lehetne mérni ezeket, bár lehet, hogy felesleges, úgyis minden basic programot zzzippelni kell :)
Vigyázat! Szektás vagyok! :)

Offline endi

  • EP addict
  • *
  • Posts: 7305
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 70.0.3538.102 Chrome 70.0.3538.102
    • View Profile
    • Honlapom
Re: BASIC
« Reply #1293 on: 2019.February.01. 14:00:30 »
érdekes amúgy hogy a gracha-ból exportált programot ha először kilistázzuk, furcsán néz ki.
ha elindítjuk, leállítjuk és újra listázzuk, már jó.
persze nagyjából értem mi ez.
Vigyázat! Szektás vagyok! :)

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13727
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #1294 on: 2019.February.01. 14:08:23 »
érdekes amúgy hogy a gracha-ból exportált programot ha először kilistázzuk, furcsán néz ki.
:shock:

Offline Povi

  • EP addict
  • *
  • Posts: 1965
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 71.0.3578.98 Chrome 71.0.3578.98
    • View Profile
    • http://povi.fw.hu
Re: BASIC
« Reply #1295 on: 2019.February.01. 15:39:04 »
ez érdekes. ezek szerint az x használata nem igazán jó, ahol abc sorrendben van indexelve :)
ki lehetne mérni ezeket, bár lehet, hogy felesleges, úgyis minden basic programot zzzippelni kell :)
nem, nem, asszem tök mindegy, mivel kezdődik, mert úgy működik, hogy először a kezdőbetű alapján ugrótábla, és aztán majd ott keresi lineárisan, csak az x betűsök között (tehát akkor a leggyorsabb, ha minden változó különböző betűvel kezdődik)

szerk: tényleg így van:
http://www.bbcbasic.co.uk/bbcbasic/mancpm/annexd.html#variablestorage
« Last Edit: 2019.February.01. 15:43:37 by Povi »
*** Speicherplatz zu klein

Offline endi

  • EP addict
  • *
  • Posts: 7305
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 70.0.3538.102 Chrome 70.0.3538.102
    • View Profile
    • Honlapom
Re: BASIC
« Reply #1296 on: 2019.February.01. 18:08:47 »
első idő: "a" a változó neve
második idő: "z" a változó neve
harmadik idő: hosszú változó név
mint láthatjuk, nem számít semmit.
Vigyázat! Szektás vagyok! :)

Offline szipucsu

  • EP addict
  • *
  • Posts: 8586
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 71.0.3578.98 Chrome 71.0.3578.98
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #1297 on: 2019.February.01. 18:38:57 »
persze nagyjából értem mi ez.
Jó neked.
Talán a tokenizálással függ össze, hogy először még a tokenizálatlan programot töltötte be (txt fájlból). De attól már elsőre tokenizáltnak kellett volna lennie.

Velem olyan volt nemrég, hogy egy programot nem akart a Zzzip lefordítani. Kilistáztam fájlba, majd abból a fájlból betöltöttem a load-dal és elmentettem. Így már vitte a Zzzip. Az eredeti program néhány bájttal több volt. Ez meg miért lehet?
100 SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
110 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
120 SOUND PITCH 25,SYNC 2
Videos

Offline Tomato77

  • EP user
  • *
  • Posts: 250
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 71.0.3578.98 Chrome 71.0.3578.98
    • View Profile
Re: BASIC
« Reply #1298 on: 2019.February.02. 08:26:22 »
mint láthatjuk, nem számít semmit.
Ekkora programnál, ahol egy változó van, tényleg nem számít, de ki kéne próbálni olyat, ahol 20-30 változó közül kell kibogarásznia a megfelelőt. Ott lehet, hogy lehetne mérni valamekkora különbséget.
Kotasoft

Offline Tomato77

  • EP user
  • *
  • Posts: 250
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 71.0.3578.98 Chrome 71.0.3578.98
    • View Profile
Re: BASIC
« Reply #1299 on: 2019.February.02. 09:25:09 »
Kipróbáltam: az első mérésnél "A" volt a változó neve, a másodiknál "AZ". Nincs mérhető különbség... A NEXT-ből elhagytam a változónevet, mert ahogy korábban olvastam, ott bármit elfogad az interpreter, és csak 20000 ciklust vártam ki normál emu sebességgel.
Kotasoft

Online gflorez

  • EP addict
  • *
  • Posts: 2935
  • Country: es
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
Re: BASIC
« Reply #1300 on: 2019.February.02. 21:56:12 »
Most, hogy a végrehajtási idők méréséről beszélünk.

Körülbelül 1/50 másodperc múlva mérhetjük az időt, a 39-es változót használva, RANDOM_IRQ.

Kíváncsi voltam, hogyan gyorsabb lenne elválasztani a 16 bites szám 2 bájtját?

----------------------

Talking about measuring execution times.

We can approximately measure time with 1/50th of seconds, using the variable 39, RANDOM_IRQ.

I wonder, how would it be faster to separate the 2 byte of a 16-bit number?

Code: [Select]
 100 PROGRAM EXTRACT L AND H FROM HL
  110 !
  120 SET STATUS OFF
  130 TEXT 40
  140 PRINT AT 1,1:"Please enter an 8 bit number(0-65535):"
  150 PRINT AT 2,1:CHR$(25)
  160 PRINT CHR$(25)
  170 PRINT CHR$(25)
  180 PRINT CHR$(25)
  190 PRINT CHR$(25)
  200 PRINT CHR$(25)
  210 !
  220 INPUT AT 2,1,IF MISSING 150:W$
  230 IF W$="" THEN GOTO 150 !            false input
  240 LET W=VAL(W$)
  250 IF STR$(W)<>W$ THEN GOTO 150 !     no strings  
  260 IF W>65535 OR W<0 THEN GOTO 150 ! out of range
  270 PRINT
  280 !
  290 !           WORD$ command mode
  300 !
  310 SET 39,0:LET A$=WORD$(W):LET L=ORD(A$(1:1)):LET H=ORD(A$(2:2)):ASK 39 T
  320 !
  330 PRINT W,"L=";L,"H=";H,LTRIM$(STR$(T));"/50 of sec."
  340 !
  350 !           Arithmetic mode
  360 !
  370 SET 39,0:LET L=REM(W,256):LET H=(W-L)/256:ASK 39 T
  380 !
  390 PRINT W,"L=";L,"H=";H,LTRIM$(STR$(T));"/50 of sec."
  400 !
  410 PRINT :PRINT "press a key for a new try"
  420 IF INKEY$="" THEN GOTO 420
  430 GOTO 150

Azt hiszem, törölhetjük a 230-as vonalat. És mindezeket a nyomtatási parancsokat vezérlőkódként helyezzük el egy karakterláncba

----------------------

I think that we can eraae line 230. And put all these Print commands as control codes inside a string.
« Last Edit: 2019.February.03. 13:17:57 by gflorez »

Offline szipucsu

  • EP addict
  • *
  • Posts: 8586
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 64.0 Firefox 64.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #1301 on: 2019.February.03. 16:39:06 »
Code: [Select]
 100 PROGRAM EXTRACT L AND H FROM HL
What is the sense of using a text after "program" command, without quotes? I have seen this somewhere else too.
If you use e.g. 100 PROGRAM "EXTRACT", SAVE command will save with this file name. But without quotes it has no function I think.

---
Mi értelme a "program" parancs után idézőjel nélkül írni szöveget? Már máshol is láttam ilyet.
Idézőjellel, pl. 100 PROGRAM "EXTRACT" a SAVE parancs ezzel a file névvel fogja kimenteni. De idézőjelek nélkül nincs semmi funkciója, úgy tudom.
100 SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
110 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
120 SOUND PITCH 25,SYNC 2
Videos

Online gflorez

  • EP addict
  • *
  • Posts: 2935
  • Country: es
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 52.0 Firefox 52.0
    • View Profile
Re: BASIC
« Reply #1302 on: 2019.February.03. 17:23:06 »
Természetesen igazad van.

Új verzió néhány optimalizálással:

-------------------

Of course you are right....

New version with some optimizations:

Code: [Select]
 100 PROGRAM "HL.BAS"
  110 !                EXTRACT L AND H FROM HL
  120 SET STATUS OFF
  130 TEXT 40
  140 LET S$=CHR$(25)&CHR$(10)&CHR$(13) !erase line and CR
  150 LET S$=S$&S$&S$&S$&S$&S$
  160 PRINT AT 1,1:"Please enter an 8 bit number(0-65535):"
  170 PRINT AT 2,1:S$
  180 !
  190 INPUT AT 2,1:W$
  210 LET W=VAL(W$)
  220 IF STR$(W)<>W$ OR W>65535 OR W<0 THEN PRINT AT 2,1:S$(1:3):GOTO 190 !strings not allowed
  230 PRINT
  240 !
  250 !           WORD$ command mode
  260 !
  270 SET 39,0:LET A$=WORD$(W):LET L=ORD(A$(1:1)):LET H=ORD(A$(2:2)):ASK 39 T
  280 !
  290 PRINT "L=";L,"H=";H,LTRIM$(STR$(T));"/50 of sec."
  300 !
  310 !           Arithmetic mode
  320 !
  330 SET 39,0:LET L=REM(W,256):LET H=(W-L)/256:ASK 39 T
  340 !
  350 PRINT "L=";L,"H=";H,LTRIM$(STR$(T));"/50 of sec."
  360 !
  370 PRINT :PRINT "press any key for a new try"
  380 IF INKEY$="" THEN GOTO 380
  390 GOTO 170

« Last Edit: 2019.February.03. 17:47:14 by gflorez »

Offline ergoGnomik

  • EP lover
  • *
  • Posts: 950
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 6.3 Windows NT 6.3
  • Browser:
  • Vivaldi 2.2.1388.37 Vivaldi 2.2.1388.37
    • View Profile
Re: BASIC
« Reply #1303 on: 2019.February.03. 19:00:25 »
Quote
Code: [Select]
160 ... "Please enter an 8 bit number(0-65535):"
Wouldn't that actually be either a 16 bit number or (0-255)?

Could you try it with
Code: [Select]
330 ... L=W BAND 255 ...instead of
Code: [Select]
330 ... L=REM(W,256) ...as a third or at least two-and-a-halfth method?

Online gflorez

  • EP addict
  • *
  • Posts: 2935
  • Country: es
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 52.0 Firefox 52.0
    • View Profile
Re: BASIC
« Reply #1304 on: 2019.February.03. 21:09:19 »
Sajnálom, egy nagyon nyilvánvaló hiba, hogy egy 8 bites számot kérjen nagyobb tartományban.

Hozzáadtam a javasolt módszert. Gyorsabban működik ... de csak 9999-ig .... Miért?

-----------------------------

Sorry, a very evident error to ask for an 8 bit number with a bigger range....

I have added your suggested method. It works... faster.... but only up to 9999.... Why?


Code: [Select]
 100 PROGRAM "HL.BAS"
  110 !                EXTRACT L AND H FROM HL
  120 SET STATUS OFF
  130 TEXT 40
  140 LET S$=CHR$(25)&CHR$(10)&CHR$(13) !erase line and CR
  150 LET S$=S$&S$&S$&S$&S$&S$&S$&S$
  160 PRINT AT 1,1:"Please enter a 16 bit number(0-65535):"
  170 PRINT AT 2,1:S$
  180 !
  190 INPUT AT 2,1:W$
  200 LET W=VAL(W$)
  210 IF STR$(W)<>W$ OR W>65535 OR W<0 THEN PRINT AT 2,1:S$(1:3):GOTO 190 !strings not allowed
  220 PRINT
  230 !
  240 !           Arithmetic+BAND
  250 !
  260 SET 39,0:LET L=(W BAND 255):LET H=(W-L)/256:ASK 39 T
  270 !
  280 LET M$="BAND ":GOSUB 450
  290 !
  300 !           WORD$
  310 !
  320 SET 39,0:LET A$=WORD$(W):LET L=ORD(A$(1:1)):LET H=ORD(A$(2:2)):ASK 39 T
  330 !
  340 LET M$="WORD$":GOSUB 450
  350 !
  360 !           Arithmetic+REM
  370 !
  380 SET 39,0:LET L=REM(W,256):LET H=(W-L)/256:ASK 39 T
  390 !
  400 LET M$="REM  ":GOSUB 450
  410 !
  420 PRINT :PRINT "press any key for a new try"
  430 IF INKEY$="" THEN GOTO 430
  440 GOTO 170
  450 PRINT M$,"L=";L,"H=";H,LTRIM$(STR$(T));"/50 of sec.":RETURN
« Last Edit: 2019.February.03. 21:13:40 by gflorez »