Enterprise Forever
:HUN => Programozás => BASIC => Topic started by: Tuby128 on 2024.March.02. 22:26:29
-
Épp nosztalgiáztam olvasgattam a címben említett magazint és megtaláltam benne egy kis programocskát. Megkértem a lányomat, hogy gépelje be.
Néhány óra alatt sikerült neki. Leültem mellé, kijavítottam az elütéseket és elmentettük.
Ezután elindítva kifagyott a gép.
Gondoltam azért van mert nekünk német gépünk van, ezért bedugtam egy angol cartidge-t. Újra elindítottam de semmi.
Valaki rá tudna nézni mi lehet a baj?
Itt lesz a program a csatolmányban, a következő hozzászólásban pedig egy fotó az újságból.
-
Az említett újságcikk.
-
Az ALLOCATE sor elé nem kerülhet sor, kivéve talán a PROGRAM-ot tartalmazó sor. Eredetileg is betettek elé egy TEXT-et, és ti is írtatok bele még egyet.
A DATA sorokban vannak szóközök is, az nem is működik így, helyette más karaktereket kell beírni.
Viszont a fentieket javítva sem csinál semmit a program.
Lehet, hogy az ep128.hu-n fent van már valahol a program.
-
Töb mint való színű 160 sor poke cím nem megfelelő
plusz a 290 DATA sorban a SPACE helyett mást ," ", kellene írni
-
Az ALLOCATE sor elé nem kerülhet sor, kivéve talán a PROGRAM-ot tartalmazó sor. Eredetileg is betettek elé egy TEXT-et, és ti is írtatok bele még egyet.
A DATA sorokban vannak szóközök is, az nem is működik így, helyette más karaktereket kell beírni.
Viszont a fentieket javítva sem csinál semmit a program.
Lehet, hogy az ep128.hu-n fent van már valahol a program.
Működik nekem a változtatásokkal.
ep128Emu v2.0.9.1 Exos 2.1 Basic 2.1 128k
-
Működik nekem a változtatásokkal.
ep128Emu v2.0.9.1 Exos 2.1 Basic 2.1 128k
Ferro mit írtál szóköz helyett? Nyilván kell soköz a szavak közé.
-
Közben eszembe jutott, hogy nekem még az EXDOS kártya is benne van a gépben, innen töltöm be a programot, szóval negy egyszerű az ilyen direkt memóra címzés.
-
Ferro mit írtál szóköz helyett? Nyilván kell soköz a szavak közé.
Bocsi nem voltam egyértelmű és már késő este volt
290 DATA I,g,y," ",p,r,o,b,a,l,d," ",m,e,g
-
Túlzás, hogy működik, nem találja el a képernyő szélét, de azért fut a szöveg.
Tegnap TEXT 80-as módban próbáltam, és úgy nem működött. Ha a szerző TEXT helyett TEXT 40-et tett volna bele, azért, az nagyobb hozzáértésre utalna. :D
[attachurl=1]
Egyébként sima basicben (gépi kódú részek nélkül) is lehet ilyen programot írni egyszerűen. A szomszéd topikban a Pacman Goes Jumping játékban is pont ilyen van, csak nem szöveg, hanem a pálya scrolloz. A pályát át kell írni szövegre, és még akár karakterenként színt is lehet változtatni, ha attribútum videolapot állítunk be.
-
Ez nem túl gyors, Zzzippel fordítva gyorsabb lenne.
Ha nem változna betűnként a szín, vagy kevesebb látszana egyszerre a képernyőn a szövegből, az is gyorsítana rajta.
Gondolom, assemblyben megírni sem lenne túl nehéz annak, aki ért hozzá.
[attachurl=1]
[attachurl=2]
Ilyen még talán nem volt, egy basic demón szerintem sokat dobna.
-
Túlzás, hogy működik, nem találja el a képernyő szélét, de azért fut a szöveg.
Töb mint való színű 160 sor poke cím nem megfelelő
-
Töb mint való színű 160 sor poke cím nem megfelelő
Először úgy értettem, annyira rossz a cím, hogy azért nem működik egyáltalán.
-
Írtam egy kis BASIC progit ezeknek a címeknek a meghatározására.
-
Az ALLOCATE sor elé nem kerülhet sor, kivéve talán a PROGRAM-ot tartalmazó sor. Eredetileg is betettek elé egy TEXT-et, és ti is írtatok bele még egyet.
Ez így nem teljesen igaz, azért nem szokás semmit írni az ALLOCATE elé, mert törli a változókat. Mivel a TEXT utasítás még nem hoz létre semmilyen BASIC változót, így az nyugodtan mehet akár az ALLOCATE elé is. De valóban, az a tiszta, ha tényleg nincs előtte semmi.
-
Ez nem túl gyors, Zzzippel fordítva gyorsabb lenne.
Lehet próbálkozni a 250. sorban látható FOR ciklus végértékét kisebbre venni. Ez csak a várakozást intézi. Akár a 250. és 260. sor törlését is meg lehet próbálni, de úgy lehet, h túl gyors lesz scroll.
-
A 120. sorban lévő CODE helyett pedig lehet ez:
=HEX$("3E,20,54,5D,23,01,27,00,ED,B0,12,C9")
ugyanazt csinálja, de 3 byte-tal rövidebb, és 3.75μs-mal gyorsabb :-D (nyilván nem emiatt lassú a BASIC-ben)
de az LD BC,1 / ADD HL,BC szúrta a csőrömet, lecseréltem egy INC HL-ra ;-)
-
szóval negy egyszerű az ilyen direkt memóra címzés.
Igen, ez a legnagyobb baja ennek a programnak, hogy fix helyen feltételezi a szöveges lapot.
Ezzel a kis programmal ki lehet számolni az adott sor kezdőcímét:
100 LET LPTADDR=PEEK(49141)*256+PEEK(49140)
110 FOR SOR=1 TO 20
120 LET N=SOR*16+4+LPTADDR
130 LET SORCIM=PEEK(N)+PEEK(N+1)*256-16384
140 PRINT SORCIM
150 NEXT
A fenti programból kibányászva a képletet, és a kívánt sor kezdőcímét a SORCIM változóba eltéve, az alábbi két sort kell módosítani a fényújságos progiban:
160 POKE SORCIM+39,ORD(A$)
270 CALL USR(BALRA,SORCIM)
Így 0. sorba kiszámolva a STATUS sorba is tudunk írni!
-
Az elejétől kezdve küzdve olvasom, hogy megtudjam, mit csinál a program...., mert nekem egyáltalán nem működött, még a Szipucsu által javított verzió sem.
Szétszedtem a kódot, hogy abszolút címeket keressek, de ez relokálható.
Aztán rájöttem a Basicben használt abszolút címekre, ahogy Povi rámutat.
Egy igazán rossz példa az Enterprise kódolásra....
------------------------------
I am reading from the start struggling to know what the program does.... because it didn't work at all for me, even the fixed version from Szipucsu.
I have disassembled the code to search absolute addresses, but it is relocatable.
Then I have realised the absolute addresses used in Basic, as Povi points out.
A really bad example of Enterprise coding....
-
Egyébként... nem kapcsolódik, de ez tényleg egy széles görgetés.... Geco készítette, Hans TMTLogic számára, éppen két napja.
------------------
By the way... not related but this is really a wide scroll.... Made by Geco for Hans TMTLogic just two days ago.
Edit: ez egy csodálatos példa arra, hogyan lehet abszolút címekkel relokálhatóvá tenni egy gépi kódot. Én ezt Prodatron stílusnak hívom... mert így működik a SymbOS.
---------------------
Edit: it is a wonderful example on how to make relocatable a machine code with absolute addresses. I call it Prodatron style... because is the way SymbOS works.
-
100 PROGRAM "MIMANO.BAS"
110 TEXT
120 ALLOCATE 12
130 CODE BALRA=HEX$("3e,20,54,5d,23,01,27,00,ed,b0,12,c9")
140 LET LPTA=PEEK(49141)*256+PEEK(49140)
150 LET SOR=0
160 LET N=SOR*16+4+LPTA
170 LET SORCIM=PEEK(N)+PEEK(N+1)*256-16384
180 READ A
190 FOR I=1 TO A
200 READ A$
210 POKE SORCIM+39,ORD(A$)
220 CALL VAR
230 NEXT
240 FOR I=1 TO 40
250 CALL VAR
260 NEXT
270 RESTORE
280 GOTO 180
290 DEF VAR
300 FOR Q=1 TO 25
310 NEXT
320 CALL USR(BALRA,SORCIM)
330 END DEF
340 DATA 38,E,n,t,e,r,p,r,i,s,e,f,o,r,e,v,e,r,.,c,o,m," ",H,e,l,l,o," ",e,v,e,r,y,b,o,d,y,"!"
-
Még szerencse, hogy Povi figyelt az EXOS kompatibilis programozás órákon! :ds_icon_cheesygrin:
Az eredeti program csak és kizárólag 128-as, magnós gépen futott helyesen. Ha bármi plusz ROM, vagy RAM van a rendszerben, már nem stimmel a képernyő kezdőcím.
Mondjuk azt a részt se értem, minek pókolni a szöveget, ahelyett, hogy PRINT AT-tal odaírná :lol:
-
Az eredeti program csak és kizárólag 128-as, magnós gépen futott helyesen.
És csak Text 40 módban. Már a Text 80 módot se csípi.
-
Már a Text 80 módot se csípi.
Igen mert a TEXT 80 az valójában grafikus. Olyan scroll rutin kéne, ami egymás alatt 9 pixelsort mozgat egyszerre.
-
És csak Text 40 módban. Már a Text 80 módot se csípi.
Igen, mert csak "valódi" szöveges módban fut. A 80 karakter széles szöveges valójában már grafikus mód, mivel pixel adatként vannak tárolva a video memóriában a képernyőn látható karakterek. A 40 karakteres módban pedig tényleg "o" és "k" van a videomemóriában ott, ahol az "ok" felirat olvasható.
-
Igen mert a TEXT 80 az valójában grafikus. Olyan scroll rutin kéne, ami egymás alatt 9 pixelsort mozgat egyszerre.
Nem szerencsés, CPC-n grafikus módban megy ugyanaz, mint EP-n karakteres módban, és nem fér bele 1 frame-be a 8 karakter sor frissítése, a leggyorsabb verzióba belefér, de akkor csak fél karakter szélességben van megjelenítve 1 pixel.
-
Minden karakterhatár 0. és 7. bitje adja a színkódot. A 80 oszlopos görgetés meghamisításához jobb, ha nagy felbontású grafikus módot használ.
---------------------
Bit 0 and 7 of every character boundary make the colour code. It is better to use a hires graphics mode for a fake 80 Columns scroll.
-
Minden karakterhatár 0. és 7. bitje adja a színkódot. A 80 oszlopos görgetés meghamisításához jobb, ha nagy felbontású grafikus módot használ.
---------------------
Bit 0 and 7 of every character boundary make the colour code. It is better to use a hires graphics mode for a fake 80 Columns scroll.
Nem nyerünk vele sajnos semmit, mert ugyanúgy 1 karakterre 8 byte-ot kéne írni 2 szín grafikus módban :(
Egy megoldás lehetséges, ha töröljük a VRES bitet az EXOS LPT összes LPB-jében, akkor elég 1 byte/karakter írás, ez lehet színkód bit, ha MS BALT vagy LS BALT, vagy mind a kettő be van állítva, ha nem, akkor egy jól irányzott 0ffh -val egy telített karaktert jeleníthetünk meg az adott pozícióban.
It does not save us any data writing, because we have to write 8 bytes for 1 character also in 2 colour graphics mode :(
There is one solution, if we clear VRES bit of each LPB of EXOS LPT, in this case we can write 1 byte/character, it can be colour code, if MS BALT, or LS BALT or both are set, if not by writing 0ffh then 1 full character will appear in that position.
-
Mi lenne, ha a grafikus puffer mutatóval játszanál? Úgy értem, 80*9 bájt hozzáadásával vagy kivonásával, és némi hely felhasználásával az adatok bevitelére és gördítésére. De lehet, hogy valamit figyelmen kívül hagyok.
How about playing with the graphics buffer pointer? I mean adding or subtracting 80*9 bytes, and using some space for data input&roll. But maybe I am ignoring something.
-
100 PROGRAM "MIMANO.BAS"
110 TEXT
120 ALLOCATE 12
130 CODE BALRA=HEX$("3e,20,54,5d,23,01,27,00,ed,b0,12,c9")
140 LET LPTA=PEEK(49141)*256+PEEK(49140)
150 LET SOR=0
160 LET N=SOR*16+4+LPTA
170 LET SORCIM=PEEK(N)+PEEK(N+1)*256-16384
180 READ A
190 FOR I=1 TO A
200 READ A$
210 POKE SORCIM+39,ORD(A$)
220 CALL VAR
230 NEXT
240 FOR I=1 TO 40
250 CALL VAR
260 NEXT
270 RESTORE
280 GOTO 180
290 DEF VAR
300 FOR Q=1 TO 25
310 NEXT
320 CALL USR(BALRA,SORCIM)
330 END DEF
340 DATA 38,E,n,t,e,r,p,r,i,s,e,f,o,r,e,v,e,r,.,c,o,m," ",H,e,l,l,o," ",e,v,e,r,y,b,o,d,y,"!"
Azért SPEEK, SPOKE vel hasznosabb lett volna akkor ZZZIp elhető lenne.