Enterprise Forever
:HUN => Programozás => BASIC => Topic started by: szipucsu on 2006.October.16. 18:05:28
-
Igazad van, Zozo, az EP memóriakezelésérõl halovány fogalmam sincs. :D A saját memóriám is megtréfál idõnként...
Archivációs tevékenységem folytatásához összedobtam egy progit basicben, ami elvileg orrvérzésig másol kazettáról floppyra, ezt most mellékelem.
Én nagyon szeretem úgy használni az EP-t, hogy még a tévét sem kapcsolom be hozzá, ezen igényemet igyexik kiszolgálni fergeteges alkotásom. Csalafinta módon kiolvassa a status sorból a file címét, megnézi, van-e már ilyen a floppyn, ha nincs, akkor lemásolja, meg ilyesmi.
A sebesség növelése érdekében bevetettem az OUT 191,12 és a POKE 56,201 nevû fegyvereket. Az utóbbi tiltja a megszakításokat, ezért van az egész progi egy WHEN blokkban, hogy ha balhé van, akkor elõbb állítsa vissza a megszakikat, utána balhézzon a gép, hogy ne hiába nyomogassuk a billentyûket ebben az esetben.
Valami plusz 5letetek nincs, amivel még gyorsabbá lehet tenni a progit? A PAUSÉknél kicsit sokat vár.
Tudom, még lehetne továbbfejleszteni, hogy pl. akkor is ellenõrizze, nincs-e ilyen fájl, ha újat adunk meg (ha mégis felül akarjuk írni, akkor sima ENTER-t kell nyomni), ill ha olyan file jön a magnóról, amiben pl. több . karakter is van, akkor is másolja le valami más néven a hibaüzi helyett. Talán majd egyszer azt is megcsinálom...
Szóval a sebességet lehetne még növelni? A Zzzip sajnos nem eszi meg ezt a progit...
-
Valami plusz 5letetek nincs, amivel még gyorsabbá lehet tenni a progit? A PAUSÉknél kicsit sokat vár.
Igen mert a COPY karakterenként olvas, ír, vagyis egy bájt átviteléhez roppant sok kód fut le...
Mindenképpen blokk mûveleteket érdemes használni. A magnó blokk mérete miatt mondjuk 4096 bájtos adagokban célszerû kezelni a cuccot, vagyis 4096 bájtot beolvasni az 1-es csatornáról, és aztán 4096-ot kiírni a 2-esre. Természetesen ha nem sikerült 4096 bájtot beolvasni, mert már nincs annyi a fájlban, akkor ki kell számolni mennyit sikerült, és annyit kell kiirni, majd kilépni a másolási cikklusból.
Sajnos erre nincs semmilyen Basic utasítás :-(
Így ezt egy pici gépi kódú betétben kell megirni (ALLOCATE :-) , CODE, CALL USR...).
Lõjem le a poént, vagy menni fog egyedül is? :-)
-
Lõjem le a poént, vagy menni fog egyedül is? :-)
Hát, a gépi kódú dolgokról annyi a fogalmam, mint a gép memóriakezelésérõl. Szóval ha nem túl nagy gond, megírnád, mit mire cseréljek ki a basic programomban? (Lehetõleg úgy, hogy az említett tervezett módosításokat is meg tudjam még utána csinálni, vagyis a fájlnevekkel idétlenkedést. Vagy ehhez újra kéne írni szinte az egész progit?)
-
Hát elméletileg valami ilyesmirõl van szó...
IN A,(0B1H)
PUSH AF
EXOS 24
LD L,A
LD A,C
OUT (0B1H),A
JR NZ,KILEP
MASOL LD A,1
LD DE,4000H
LD BC,4096
EXOS 6
LD DE,4000H
JR NZ,KILEP
LD A,2
LD BC,4096
EXOS 8
JR MASOL
LD L,A
PUSH HL
LD HL,4096
OR A
SBC HL,BC
PUSH HL
POP BC
POP HL
LD A,C
OR B
JR Z,KILEP
LD A,2
EXOS 8
KILEP LD A,1
EXOS 3
LD A,2
EXOS 3
IN A,(0B1H)
LD C,A
EXOS 25
POP AF
OUT (0B1H),A
LD H,0
RET
END
Az Asmon (legalábbis az 1.5-ös) nagyon rendes hozzánk, ha ezt lefordítjuk 4-es fejléccel, akkor ezt kapjuk:
1 ALLOCATE 80
2 CODE M=HEX$("DB,B1,F5,F7,18,6F,79,D3")
3 CODE =HEX$("B1,20,2B,3E,01,11,00,40")
4 CODE =HEX$("01,00,10,F7,06,11,00,40")
5 CODE =HEX$("20,1C,3E,02,01,00,10,F7")
6 CODE =HEX$("08,18,E8,6F,E5,21,00,10")
7 CODE =HEX$("B7,ED,42,E5,C1,E1,79,B0")
8 CODE =HEX$("28,04,3E,02,F7,08,3E,01")
9 CODE =HEX$("F7,03,3E,02,F7,03,DB,B1")
10 CODE =HEX$("4F,F7,19,F1,D3,B1,26,00")
11 CODE =HEX$("C9,00,00,00,00,00,00,00")
Így ezt már csak össze kell MERGE-zni az eredetivel, meg lecserélni a COPY-t a saját programunkra.
És aztán ki kéne próbálni, hogy azt csinálja-e amit gondolunk :-)
-
Az Asmon (legalábbis az 1.5-ös) nagyon rendes hozzánk, ha ezt lefordítjuk 4-es fejléccel, akkor ezt kapjuk:
Nem is tudtam, hogy az ASMON ilyet is tud!!! :shock:
Nagyon okos!
-
Nem is tudtam, hogy az ASMON ilyet is tud!!! :shock:
Nagyon okos!
Sejtettem, hogy neked tetszeni fog :-)
-
Így ezt már csak össze kell MERGE-zni az eredetivel, meg lecserélni a COPY-t a saját programunkra.
És aztán ki kéne próbálni, hogy azt csinálja-e amit gondolunk :-)
:smt041 :smt041 :smt041 :smt041 :smt041 :smt041 :smt041 :smt041 :smt041 :smt041
:mrgreen: :smt006 :smt026 :smt023 :smt040 :smt039 :smt026
-
Ez a nagy újjongás azt jelenti, hogy mûködik? :-)
-
Mûködik bizony!
Csak azt ne mondd, hogy te is a munkahelyeden dobtad össze a progit szabadidõdben:)
-
Csak azt ne mondd, hogy te is a munkahelyeden dobtad össze a progit szabadidõdben:)
Nem, ezt itthon, miközben vártam, hogy elkészüljön a vacsora :-)
-
sajnos a C2.BAS valami oknál fogva önkényesen csonkolja a fájlokat 4kB többszöröseinél
Anno nekem is rémlett ez a hiba, írtam is itt róla emlékeim szerint, de mások azt írták rá, hogy nincs azzal gond. Szerintem a HEX utáni hexadecimális számhalmazban lehet valami hiba, mert azt a részét nem értem a programnak. Nem lehetne rendbe tenni ezt a másolót? (Eleve arra van kihegyezve, hogy 4KB-onként másoljon, ezért talán a fájl végén az utolsó blokkot is 4KB-osnak akarná kezelni, de nem tudja, mivel kisebb.)
A CRC hiba kezelése talán nem lenne nehéz. WHEN-HANDLER blokkba kéne tenni a programot (ha még nem abban van, most nem néztem), és CRC hiba esetére megadni, mit csináljon.
Sajnálom, hogy így _csonka fájlok is lettek. Azokat a fájlokat majd újra be kéne olvasni. :oops:
-
Nem volt ebből későbbi verzió is? C3, C4, stb? :-) Na majd körbe nézek...
-
Nem volt ebből későbbi verzió is? C3, C4, stb? :-) Na majd körbe nézek...
Én ezt (https://enterpriseforever.com/basic/masoloprogram-irasa/msg5471/#msg5471) ajánlottam Dr.Og-nak. Az a baj, a fórumon a kereső a c2.bas-t sem dobta ki, ezért is vont nehéz megtalálni. Amennyire olvasgattam ott, ahol linkeltem, nem találtam későbbi verziót, legalábbis abban a topikban egy darabig nem, utána más témák jöttek elő. Hacsak később vissza nem tértünk rá...
-
...
Sajnálom, hogy így _csonka fájlok is lettek. Azokat a fájlokat majd újra be kéne olvasni. :oops:
Részemről nem probléma!