Enterprise Forever

:HUN => Programozás => BASIC => Topic started by: szipucsu on 2006.October.16. 18:05:28

Title: Másolóprogram írása
Post 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...
Title: Re: Másolóprogram írása
Post by: Zozosoft on 2006.October.16. 18:53:18
Quote from: "szipucsu"

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? :-)
Title: Re: Másolóprogram írása
Post by: szipucsu on 2006.October.16. 19:35:27
Quote from: "Zozosoft"

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?)
Title: Re: Másolóprogram írása
Post by: Zozosoft on 2006.October.16. 20:03:34
Hát elméletileg valami ilyesmirõl van szó...
Code: [Select]

                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:
Code: [Select]
   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 :-)
Title: Re: Másolóprogram írása
Post by: Povi on 2006.October.16. 20:40:59
Quote from: "Zozosoft"
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!
Title: Re: Másolóprogram írása
Post by: Zozosoft on 2006.October.16. 20:45:49
Quote from: "Povi"
Nem is tudtam, hogy az ASMON ilyet is tud!!! :shock:
Nagyon okos!

Sejtettem, hogy neked tetszeni fog :-)
Title: Re: Másolóprogram írása
Post by: szipucsu on 2006.October.17. 11:56:57
Quote from: Zozosoft
Í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
Title: Re: Másolóprogram írása
Post by: Zozosoft on 2006.October.17. 13:35:50
Ez a nagy újjongás azt jelenti, hogy mûködik? :-)
Title: Re: Másolóprogram írása
Post by: szipucsu on 2006.October.17. 21:03:45
Mûködik bizony!

Csak azt ne mondd, hogy te is a munkahelyeden dobtad össze a progit szabadidõdben:)
Title: Re: Másolóprogram írása
Post by: Zozosoft on 2006.October.17. 21:23:03
Quote from: "szipucsu"
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 :-)
Title: Re: Másolóprogram írása
Post by: szipucsu on 2019.April.17. 11:41:31
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:
Title: Re: Másolóprogram írása
Post by: Zozosoft on 2019.April.17. 11:52:16
Nem volt ebből későbbi verzió is? C3, C4, stb? :-) Na majd körbe nézek...
Title: Re: Másolóprogram írása
Post by: szipucsu on 2019.April.17. 12:03:31
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á...
Title: Re: Másolóprogram írása
Post by: Dr.OG on 2019.April.17. 18:27:01
...
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!