- 1 - V Kladně 3.6. 1988 Vážená redakce! Protože se v záplavě různých programů, které uveřejňujete,nepří- liš často objevuje značka SORD m.5, rozhodli jsme se, přispět i my se svou troškou do mlýna. Následuje příspěvek s přiloženými listingy programů: Video ram disk pro assembler EDTASM =================================== Každý uživatel, který píše programy ve strojovém kódu za pomoci programu "EDTASMv80", potvrdí, že archivování zdrojových textů na kazetě v takové formě, jak je produkuje EDTASM není příliš efektivní a spolehlivé. Je-li pak ještě zdrojový text dostatečně dlouhý, nelze program překládat přímo do paměti RAM, ale musí se překládat na magnetofon s dálkovým ovládáním a odtud lze teprve přemístit přeložený program do paměti RAM. Tyto dva základní ne- dostatky odstraňuje nové zařízení "VRM:", které lze přirovnat k disketové jednotce s kapacitou 10222 bytů s možností uložit jen jeden datový soubor.EDTASM umí na disk překládat,zapisovat a umí z něho samozřejmě i načítat.Obsah disku lze zaznamenat na magne- tofon a zpětně jej z magnetofonu zaplnit,což lze srovnat s výmě- nou diskety. Disk zaznamenaný na magnetofonu má formu souvislých dat (.VM),což je oproti původnímu záznamu nesouvislých dat (.DT) velká výhoda,především pak v délce záznamu.VRAM disk je umístěn, jak už z jeho názvu vyplývá, v prostoru ve video paměti, který není v režimu TEXT využit. To uživatele částečně omezuje - nesmí používat režim jemné grafiky během práce s diskem. Této podmínce lze ale snadno vyhovět.Protože lze předpokládat,že uživatel bude chtít využívat většinu jemu nabízených možností práce, byl k ov- ladači vytvořen také řídící program v jazyce Basic-F, který ve spolupráci s ovladačem zařízení VRM předkládá uživateli MENU, ve kterém mu nabízí šest základních funkcí. První dvě funkce slouží ke vstupu do EDTASMu, další dvě funkce umožňují výměnu pomyslné diskety,funkce 5 potom přesunuje přelo- žený program do paměti RAM a funkce 6 slouží k zobrazení zdrojo- vého textu.Obě poslední funkce pracují jak s diskem tak i s mag- netofonem ( z magnetofonu lze zobrazit pouze soubor typu .DT ). Dále bylo potřeba upravit vlastní EDTASM tak, aby nepřepisoval tabulkami ovladač. Ručně to lze vyřešit tak,že se vždy po vstupu do EDTASM zadá Usrorg=FBFF,nebo tak,že se do EDTASMu "napoukuje" několik změn. Basic-F umožňuje využívat u zařízení,které si nadefinuje progra- mátor tyto funkce: OPEN, CLOSE, PUT, GET, PRINT, INPUT, APPEND a FIND. Protože EDTASM z nich využívá jen první čtyři,je i ovladač disku o něco chudší.Jelikož EDTASM ignoruje při zápisu přetečení disku, hlásí jej přímo ovladač. Totéž platí i pro čtení z disku. - 2 - Postup práce ============ Nejprve si musíme vytvořit ovladač VRM pomocí stávajícího assem- bleru.Použijeme-li k tomu EDTASMv80, musíme nejprve odeslat pří- kaz 'O' a zadat 'FBFF' a teprve potom můžeme napsat a odladit program.Pokud jsme opsali listing zdrojového textu bezchybně,mu- sí souhlasit všechna návěstí v programu. Pokud je tomu tak, lze (po nezbytném zazálohování na kazetu) provést vlastní test hand- leru několika následujícími příkazy: (Pozn. program je již přeložený v paměti a nalézáme se v basiku) END - kvůli smazání proměnných CALL &FC00 - na dotaz 'Initialize VRM: ?' odpovíme kladně. LEN 12 OPEN "VRM:DATA" FOR OUTPUT AS #3:PUT #3 "POKUSNY TEXT":CLOSE #3 Nyní jsou ve VRAMDISKU zapsaná data. Přečteme je příkazem: OPEN "VRM:?" FOR INPUT AS #3:GET #3 A$:PRINT A$:CLOSE #3 Musí se vytisknout 'Find "DATA.DT"' a na následující řádek data. Při pokusu zapsat nebo načíst data pomocí příkazu PRINT a INPUT, se musí vždy vypsat chybové hlášení. Dále vyzkoušíme vypisování MENU příkazem CALL &FC03. MENU by mělo reagovat pouze na stisk kláves 1 až 7 odchodem do basiku. Pokud je tedy vše jak má být, vstoupíme opět do assembleru, zaarichivujeme si zdrojový text a program znovu přeložíme do paměti ( to proto, aby se inicializo- valy všechny jeho proměnné) a potom jej nahrajeme na kazetu prí- kazem: SAVE "VRM hand",&FC00,&FEFF,&FC00. Nyní přistoupíme k vy- tvoření řídícího programu v jazyce Basic-F. Před vlastním napsa- ním programu odešleme nejprve příkazy TYPE INT a NEW. Máme-li program napsaný, můžeme jej odladit. Po RUN se zkontrolují první a poslední bajty programů ve strojovém kódu, EDTASMu a VRM hand- leru. V případě neshody se nahrají z magnetofonu. Nahraje-li se VRM handler,je uživatel dotázán na inicializaci disku.Kladná od- pověď zaplní celý disk nulami a zařadí jej do tabulky zařízení, záporná odpověď disk pouze zařadí do tabulky zařízení. Následuje dotaz 'RF?' na nahrávací rychlost, s jakou se bude provádět pří- padný záznam na magnetofon. Poté se vypíše MENU a uživatel musí zadat jedno z čísel 1 az 7 ( 7 = odchod do basiku ). Při volbě 1 ještě musí odpovědět, zda-li si je tím jistý (úplná inicializace assembleru EDTASM ). Je-li u některých zbývajících voleb dotázán na jméno, stiskem samotného <RETURN> se dosadí za jméno "?". Pro odladění doporučuji následující postup: volíme nejprve vstup do EDTASMu (2). V assembleru máme stále ještě zdrojový text - nyní jej zapíšeme na disk příkazem 'WVRM:VRMHND' . Opustíme assembler ( vypíše se MENU ) a zadáme volbu 6 - Listing.Na následující do- taz odpovíme záporně - chceme výpis z 'VRM:' . Začne se provádět listing zdrojového textu. Můžeme si jej kdykoli zastavit stiskem klávesy <SPACE> a dalším stiskem ve výpisu pokračovat. Po skon- čení výpisu počítač pípne a očekává stisk nějaké klávesy. Dále doporučuji vyzkoušet volbu 3 a 4 a úplně nakonec volbu 1. V "čistém" EDTASMu nyní zadáme příkaz 'LVRM:?' a z disku se nám nahraje zdrojový text - v případě, že tam již není je ohlášeno 'Function canceld'. Jsme-li se svou prací spokojeni,nahrajeme si - 3 - tedy basický program příkazem SAVE"ASMVRMv80"#1.Nyní přistoupíme k vlastní úpravě programu EDTASMv80.CM. Nahrajeme jej celý znovu z kazety a aniž by byl spuštěn, odešleme následující příkazy: POKE &83EA,0,0,0 POKE &83EE,0,0,0 POKE &8233,&FE,&FB,&FF,FB - Usrorg na &FBFF. POKE &9319,86,82,77,58,63,63 - implicitní jméno je 'VRM:?' POKE &845C,62 - prompt POKEW &8408,&84B0 - pro vypsání úvodního hlášení SAVE "ASMv&8000",&8000,&AE41 - zaznamenat CALL &8000 - a spustit Pokud jsme udělali vše správně, vytiskne se v této chvíli úvodní hlášení firmy Microsoft a vypíše se prompt ">".Odesláním příkazu assembleru 'O' se musí vypsat mezi následujícími sděleními i ta- to - 'Last=FBFE' a 'Usrorg=FBFF'.Nyní nám už nezbývá než opustit EDTASM a pomocí některého kopírovacího programu nahrát programy za sebe v pořadí 1. ASMVRMv80.BF 2. ASMv&8000.CM 3. VRM hand.CM a tím jsme hotovi. Věřím, že "VRM handler" usnadní a zpříjemní mnohým uživatelům práci a přispěje ke vzniku dalších užitečných programů na počí- tač SORD m.5. Poznámka: Existuje i ovladač "VRAM DISK.CM", který má všechny výše uvedené funkce nabízené Basikem-F,avšak neobsahuje v sobě MENU a hlášení přetečení. - 4 - Výpis basického programu ======================== Poznámka: řídící znaky ( vložit pomocí CTRL+SHIFT+ZNAK ) jsou podtrženy 10rem 20 clear,&7FFF:on error gosub 180:poke &701A,145:len 9:print "TZTU":view:cls: if peekw(&8000)<>&F6C3 or peekw(&AE3E)<>&BD67 then print "LOADING ASSEMBLER . ..W":old "ASM?":print 30 if peekw(&FC00)<>&0318 or peekw(&FEFB)<>&4C48 then print "WLOADING VRM: HA NDLER ...W":old "VRM?":print 40$R:A$=right$(hex$(peek(&7019)),2):print "WRF? &";A;"ßß";:input,A$: A=val("&"+A$):if A<&12 or A>&25 then goto 40 else poke &7019,A 50$A:call &FC03:A=val(chr$(peek(&FC02))):print"W":on A gosub 60,70,80,90,100, 130,190:goto 50 60 input "Are you sure" A$:if A$="Y" then call &8000:return 70 call &8003:return 80 gosub 150:vsave A$,0,vpeek(16)+256*vpeek(17):return 90 gosub 150:old A$:return 100 gosub 160:get #3 I$,D$,A:pokew &800A,A:goto 120 110 pokew &800D,A:get #3 I$,D$,A:print hex$(A),:if ascii(I$)=2 then close #3: gosub 150:print "WSAVE";chr$(34);A$;chr$(34);",&";hex$(peekw(&800A));",&";hex $(peekw(&800D));",&";hex$(A):end 120 for I=1 to ascii(D$)-2:get #3 K$:poke A,ascii(K$):A=A+1:next:goto 110 130 gosub 160:repeat:get #3 I$:print I$;:if inkey$=" " then repeat: until inkey$<>"" 140 until I$="Z":print "ZG":close #3:repeat:until inkey$<>"":return 150 input "WName" A$:return 160 input "From CMT: [Y] or VRM: [N] " A$:print:if A$="Y" then A$="CMT:?" els e A$="VRM:?" 170 open A$ for input as #3:len 1:return 180 if errl$="R" then resume else if err=25 then A$="?":resume else if err=18 then print "WGTAPE ERROR!" else print "Err";err;"in";errl 190 pokew &73CF,0:end ASSEMBLER Saturday 21-May-88 20:05:32 Page 1 ; VRMHND Listing 1 ; *** VIDEO RAM DISK HANDLER *** 2 ; OVLADAC NOVEHO ZARIZENI "VRM:" ( "VRM hand.CM" ) 3 ; PRIZPUSOBENY PRO PRACI S ASSEMBLEREM "EDTASMv80". 4 ; ZARIZENI VRM LZE OTEVRIT, ZAVRIT A LZE POUZIT 5 ; PRIKAZY PUT A GET. OSTATNI PRIKAZY POUZIT NELZE, 6 ; PROTOZE NEJSOU POTREBNE ( EDTASM JE NEPOUZIVA ) 7 ; A TENTO OVLADAC SE SNAZI BYT CO NEJKRATSI. 8 ; 9 ; (C) LZR Soft, MAY 1988 10 ; 11 ORG 0FC00H 12 DSPLTA EQU 105CH ;TISK TEXTU 13 DSPLTB EQU 105BH 14 DSPCHB EQU 1082H ;TISK ZNAKU 15 PADVRM EQU 0E01H ;PLNENI VRAM 16 MVACS EQU 13DDH ;CURSOR(D,E) 17 STCCHR EQU 0E55H ;DEFINOVANI ZNAKU 18 VIEWP EQU 135CH ;NASTAVENI OKENKA 19 VIEWRS EQU 1353H 20 PB EQU 0010H ;PUT BYTE TO VRAM 21 GB EQU 0018H ;GET BYTE FROM VRAM 22 VRECORD EQU 5EE5H ;POUZE PRO FX: 23 VFIND EQU 6146H ;SEPARATORY V PRINT 24 FLAG EQU 708EH ;PRIZNAKY 25 TOP EQU 2800H ;POSLEDNI ADRESA DISKU 26 ACECHI EQU 0845H ;NACTENI ZNAKU 27 GTCAPC EQU 0085H ;KONVERZE NA VELKA PISMENA 28 ID EQU 7120H ;HLAVICKA SOUBORU 29 TPFILE EQU 73D1H ;IMPLICITNI SOUBOR 30 PRVNI EQU 18 ;PRVNI VOLNY BYTE VRAMDISKU 31 ;-------------------------------------------------- 32 START1: JR INIT ;STUDENY START 33 ANSW: DB 0 ;ODPOVED PRO BASIC 34 START2: JR MENU ;HORKY START 35 INIT: LD HL,TXIN ;INICIALIZACE OBRAZOVKY 36 CALL DSPLTA ;A TISK UVODNI HLASKY 37 CALL ACECHI ;NACTENI ZNAKU 38 CALL GTCAPC 39 CP 32 ;NENI-LI TO RIDICI ZNAK, 40 CALL NC,DSPCHB ;TAK HO VYTISKNI 41 CP 'Y' ;INICIALIZACE? 42 LD A,0 ;CO 43 LD HL,0 ;ODKUD 44 LD BC,TOP ;KOLIK 45 CALL Z,PADVRM ;ZAPLN VRAM 46 JR INIST 47 MENU: LD HL,XINIT 48 CALL DSPLTA ;INICIALIZACE OBRAZOVEK 49 CALL DSPCHB ;TISK CTRL ZNAKU 50 PUSH HL ;USCHOVA ADRESY KDE TISK SKONCIL 51 LD BC,0501H 52 LD HL,XCHR 53 CALL STCCHR ;PREDEFINOVANI 5TI ZNAKU 54 LD HL,071FH 55 LD DE,0010H 56 CALL VIEWP ;NASTAVENI OKENKA 57 POP HL ;ODKUD TISKNOUT 58 CALL DSPLTA ;TISK MENU 59 PUSH HL 60 CALL VIEWRS ;ZRUSENI OKENKA 61 LD DE,0D10H 62 CALL MVACS ;UMISTENI KURZORU 63 POP HL 64 CALL DSPLTA ;TISK DOTAZU 65 MENU1: CALL ACECHI ;VOLBA 66 CP '1' 67 JR C,MENU1 ;MALO->ZPET 68 CP '8' 69 JR NC,MENU1 ;MOC->ZPET 70 LD (ANSW),A ;USCHOVA PRO BASIC 71 CALL DSPCHB ;TISK CISLICE 1 AZ 7 72 ;-------------------------------------------------- ASSEMBLER Saturday 21-May-88 20:05:32 Page 2 ; VRMHND Listing 1 INIST: DI ;PRIPOJENI 'VRM:' K .BF 2 LD HL,DEFDEV 3 LD (73CFH),HL 4 RET 5 ;-------------------------------------------------- 6 DEFDEV: DB 0 ;BEZNE ZARIZENI 7 DW 0 ;POSLEDNI ZARIZENI 8 DM 'VRM' ;JMENO ZARIZENI 9 ; 10 ; DEFINOVANI RUTIN PRO VYKONAVANI JEDNOTLIVYCH PRIKAZU 11 ; 12 DW VOPEN,VCLOSE,VPRINT,VPUT 13 DW VINPUT,VGET,VRECORD,VFIND 14 EPOI: DW 0 ;UKAZATEL KONCE DAT 15 COUNT: DW 0 ;POCITADLO DAT 16 ;------------------------------------------------------ 17 ; 18 ; **** RUTINA 'OPEN' **** 19 ; 20 VOPEN: CALL CEPO ;OBNOVA EPOI 21 LD A,10H ;"FOR INPUT" 22 CALL SYSFMT 23 LD A,D ;"OPEN FOR..." 24 CP 22H ;"INPUT" ? 25 JR NZ,NOINP ;NE->VEN 26 LD HL,(EPOI) 27 LD A,H 28 OR L ;PRAZDNI DISK ? 29 LD A,170 30 SCF 31 RET Z ;ANO -> Err 170 in ... 32 LD A,40H ;POZADAVEK .DT 33 LD (TPFILE),A 34 LD HL,0 35 RST GB ;NAHRANY TYP 36 CALL 48D2H ;KONVERZE 37 LD C,A 38 LD A,(TPFILE) 39 AND C ;SROVNANI 40 OPERR: LD A,106 41 SCF 42 RET Z ;NENI .DT -> Err 106 in ... 43 CALL EXVMCM 44 LD HL,1 ;OD JMENA 45 LD DE,ID+18 ;KAM 46 PUSH DE 47 LD B,9 ;KOLIK 48 CALL 144BH ;VM --> CM 49 XOR A 50 LD (DE),A ;VZDY UKONCENE 51 POP DE ;1. JMENO 52 LD HL,ID+1 ;2. JMENO 53 CALL 1765H ;SROVNEJ 54 CALL EXVMCM ;VRAT JMENO 55 LD A,170 56 RET C ;"Err 170 in ..." MISTO "Skip ..." 57 CALL EXVMCM 58 CALL 6A4DH ;"Find ..." 59 CALL EXVMCM 60 JR OSET 61 NOINP: CP 31H ;"OUTPUT" ? 62 JR NZ,NOOUT ;NE->VEN 63 CALL TYPDT 64 JR Z,OPERR ;JINY NEZ .DT 65 CALL EXVMCM 66 LD HL,TOP ;K DISPOZICI JE 67 LD (EPOI),HL ;CELY DISK 68 LD HL,FLAG 69 RES 4,(HL) ;BYLO "FOR OUTPUT" 70 OSET: LD HL,PRVNI ;ZACATEK DAT 71 OZAP: LD (COUNT),HL ;DO CITACE 72 LD HL,0 ;JMENO VM --> CM ASSEMBLER Saturday 21-May-88 20:05:32 Page 3 ; VRMHND Listing 1 LD DE,ID 2 LD B,18 3 CALL 144BH 4 OR A 5 RET 6 NOOUT: ;NEBYLO ANI "FOR INPUT" ANI "FOR OUTPUT" 7 CHYPR: LD A,69H ;CHYBNY PRISTUP 8 SCF 9 RET ;Err 105 in ... 10 ; 11 ; **** RUTINA 'CLOSE' **** 12 ; 13 VCLOSE: LD A,(FLAG) 14 BIT 4,A ;BYL "INPUT" ? 15 JR NZ,NULSYS ;ANO 16 LD HL,(COUNT) ;KAM DOCITAL 17 CALL ZEPO ;ZAPISE 18 NULSYS: XOR A 19 LD (FLAG),A ;NOVE KOLO 20 RET 21 ZEPO: LD (EPOI),HL 22 CALL EXVMCM 23 LD (ID+16),HL ;ZA HLAVICKU 24 CALL EXVMCM 25 RET 26 CEPO: CALL EXVMCM 27 LD HL,(ID+16) ;VYBER 28 LD (EPOI),HL ;A ZAPIS 29 CALL EXVMCM 30 RET 31 SYSFMT: PUSH HL 32 LD HL,FLAG 33 OR (HL) ;SETOVANI BITU 34 LD (HL),A ;A ZAPIS BYTU 35 POP HL 36 RET 37 EXVMCM: EX AF,AF' ;ZAMENA JMENA V RAM A VRAM 38 EXX 39 LD B,18 40 LD HL,0 41 LD DE,ID 42 EVC: RST GB 43 LD C,A 44 LD A,(DE) 45 RST PB 46 LD A,C 47 LD (DE),A 48 INC HL 49 INC DE 50 DJNZ EVC 51 EXX 52 EX AF,AF' 53 RET 54 TYPDT: LD A,(ID) ;TEST TYPU SOUBORU 55 BIT 2,A 56 RET 57 ; 58 ; **** RUTINA 'PUT' **** 59 ; 60 VPUT: LD DE,(COUNT) ;KAM 61 CALL 6BE2H ;TEST "FOR..." 62 EX DE,HL 63 LD C,0 ;CM --> VM 64 CALL SPACE ;PRESUN 65 EX DE,HL 66 LD (COUNT),DE ;ZAPIS KONCE 67 RET 68 ; 69 ; **** RUTINA 'GET' **** 70 ; 71 VGET: LD DE,(COUNT) ;ODKUD 72 EX DE,HL ASSEMBLER Saturday 21-May-88 20:05:32 Page 4 ; VRMHND Listing 1 CALL 6BEAH ;TEST "FOR..." 2 LD C,1 ;VM --> CM 3 CALL SPACE ;PRESUN 4 LD (COUNT),HL ;ZAPIS KONCE 5 EX DE,HL 6 RET 7 ROZDIL: PUSH HL 8 PUSH BC 9 LD BC,(EPOI) ;MEZ 10 OR A 11 SBC HL,BC ;CY=CITAC<MEZ 12 POP BC 13 POP HL 14 RET 15 SPACE: CALL ROZDIL 16 JR NC,SP2 ;PRETEKL 17 BIT 0,C ;TEST SMERU 18 JR Z,SP1 ;PUT 19 RST GB 20 LD (DE),A 21 JR SP2 22 SP1: LD A,(DE) 23 RST PB 24 SP2: INC DE ;POSUN CITACU 25 INC HL 26 DJNZ SPACE 27 DEC HL ;KOREKCE 28 CALL ROZDIL ;TEST PRETECENI 29 INC HL ;NAVRACENI 30 CCF 31 RET NC ;VPORADKU 32 LD A,(FLAG) 33 BIT 7,A ;BYLO VYTISTENO? 34 RET NZ ;ANO 35 SET 7,A ;BUDE TISK 36 LD (FLAG),A 37 PUSH HL 38 LD HL,XOVE 39 CALL DSPLTA 40 POP HL 41 RET 42 ; 43 ; **** RUTINY 'INPUT' A 'PRINT' **** 44 ; 45 VINPUT: ;TYTO PRIKAZY HANDLER NEZNA 46 VPRINT: LD A,105 47 SCF 48 RET ;Err 105 in ... 49 XVOE: DB 'No space',13 50 TXIN: DB 20,26,20,21,23,23,24,'Initialize VRM: ? ',0 51 XINIT: DB 26,20,26,20,21,12,0,32,1,2,3,4,5,0 52 DB '+------------------------+',29,29,31,'|' 53 DB '| Initialize EDTASM 1 |',29,29,31,'|' 54 DB '| Into EDTASM',9,9,29,29,'2 |',29,29,31,'|' 55 DB '| Save VRM: to CMT: 3 |',29,29,31,'|' 56 DB '| Fill VRM: from CMT: 4 |',29,29,31,'|' 57 DB '| Make final .CM',9,29,29,'5 |',29,29,31,'|' 58 DB '| Listing',9,9,29,29,'6 |',29,29,31,'|' 59 DB '+------------------------+',0 60 DB 'Your choice ? ',0 61 XCHR: DB 0,8CH,80H,84H,0ECH,0,0,0,0DCH,90H,9CH,14H 62 DB 0D0H,0,0,0,4,84H,4,0,84H,0,0,0,0C0H,0,0DCH 63 DB 54H,0DCH,0,0,0,68H,48H,6CH,48H,4CH,0,0 64 ZZZZZ: ; 65 ; 66 ; ZNAKY V MENU '+' , '-' A '|' NAHRADTE GRAFICKYMI SYMBOLY 67 ; 68 END START ASSEMBLER Saturday 21-May-88 20:05:32 Page 5 ; VRMHND Symbol table Name Address Type Name Address Type ACECHI 0845 E ANSW FC02 L CEPO FD27 L CHYPR FD04 L COUNT FC84 L DEFDEV FC6C L DSPCHB 1082 E DSPLTA 105C E DSPLTB 105B E EPOI FC82 L EVC FD46 L EXVMCM FD3C L FLAG 708E E GB 0018 E GTCAPC 0085 E ID 7120 E INIST FC64 L INIT FC05 L MENU FC25 L MENU1 FC53 L MVACS 13DD E NOINP FCDA L NOOUT FD04 L NULSYS FD15 L OPERR FCAD L OSET FCF1 L OZAP FCF4 L PADVRM 0E01 E PB 0010 E PRVNI 0012 E ROZDIL FD7E L SP1 FD97 L SP2 FD99 L SPACE FD8A L START1 FC00 L START2 FC03 L STCCHR 0E55 E SYSFMT FD34 L TOP 2800 E TPFILE 73D1 E TXIN FDC5 L TYPDT FD53 L VCLOSE FD08 L VFIND 6146 E VGET FD6C L VIEWP 135C E VIEWRS 1353 E VINPUT FBB8 L VOPEN FC86 L VPRINT FDB8 L VPUT FD59 L VRECORD 5EE5 E XCHR FED7 L XINIT FDDF L XVOE FDDC L ZEPO FD1A L ZZZZZ FEFF L *** Assembler statistics *** Errors detected: 00000 Document lenght: 17CF/ 06095 Bytes Working area: 2FBD/ 12221 Bytes Final file size: 0300/ 00768 Bytes Datum poslední editace: 3. 6. 1988 ========== Článek napsal Roman Štec z teamu LZR Soft ===========