ENTERPRISE KLUB
2021. június 19., 1055 Budapest, Nyugati tér 9. 14-19 óráig
(Belépés csak védettségi igazolvánnyal lehetséges!)
Részletek
Welcome, Guest. Please login or register.


Author Topic: Általános (Read 262091 times)

Offline gflorez

  • EP addict
  • *
  • Posts: 3135
  • Country: es
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
Re: Általános
« Reply #1290 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: 9068
  • 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: Általános
« Reply #1291 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

Offline gflorez

  • EP addict
  • *
  • Posts: 3135
  • Country: es
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 52.0 Firefox 52.0
    • View Profile
Re: Általános
« Reply #1292 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 addict
  • *
  • Posts: 1031
  • 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: Általános
« Reply #1293 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?

Offline gflorez

  • EP addict
  • *
  • Posts: 3135
  • Country: es
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 52.0 Firefox 52.0
    • View Profile
Re: Általános
« Reply #1294 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 »

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1031
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 64.0 Firefox 64.0
    • View Profile
Re: Általános
« Reply #1295 on: 2019.February.04. 07:50:36 »
I have added your suggested method. It works... faster.... but only up to 9999.... Why?
Storing numeric values works roughly as follows, according to a Hungarian book (Tippek és trükkök ENTERPRISE - Tips and Tricks ENTERPRISE). Numeric values are usually stored in the variable table in 5+1 bytes. Some integer values are stored in two bytes native binary form and the rest of the memory allocated to it is filled with 127. Integers larger than 9999 and floats are stored in BCD form. Maybe that has to do something with it.

Offline szipucsu

  • EP addict
  • *
  • Posts: 9068
  • 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: Általános
« Reply #1296 on: 2019.February.04. 23:13:06 »
És azzal lehet spórolni valamit, ha string változó maximális hosszát előre meghatározzuk?
Például:

100 GET A$
110 IF A$....

És ez elé még odaírjuk, hogy

90 STRING *1 A$

Így talán a Zzzip is később fut ki a szabad helyből és nem tart fent annyi helyet egy új változónak?
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 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: Általános
« Reply #1297 on: 2019.February.04. 23:29:07 »
ezzel nagyon sokat lehet spórolni! ha nincs megadva a hossz, asszem minden string 256 bájtot foglal
Vigyázat! Szektás vagyok! :)

Offline szipucsu

  • EP addict
  • *
  • Posts: 9068
  • 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: Általános
« Reply #1298 on: 2019.February.05. 12:16:12 »
Az envelope-nak miért csak 25 fázisnak van hely alapból? Persze fel lehet szabadítani több helyet is neki, pl.

CLOSE #103
SET SOUND BUFFER 30 (vagy még nagyobb)
OPEN #103:"sound:"

Ha nagy sound buffert adunk meg, akkor az mi elől veszi el a helyet? Hogy a Zzzipnek bezavar, azt nem hiszem, hiszen a zzzippel lefordított program betöltése előtt is lehet sok envelope numbert létrehozni, még a zzzippelt program is tudja azokat használni.
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 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: Általános
« Reply #1299 on: 2019.February.05. 13:39:45 »
hát a nagyobb sound buffet több memóriát foglal.
már nem emlékszem pontosan mennyit, de asszem nem sokat, csodálkoztam is hogy miért olyan kevés a default
Vigyázat! Szektás vagyok! :)

Offline szipucsu

  • EP addict
  • *
  • Posts: 9068
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Általános
« Reply #1300 on: 2019.February.24. 18:19:17 »
Endi, az jutott eszembe, hogy a Mega Pacman játékodat meg lehetne csinálni grafikus karakteres képernyőre, több szín lenne. Bár a soronként megnyitott videólapok a scrollt talán nem tennék lehetővé, vagy legalábbis nehezebb lenne megcsinálni. De attól tartok, nincs meg az eredeti basic program, csak a zzzippelt, legalábbis az ep128.hu-n.
Meg a 2016-os (félig befejezett) Snakeprise is megcsinálható lenne gracha módra. Ez akár sokszínű is lehet, mert a karakterek alakjának nincs túl nagy jelentősége.
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 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 71.0.3578.98 Chrome 71.0.3578.98
    • View Profile
    • Honlapom
Re: Általános
« Reply #1301 on: 2019.February.24. 18:41:36 »
Endi, az jutott eszembe, hogy a Mega Pacman játékodat meg lehetne csinálni grafikus karakteres képernyőre, több szín lenne. Bár a soronként megnyitott videólapok a scrollt talán nem tennék lehetővé, vagy legalábbis nehezebb lenne megcsinálni. De attól tartok, nincs meg az eredeti basic program, csak a zzzippelt, legalábbis az ep128.hu-n.
Meg a 2016-os (félig befejezett) Snakeprise is megcsinálható lenne gracha módra. Ez akár sokszínű is lehet, mert a karakterek alakjának nincs túl nagy jelentősége.

már el is felejtettem ezt a játékot :D
Vigyázat! Szektás vagyok! :)

Offline szipucsu

  • EP addict
  • *
  • Posts: 9068
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 65.0 Firefox 65.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Általános
« Reply #1302 on: 2019.March.15. 22:14:53 »
Eljárás nem hívhatja meg önmagát, mert a sokadig meghívás után hiba lesz? Például ez a 40. meghívás után lefagy:

10 DEF EKT
20  CALL EKT
30 END DEF
40 CALL EKT

De ha nem ilyen direktbe hívjuk meg, akkor működhet? Például ilyesmi:

10 DEF EKT
20   IF A>80 THEN CALL EKT
30 END DEF
35 FOR X=1 TO 2000
40   LET A=RND(120)
50   CALL EKT
60 NEXT

Valami hasonlót sikerült a kígyós játékomba betenni. Próbálgattam, de sokadik meghívás után sem fagy le.
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 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 71.0.3578.98 Chrome 71.0.3578.98
    • View Profile
    • Honlapom
Re: Általános
« Reply #1303 on: 2019.March.15. 23:07:08 »
a rekurzív függvényhívás hasznos dolog, de persze nyilván minden hívás plusz memóriát foglal, így aztán egyszercsak elfogy a memória...
Vigyázat! Szektás vagyok! :)

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1031
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows NT 6.3 Windows NT 6.3
  • Browser:
  • Vivaldi 2.3.1440.61 Vivaldi 2.3.1440.61
    • View Profile
Re: Általános
« Reply #1304 on: 2019.March.16. 00:05:09 »
Nos, a két változat között az az eltérés, hogy mesterségesen 39-re (vagy 38-ra?) korlátozod a hívás "mélységét" a második esetben, így sosem éri el a 40-es határt. Egyébként a kettő között nincs érdemi különbség.