Page 11 - Enterpress Magazin - 2021. 4-6.
P. 11

2021. július – december                                                                         11. oldal



                                             Memcopy











                       Írta: Persa Noel
                       (geco)



        Ez a kis példaprogram rajzol néhány kört az 1-es csator-  akár két csatorna között is lehetne másolni, vagy épp a
        nára, lefoglal egy memóra szegmenst, lementi az 1-es  fenti programot átalakítani, hogy megjelenítés előtt lehes-
        csatorna tartalmát, majd törli az 1-es csatorna tartalmát,  sen már menteni.
        billentyűre vár, majd billentyű lenyomása után visszaállítja
        a köröket az 1-es csatornára.

        A program leírása:

        120 CODE GETMEM=HEX$(„f7,18,26,00,69,c9”) ;gépi kód
        1 memória szegmens lefoglalására, ide lesz lementve a
        videólap tartalma
        130 CODE BCKMEM=HEX$(„4d,f7,19,c9”) ;gépi kód a le-
        foglalt szegmens felszabadítására, hogy visszaadjuk azt az
        EXOS-nak a futás végén
        140 CODE COPY=HEX$(„f3,db,b1,f5,d... ;gépi kód, ez vég-
        zi az oda-vissza másolást
        140-147 videó lap definiálása, megnyitása, megjelenítése,
        majd körök rajzolása
        150 kérünk 1 16KB-os szegmenst az EXOS-tól, a szeg-
        mens száma a SEG változóba kerül                      100 PROGRAM ”memcopy.bas”
        160 SAV változó beállítása, ha SAV+SEG-gel hívjuk meg a  110 ALLOCATE 6+4+65
        másoló rutint, akkor lementjük a videómemória tartalmát  120 CODE GETMEM=HEX$(„f7,18,26,00,69,c9”)
        170 REST változó beállítása, ha SAV+SEG-gel hívjuk meg a  130 CODE BCKMEM=HEX$(„4d,f7,19,c9”)
        másoló rutint, akkor visszaállítjuk annak tartalmát   140 CODE COPY=HEX$(„f3,db,b1,f5,db,b2,f5,
        180 CALL USR(COPY,SAV+SEG) ;videólap tartalmának le-      db,b3,f5,7d,d3,b1,e5,2a,f4,bf,11,14,
        mentése                                                   00,19,5e,2c,56,eb,7c,e6,c0,07,07,f6,
        181 CLEAR #1: ;videólap törlése                           fc,d3,b2,3c,d3,b3,cb,fc,cb,b4,11,00,
        182-183 billentyűre várakozás                             40,f1,07,30,01,eb,01,e0,3d,ed,b0,f1,
        185 CALL USR(COPY,REST+SEG) ;videólap tartalmának         d3,b3,f1,d3,b2,f1,d3,b1,fb,c9”)
        visszaállítása                                        141 SET VIDEO X 40:SET VIDEO Y 22:SET VIDEO
        190 CALL USR(BCKMEM,SEG) ;lefoglalt memória szeg-         MODE 1:SET VIDEO COLOUR 2
        mens visszaadása                                      142 OPEN #1:”video:”
                                                              143 DISPLAY #1:AT 1 FROM 1 TO 22
        A fenti programnak a limitációja annyi, hogy max 40x22  144 FOR I=1 TO 50
        méretű képet képes kezelni, mert a 40x23 már túllépi  145   SET #1:INK I
        a16KB-ot, és a másolandó bájtok számát a kódban kell  146   PLOT #1:640,398,ELLIPSE I*8,I*8
        manuálisan beállítani,                                147 NEXT I
                                                              150 LET SEG=USR(GETMEM,0)
        40x22 esetén : 01,e0,3d (ld bc,3de0h) (dec: 15840)    160 LET SAV=0
        36x25 esetén: 01,48,3f (ld bc,3f48h) (dec: 16200)     170 LET REST=128*256
        méret  kiszámítása  X*Y*9*2,  ezt  át  kell  váltani  hexába,  180 CALL USR(COPY,SAV+SEG)
        majd az alacsony helyiértéket betenni a 01 mögé, és az-  181 CLEAR #1:
        tán a magas helyiértéket.                             182 GET A$
                                                              183 IF A$=”” THEN 182
        EXOS hívásokkal megoldható lenne már a csatorna meg-  185 CALL USR(COPY,REST+SEG)
        nyitása után megtudni a méretet, és a kezdőpozíciót, így  190 CALL USR(BCKMEM,SEG)
   6   7   8   9   10   11   12   13   14   15   16