O P U S O P E R A T I N G S Y S T E M CUPRINS 1. Introducere 2. Optiuni principale 3. Comenzi OPUS 4. Monitorul OPUS 4.1 Utilizare generala 4.2 Dezasamblorul OPUS 4.3 Rularea codului masina 4.4 Comenzile monitorului 5. Asamblorul OPUS 5.1 Introducerea si editarea textelor 5.1.1 Formatul general 5.1.2 Constante 5.1.3 Operatori 5.1.4 Expresii 5.1.5 Directive de asamblare 5.1.6 Ecran-editorul 5.2 Comenzile asamblorului 5.3 Stocarea fisierelor 6. Basic decoderul 7. Utilizarea imprimantei 8. Harta memoriei OPUS 9. Variabile de sistem 10. Subrutine OPUS utile 10.1 Afisari pe ecran 10.2 Conversii 10.3 Teste 10.4 Citiri de la tastatura 10.5 Lucrul cu caseta 10.6 Sunete 10.7 Subrutine speciale 11. Copierul OPUS Anexa 1. Coduri de erori Anexa 2. Cuvinte rezervate 1. I N T R O D U C E R E OPUS contine un asamblor de mare viteza in doi pasi proiectat pentru a permite reprezentarea simbolica a codului masina, un dezasamblor in doi pasi ca- pabil sa genereze fisiere sursa si un monitor bazat pe un ecran-editor. Deci se pot edita programe in cod Z80 (limbaj de asamblare), modifica texte afisate pe ecran, trece in revista si manipula locatii de memorie sau se pot face unele calcule hexazecimale. 2. O P T I U N I P R I N C I P A L E Din pagina initiala afisata pe ecran se constata ca OPUS are trei parti principale: - monitor Prin simpla apasare a tastei corespunzatoare se intra in - asamblor modul dorit. Reintoarcerea in pagina initiala se face - copier prin apasarea tastei <Q>. 3. C O M E N Z I O P U S O comanda consta dintr-o litera urmata de obicei de pina la trei parame- tri. Parametrii numerici sint constante zecimale sau hexazecimale. Intotdeauna parametrii numerici modifica parametrii predefiniti pentru comanda. Daca vrem sa modificam al doilea sau al treilea parametru,cei anteriori raminind neschimbati, se introduce o virgula pentru fiecare parametru nemodificat. Ca separator intre constante se utilizeaza blancul. Predefinit, monitorul considera parametrii ca fiind hexazecimali, iar asamblorul ii considera zecimali. Pentru a indica tipul invers de parametru, se prefixeaza parametrii zecimali cu "$" iar cei hexazeci- mali cu "#". 4. M O N I T O R U L O P U S 4.1 Utilizare generala Cu aceasta parte a OPUS-ului se poate trece in revista si modifica direct continutul memoriei. Atentie sa nu distrugeti un eventual fisier sursa al asam- blorului sau variabile sistem. Trebuie avut in vedere ca in acest mod parametrii sint hexazecimali, asa ca cei zecimali trebuie prefixati cu semnul lirei. Cu comanda R se poate vizualiza continutul registrelor utilizator la intoar- cerea din executia codului masina. 4.2 Dezasamblorul OPUS Cu comanda D urmata de un parametru, continutul memoriei e dezasamblat si a- fisat pe ecran in mod uzual. Cu comanda N se pot crea fisiere sursa pentru asam- blorul OPUS. Comanda nu necesita parametri. Acestia vor fi furnizati ulterior la cererea dezasamblorului, prin "FIRST" si "LAST"; daca se apasa ENTER, predefinit se considera 0000 si nu se va intimpla nimic. Dupa aceasta se va cere "DISP", pentru a se genera codul sursa care sa ruleze de la o alta adresa decit cea de la care e dezasamblat codul. Se va introduce deplasarea relativa a adresei de rulare fata de adresa de la care e dezasamblat codul. Cu ENTER se considera va- loarea 0 si sursa va rula de la adresa la care se afla codul. La intrebarea TEXT se va da adresa la care va fi memorat fisierul sursa generat; daca nu exista alt fisier se recomanda valoarea #6000; daca insa exista un alt fisier si nu se do- reste distrugerea lui, ii trebuie aflat mai intii sfirsitul. Apasind doar ENTER nu se genereaza fisier sursa. WORK SPACE necesita o adresa pentru spatiul de lucru al dezasamblorului. Apasind doar ENTER, se considera valoarea #F000. Urmatoarele perechi FIRST si LAST marcheaza portiunile din memorie ce nu vor fi dezasamblate, considerindu-se zone de memorare a datelor. Pot exista mai mul- te zone, astfel incit pentru iesirea din aceasta bucla trebuie raspuns cu ENTER la ambele cereri. Ultima cerere este LIST. La raspunsul "Y", un listing al codu- lui dezasamblat va fi afisat pe ecran in timpul dezasamblarii. Raspunsul cu alta tasta nu va genera listing. Cind se va termina dezasamblarea, adresa de sfirsit a fisierului sursa generat va fi afisata. Textul sursa generat poate fi manipu- lat cu asamblorul OPUS dupa cum se descrie la cap.5 Etichetele vor fi marcate cu "L" si adresa de origine (Ex. LE000). Salturi- le absolute sau relative (JP sau JR) si apelurile de subrutine (CALL) vor avea etichete in loc de adrese, considerind ca toate adresele la care se refera sint in interiorul blocului dezasamblat. 4.3 Rularea codului masina Codul masina poate fi rulat cu comanda E. Codul va fi rulat dupa ce in regis trele microprocesorului se incarca registrele utilizator din variabilele sistem. Reintoarcerea se face cu un simplu RET (#C9). Asta inseamna ca nu trebuie modi- ficat continutul stivei (se scoate tot ce se introduce pe stiva). Daca continu- tul stivei trebuie distrus, reintoarcerea se poate face cu RST 8 (#CF). O posi- bilitate speciala pentru depanarea programelor in cod este posibilitatea defini- rii unui punct de intrerupere, la intilnirea caruia executia se va suspenda si va fi afisat continutul registrelor generale ale microprocesorului. Acum se poa- te proceda in doua moduri: - "Q" opreste executia si se intra in monitor. - "C" confirma executia pina la reintoarcerea normala in monitor. Daca se foloseste sub rutina de tiparire caracter pe ecran RST #10, trebuie ca registrul IY sa contina valoarea #5C3A. 4.4 Comenzile monitorului A x y - Aritmetica hexa si conversie zecimal-hexa. Ambii parametri sint afisati atit in zecimal cit si in hexa. Se mai afiseaza in hexa x+y si x-y. Predefinit, x=0 si y=0. B x - Se va pune punctul de intrerupere la adresa x. x=0 nu pune punct de intrerupere. Predefinit x=0. C x y z - Copiaza blocul de memorie dintre x si y de la adresa z mai departe Predefinit, x=o, y=0, z=0. D x y z - Dezasambleaza codul dintre x si y, cu pauza dupa fiecare z linii afisate. Predefinit x=0, y=#FFFF si z=14. E x - Executa codul de la adresa x. Predefinit x=0. F x y z (...) - Cauta intre x si y aparitia secventei ... cu pauza dupa fie- care z secvente aparute. Expresia (...) poate fi: a) Oricit octeti hexa separati cu blancuri b) Un sir ASCII inchis intre ghilimele c) Un amestec intre cazurile a si b; Parantezele fac parte din sintaxa si daca nu sint gasite va fi afisat un mesaj de eroare. Daca nu se gaseste deloc secventa, mesajul NOT FOUND va fi afisat. Predefinit x=0, y=#FFFF, z=14. G x y z - Incarca cod de pe caseta si il memoreaza la adresa x. Lungimea zo- nei de cod este y iar z este octetul indicator (flag). Predefinit x=0, y=0, z=0. H - Citeste si interpreteaza headere in format Spectrum. I x y z - Umple memoria intre adresele x si y cu octetul z. Predefinit x=#4000, y=#57FF, z=0 (sterge ecranul). J x y - Deplasamentul unui salt relativ de la x la y va fi afisat. Prede- finit x=0, y=0. K x y z - Se aduc borderul la x, fondul la y si ink la z. Predefinit x=0, y=0, z=7. M x - O pagina de memorie va fi afisata atit in hexa cit si ASCII, cu un cursor clipind la adresa x. Comenzile posibile sint: - Cursoarele - pentru a misca cursorul pe ecran - Delete - muta cursorul inapoi o pozitie - Enter - muta cursorul la linia urmatoare - SS + S - afiseaza pagina urmatoare de memorie - SS + W - afiseaza pagina anterioara de memorie - SS + CS - comuta cursorul intre zona ASCII si zona hexa Scriind orice cifra hexa cind cursorul este in zona hexa sau orice ca- racter in zona ASCII se obtine modificarea locatiei respective de memorie cores- punzator cifrei sau caracterului, atit pe ecran cit si in memorie. Implicit x=0. N - Dezasamblor generator de fisier sursa descris in sectiunea 4.2. P x y z - Inregistreaza cod pe caseta. Blocul de memorie cu lungimea y si incepind de la adresa x va fi salvat pe caseta cu flag z. Predefi- nit x=0, y=0, z=#FF. Q - Iesire in pagina initiala de optiuni. R - Continutul registrelor utilizator va fi afisat si se vor putea fa- ce substitutii cu ajutorul cursorului. Comenzi posibile: - cursoarele - muta cursorul pe ecran - DELETE - muta cursorul o pozitie inapoi - ENTER - muta cursorul la registrul urmator - Q - paraseste modul modificare registri - S - comuta sunet activ-inactiv la apasarea unei taste U x y z - Controlul e transferat la o rutina utilizator care incepe la adre- sa continuta in variabilele de sistem USERAD (#5C5C). Predefinit, x=0, y=0, z=0, u=0. Y x - Fixeaza indicatorul de stiva, care in mod normal incepe la #6000. Predefinit, x=#5FFD. Z x y - Umple memoria cu octetul 00 intre adresele x si y; predefinit, x=#4000, y=#57FF (sterge ecranul). 5. A S A M B L O R U L O P U S 5.1 Introducerea si editarea textelor 5.1.1 Format general OPUS utilizeaza setul de caractere ASCII. Pentru a introduce instructiuni ale limbajului de asamblare, se va introduce mai intii un numar de linie urmat apoi de textul dorit. Numarul de linie trebuie pus in gama 0 - 65534 inclusiv. Textul poate consta din una sau mai multe instructiuni separate prin ":". De obicei instructiunile cuprind a) o eticheta optionala b) o instructiune in limbaj de asamblare c) un comentariu optional a) Etichetele - pot contine litere mari, mici si cifre - trebuie sa inceapa cu o litera - pot avea 6 caractere lungime - nu trebuie sa coincida cu un cuvint rezervat b) Instructiunile - pot fi instructiuni standard Z80 sau directive de asamblare O facilitate e oferita in referirea la flagul de paritate/depasire. Se poate utiliza JPV in loc de JPPE JPNV in loc de JPPO c) Comentariile - pot fi anexate cu ajutorul separatorului ":" si sint permise linii cu cite doua comentarii. 5.1.2 Constantele Sint zecimale dar pot fi exprimate in hexa prefixindu-le cu "#". Constantele literale pot fi exprimate prin includerea lor intre ghilimele ("C", de exemplu). Exista o constanta de sistem notata "S" care intotdeauna ia valoarea adresei curente la care se asambleaza: D JNZ S <=> LOOP DJNZ LOOP 5.1.3 Operatorii Operatorii posibili sint: +, -, & (AND logic), ! (OR logic). Nu exista prio- ritate a unui operator fata de altul. Expresiile se evalueaza strict de la stin- ga la dreapta (documentatia OPUS, partea I). 5.1.4 Expresiile Oriunde e necesara o constanta intr-o instructiune, o expresie poate fi folo- sita in loc. Expresiile sint construite din etichete si/sau constante separate de operatori. De mentionat ca expresiile sint calculate la asamblare si nu in timpul rularii codului. 5.1.5 Directivele de asamblare Urmatoarele pseudoinstructiuni ofera parametrii necesari operarii OPUS-ului sau comanda asamblorului sa stocheze valori fie ca simboluri fie direct in memo- rie: ORG nnnn indica adresa de la care va fi asamblat in continuare codul. Se permit mai multe ORG-uri. DISP nnnn modifica locul in care va fi generat codul, dar acesta va rula de la adresa data de ORG. ENT comanda "X" va introduce in executie codul de la ultima instructiune ENT din fisierul sursa. EQU da o valoare unui simbol text (ex. ONE EQU 1). DEFS nnnn insereaza numarul specificat de locatii libere la adresa curenta de asamblare (le scrie). DEFB nnnn .... insereaza octetii specificati la adresa curenta de asam- blare. DEFW nnnn .... insereaza cuvintele (adresele) specificate la adresa cu- renta de asamblare. DEFM "...." insereaza textul din ghilimele prin reprezentarea unui caracter in cod ASCII. 5.1.6 Ecran-editorul Cursorul poate fi mutat pe ecran cu ajutorul sagetilor de pe tastele 5..8. Orice caracter poate fi inlocuit direct prin simpla scriere a noului caracter cind cursorul se afla sub el. Pot fi inserate spatii la pozitia curenta a curso- rului, dar la fiecare spatiu se pierde un caracter de la sfirsitul liniei. Aceasta se obtine cu CS+4. Caracterul sub care se afla cursorul poate fi sters cu CS+3. Dupa modificarea unei linii trebuie apasat ENTER pentru ca ea sa fie memorata. CS+9 sterge ecranul si muta cursorul in coltul din stinga sus. CS+2 muta cursorul la urmatoarea pozitie de tabulare in cadrul liniei curente. 5.2 Comenzile asamblorului A x Asambleaza fisierul sursa si afiseaza mesajele de eroare. Dupa x erori asamblarea se opreste. Pentru a continua se apasa ENTER. Predefinit x=14. C x y z Copiaza blocul incepind de la linia x si terminind cu linia y de la linia z incolo. O renumerotare cu increment unu va avea loc automat; predefinit x=0, y=0, z=0. D x y Sterge toate liniile dintre numerele de linie x si y. Nu se in- timpla nimic daca nu se dau numere de linie. E x y z Executa codul produs de ultima asamblare. Se executa incepind de la ultimul ENT intilnit in fisierul sursa. Daca nu exista nici un ENT va fi afisat un mesaj de eroare. F "string1 string2" x y z Se cauta aparitiile "string1" intre liniile x si y. Daca "string2" nu e dat, se afiseaza toate a- paritiile, cu pauza dupa z aparitii. Daca e dat, la fiecare intilnire a lui "string1", o portiune din fisierul sursa e afisata, cu linia in care s-a intilnit "string1" scoasa in evidenta. Daca se apasa "Y", "string1" va fi inlocuit cu "string2". Daca se apasa "Q" nu se mai continua cautarea. Apasarea a orice altceva continua cautarea. Predefinit x=prima linie din fisier, y=ultima linie din fisier, z=14, "string1"=" ". I x y Se genereaza automat numere de linie incepind cu x si cu incre- ment y. Pentru a parasi aceasta comanda, se sterge ultimul numar generat si se apasa ENTER. Predefinit x=10, y=10. K x y z La fel ca la monitor. L x y z Se listeaza sursa intre liniile x si y cu pauza dupa fiecare z linii afisate. Implicit, x=prima linie, y=ultima, z=14. M x y z La fel ca la comanda C, dar sterge liniile originale (muta, nu copiaza). N x Creeaza un fisier sursa nou de la adresa x. Predefinit x=24576, adica #6000. O x Face ca un fisier anterior creat la adresa x sa devina fisier curent. Implicit x=#6000. Q Iesire in pagina initiala. R x y z Se renumeroteaza liniile de la z incolo, prima valoare fiind x, pasul y. Implicit x=10, y=10, z=prima linie din fisier. S x Daca nu e dat x, se afiseaza adresa de sfirsit, de start si di- mensiunea fisierului curent. Altfel se da adresa de start a liniei x. T x Daca nu se da al doilea parametru, se afiseaza tabela cu simbo- luri, cu pauza dupa x simboluri afisate. Dind un nume de eti- cheta, valoarea ei in hexa va fi afisata, Predefinit z=14. U x y z La fel ca la monitor. X x Se tiparesc toate numerele de linie in care apare o eticheta, pentru fiecare eticheta in parte. Linia in care e definita eti- cheta e marcata cu "!". Se vor afisa x etichete inainte de pauza Predefinit x=6. 5.3 Stocarea fisierului Fisierele se salveaza pe banda in format compatibil ZX Spectrum si sint memo- rate ca zona de cod. Daca la incarcarea unui fisier mai exista unul creat in calculator si facut curent se va intimpla ce se intimpla in Basic cu instructiu- nea MERGE si in plus se va face o renumerotare cu increment 1. Comenzile de lucru cu caseta sint: G string Incarca fisierul cu numele "string" de pe caseta. P string Salveaza pe banda fisierul curent sub numele de "string" daca acesta e precizat. Daca nu, se foloseste adresa de start a fisierului salvat. V string Se verifica fisierul de pe caseta avind numele "string". Daca numele nu e precizat, se verifica primul fisier intilnit. 6. B A S I C D E C O D E R U L OPUS contine si un decodor de Basic Spectrum care se apeleaza din monitor cu E 3268. ATENTIE! Nu este nici interpretor, nici compilator. Dupa incarcarea din monitor cu G, se poate rula decodorul indicind adresa de start. Intii vor fi a- fisate lungimea si numarul de linie. Mai departe decodorul asteapta apasarea unei taste. Cu Q se paraseste decodorul. Se poate continua cu orice alta tasta. Codurile neinterpretabile sint evidentiate cu mesajul "Invalid!". Codurile de control sint incadrate de "*" si "$". Numerele sint afisate mai intii asa cum apar in listing, urmate de valoarea reala in hexa si zecimal intre paranteze, asa cum este ea modificata de interpretorul Basic dupa octetul #0E. Sfirsitul de linie Basic e marcat cu codul de control ENTER si cu o linie continua pe ecran. ATENTIE! Decodorul nu recunoaste in limbajul Basic codurile Z80 inserate si nici sfirsitul programului Basic, asa ca poate fi indus in eroa- re uneori de REM-uri ilogice sau de decodificarea zonei de variabile de la sfir- situl programului. 7. U T I L I Z A R E A I M P R I M A N T E I Prin apasarea tastelor SS+Y se poate activa imprimanta. Aceasta se indica prin mesajul "LPRINT" pe ecran. Tot ce se afiseaza va fi transmis si la impri- manta. Dupa terminarea executiei comenzii curente imprimanta va fi dezafectata automat, astfel ca pentru tiparirea executiei urmatoarei comenzi e nevoie de un nou SS+Y. Viteza de transmisie a interfetei RS 232 e fixata in variabila sistem #5C36 astfel: #01C1 300 Baud Predefinit, rata este de 1200 Baud. #00E4 600 Baud #006E 1200 Baud #0035 2400 Baud #0019 4800 Baud #000C 9600 Baud #0006 19200 Baud 8. H A R T A M E M O R I E I OPUS este sistemul de operare rezident in memorie si se afla intre locatiile #0000 si #3FFF. Memoria ecran este intre #4000 si #5B00. Atributele de culoare sint intre #5800 si #5B00. Pentru a respecta configuratia Spectrum variabilele de sistem sint plasate incepind cu #5C00. Stiva e fixata la #5FFD. Fisierul sur- sa incepe de obicei la #6000 dar poate fi plasat si la alte adrese cu comenzile "N" si "O". Tabela de simboluri incepe de la #FFFF si descreste precum stiva, pentru fiecare eticheta utilizata, cu 8 octeti. 9. V A R I A B I L E L E S I S T E M Cele notate cu "!" pot distruge sistemul de operare iar cele marcate cu "*" poate fi util sa fie modificate. Addr. Nr.octeti Nume Semnificatie 5C00 11 * KSTATE Buffer intrare tastatura (tip Spectrum) 5C0B 1 * LASTK Ultima tasta apasata 5C0C 2 * MAXREP 5C0E 2 * MINREP 5C10 1 MAXWAR Comanda de timp pentru clipire cursor 5C11 1 KEYRPT Contor de repetari 5C13 1 CRSFLA Indica daca cursorul e aprins sau nu 5C14 1 * CRSWAR Contor clipire cursor 5C15 2 * PRTPOS Pozitia de scriere in memoria video 5C17 1 * COLON Coloana de tiparire 5C18 1 * ROW Rind de tiparire 5C19 2 ! STKPTR Stiva OPUS-ului 5C1B 1 CMDNR Nr. de comenzi in executie 5C1C 2 SYMPTR Indicatorul tabelei de simboluri 5C1E 2 * SOURCE Adresa de start a fisierului OPUS 5C20 2 PROEND Adresa de sf. a fisierului sursa OPUS 5C22 2 LSTPTR Indicator de listare in fisierul sursa 5C24 2 LSTLNG Nr. linii listate inainte de pauza 5C26 2 LONG Lungimea liniei sursa de introdus 5C28 1 MARK Marcheaza un anumit simbol 5C29 2 ORIGIN Adresa ORG 5C2B 2 DISTA Deplasamentul DIST 5C2D 2 ENTRY Adresa ultimului ENT 5C2F 1 * PARMNR Nr. parametri dintr-o comanda 5C30 2 * PARM1 Parametrii comenzii in curs de executie 5C32 2 * PARM2 "-------------------------------------" 5C34 2 * PARM3 "-------------------------------------" 5C36 2 * BAUD Viteza transfer imprimanta 5C38 1 * BORDCR Culoarea border-ului 5C39 1 * PATTR Octet de atribut ecran 5C3A 1 ! FLAGS1 Indicator pt OPUS 5C3B 1 ! FLAGS Indicator tastatura (Spectrum) 5C3C 2 DSTART Adresa start a dezasamblorului 5C3E 3 CBYTE Memoreaza codul operatiei 5C41 1 MODE Indicator tastatura (Spectrum) 5C42 2 CRTADR Adresa curenta dezasamblor 5C44 2 LASTA Ultima adresa dezasamblor 5C46 12 * WORKSP Spatiu de lucru 5C52 24 * REGSAV Registri utilizator (afara de I si R) 5C6A 1 ! FLAGS2 Alti indicatori 5C6B 2 * SPINH Continut SP utilizator 5C6D 1 * ISAVE Continut I utilizator 5C6E 1 ! RSAVE Continut R utilizator 5C6F 2 RERE Adresa return din rutine utilizator 5C71 1 DFLAG Indicator pentru dezasamblare 5C72 2 PTXT Indicator de text pentru dezasamblor 5C74 2 PTBUF Indicator in bufferul dezasamblorului 5C76 2 PEOBUF Alt indicator 5C78 3 * FRAMES Nr. de linii (Spectrum) 5C7B 2 * USERAD Adresa comenzii utilizator 5C7D 2 LNRTX Nr. linie pentru textul dezasamblor 5C7F 42 * COPIE Buffer de lucru OPUS 5CAA 42 * INBUFF Buffer de intrare OPUS 10. S U B R U T I N E O P U S U T I L E La "INPUT" se indica registrii ce contin date de intrare in subrutina. La "OUTPUT" se dau datele de iesire si registrii ce le contin. "DESTROY" arata ce alti registri sint afectati de calculele din subrutina. 10.1 Afisari pe ecran PRTOUT #0010 Tipareste codul ASCII din registrul A la pozitia curenta de tiparit (IY=#5C3A) - INPUT: A=codul ASCII al caracterului de tiparit - OUTPUT - DESTROY PRTMES #0030 Afiseaza mesajul ce urmeaza dupa RST#30 si care trebuie termi- nat cu octetul #00 - INPUT - OUTPUT - DESTROY PRTBLK #00AC Afiseaza un blanc. - INPUT - OUTPUT: A=#20 - DESTROY: A PRTCR #00B0 Tipareste codul de control al saltului la inceput de rind nou. - INPUT - OUTPUT: A=#00 - DESTROY: A PRTCL #00B5 Sterge linia curenta prin tiparirea codului de control #07. - INPUT - OUTPUT: A=#07 - DESTROY: A PMRSHL #00B9 Afiseaza mesajul indicat de HL si care trebuie sa fie terminat cu octetul #00. - INPUT: HL=adresa de inceput a mesajului - OUTPUT - DESTROY: HL, AF PRTHL #00C6 Afiseaza continutul registrului HL in hexa urmat de un blanc. - INPUT: HL=numar - OUTPUT - DESTROY: AF P A R T E A A II-a PRTDE #00C0 Afiseaza continutul memoriei indicate de DE in hexa urmat de un blanc. - INPUT: DE=indicator spre locatia de memorie (LSB) - OUTPUT - DESTROY: HL, DE, AF PRITA #00D0 Tipareste continutul registrului A in hexa. - INPUT: A=octet de tiparit - OUTPUT - DESTROY: AF ABIT #00E3 Tipareste continutul registrului A in reprezentare binara. - INPUT: A=octet de tiparit - OUTPUT - DESTROY: BC, AF CONVO #00F9 Tipareste continutul lui HL in zecimal fara zerouri nesemni- ficative in fata si terminat cu un blanc. - INPUT: HL=numar - OUTPUT - DESTROY: C, AF CONVE #00FE Ca in CONVO dar cu zerouri nesemnificative. ASCII #00F1 Converteste o cifra hexa in codul ASCII corespunzator - INPUT: A=cifra hexa - OUTPUT: A=codul ASCII - DESTROY: AF ASCHX #013E Converteste un numar codificat in ASCII in valoarea sa in hexa. Sint luate in considerare "#" si semnul lirei. - INPUT: DE=indicatorul inceputului codului ASCII - OUTPUT: HL=numarul convertit - DESTROY: AF, BC, DE, HL INAHZ #0191 Ca si ASCHX dar pentru numere pe 8 bit. - INPUT: DE=indicatorul inceputului codului ASCII - OUTPUT: A=numarul de convertit - DESTROY: AF, BC, DE HXTEST #009C Converteste continutul registrului A in cifre hexa corespunza- toare. - INPUT: A=codul ASCII al cifrei - OUTPUT: A=cifra hexa; Cy=1 daca codul nu e al cifrei - DESTROY: AF 10.3 Teste LETTER #0079 Verifica daca continutul lui A e majuscula. - INPUT: A=codul ASCII - OUTPUT: Cy=1 daca testul a esuat - DESTROY: Cy ZAHL #0080 Verifica daca continutul lui A este numar. - INPUT: A=codul ASCII - OUTPUT: Cy=1 daca testul a esuat - DESTROY: Cy ZIFFER #0087 Verifica daca A contine o litera sau cifra (exclude simbolurile speciale). - INPUT: A=codul ASCII - OUTPUT: Cy=1 daca testul a esuat - DESTROY: Cy BCHST #0088 Verifica daca continutul lui A este o litera. - INPUT: A=codul ASCII - OUTPUT: Cy=1 daca testul a esuat - DESTROY: Cy ASCTES #046D Verifica daca A contine un caracter ASCII; daca nu, A e incarcat cu "."=#2E. - INPUT: A=codul ASCII - OUTPUT: Cy=1 daca testul a esuat - DESTROY: AF 10.4 Citiri de la tastatura INCH #03F3 Asteapta o tastare. - INPUT: - OUTPUT: A=codul ASCII al tastei apasate - DESTROY: AF, DE, BC KPRESS #0426 Tasta apasata si ridicata. - INPUT: - OUTPUT: A=codul ASCII al tastei - DESTROY: AF, BC, DE KEYBRD #3047 Asteapta apasarea unei taste afisind un cursor clipitor la pozi- tia curenta de scriere. - INPUT: - OUTPUT: A=codul ASCII al tastei apasate - DESTROY: AF, BC, DE, HL 10.5 Lucrul cu casete SAVE #04C2 Salveaza un bloc de date pe caseta. - INPUT: A=octet de indicatori, DE=lungime bloc, IX=adr. start - OUTPUT: - DESTROY: Toate registrele LOAD #0556 Incarca un bloc de date de pe caseta. (In prealabil se impune SCF) - INPUT: A=octet de indicatori, DE=lungime bloc, IX=adr. start - OUTPUT: - DESTROY: Toate registrele 10.6 Sunete CLICK #03FA Daca sunetul e comutat (bitul 2 din #5C3A setat), subrutina trimite un pacanit de tasta apasata. Daca se apeleaza de la adresa #03FF, nu se mai verifica bitul 2 din #5C3A. - INPUT: - OUTPUT: - DESTROY: PIEPEN #03B5 Genereaza sunet (Spectrum). - INPUT: DE=durata sunetului (secunde); HL=durata*frecventa - OUTPUT: - DESTROY: Toate registrele 10.7 Subrutine speciale HILD #01EF Compara HL cu DE. - INPUT: DE, HL - OUTPUT: Cy=1 daca DE>HL, =0 daca DE<HL. Z=1 daca DE=HL - DESTROY: F CURSPOS #2D9D Fixeaza pozitia urmatoarei scrieri pe ecran. - INPUT: BC=xxyy unde xx=nr. liniei, yy=nr. coloanei - OUTPUT: - DESTROY: ? SEL #0802 Asteapta o tasta (1=MONITOR, 2=ASSEMBLER, #TCOPY) - INPUT: - OUTPUT: - DESTROY: ? LADALL #0449 Incarca parametrii comenzii in registre. - INPUT: - OUTPUT: BC=PARAM1-PARAM2; DE=PARAM1; HL=PARAM3 - DESTROY: F, BC, DE, HL WARTE #30EB Da o secunda pauza. - INPUT: - OUTPUT: - DESTROY: AF, BC DELAY #30EE Da intirziere pe constanta din BC. - INPUT: BC=durata - OUTPUT: - DESTROY: BC RST08 #0008 Reintoarcere din subrutine utilizator; Cy=1 indica eroare la return. - INPUT: - OUTPUT: - DESTROY: ERROR #0053 Trimite mesajul ERROR pe ecran si da un biziit specific de eroare. - INPUT: - OUTPUT: - DESTROY: Toate registrele HOME #2DF9 Sterge ecranul si pune cursorul in stinga sus. - INPUT: - OUTPUT: - DESTROY: AF, BC, DE, HL 11. C O P I E R U L O P U S Cu aceasta optiune OPUS poate copia orice fisier de pe o caseta pe alta. A- cest copier ofera toate facilitatile cunoscute la celelalte programe de copiat. Optind pentru copier ne vom gasi in modul de incarcare. Se va afisa: - starea copierului, baza de numerotatie, starea sunetului si numarul de locatii libere - lista headerelor constind din: T NAME LENGTH ADDR BYTES ERROR VE tip, numele fisierului incarcat, lungimea preconizata in header si a- dresa de incarcare sau linia de autostart in cazul unui program BASIC. Pot exista tipurile: P - program BASIC N - matrice numerica S - matrice alfanumerica C - zona de cod ("Bytes" in stilul Spectrum) Alt caracter - tipul nu este unul standard BYTES: lungime reala a fisierului incarcat ERROR: semnalizeaza o eroare la incarcare cu un simbol "X" (daca a in- tervenit o eroare, daca lungimea reala nu corespunde cu cea din header sau capacitatea copierului a fost depasita. VE: semnalizeaza similar o eroare la verificare Cu tasta SPACE se poate opri incarcarea. Daca nu a fost incarcat, avem optiunile Q - iesire in pagina initiala OPUS B - comuta baza de numeratie intre zecimal si hexa S - comuta pacanitul tastaturii activ/inactiv N - sterge tot ce s-a incarcat si intra in modul LOAD P - fisierele sint incarcate dupa lungimea data in header pentru a putea incar- ca fisierele salvate unul dupa altul fara pauza. Nu pot fi incarcate astfel headerless-uri iar in caz de eroare sau in lipsa fisierului se intra automat in modul de salvare. M - ofera o memorie libera de 48K-2 octeti dar se poate incarca un singur fisier fara header. Erorile de incarcare vor fi semnalate cu biziitul specific de eroare. Dupa incarcare in acest mod avem optiunile: C - copiaza fisierul incarcat N - incarca alt fisier Q - se iese in pagina initiala OPUS Daca au fost incarcate mai multe fisiere, la iesirea din modul incarcare primul va fi indicat cu o linie clipitoare si avem in plus urmatoarele posibilitati: A - copiaza automat toate fisierele incarcate cu pauza 1 sec. C - salveaza fisierul marcat (toate fisierele salvate cel putin o data vor fi trecute in invers video. S - muta marcajul pe urmatorul fisier L - intra in mod incarcare fara a sterge ce a fost incarcat V - se verifica fisierul marcat. Daca nu sint erori se pune un V in co- loana VE. Erorile se marcheaza cu X. R - redenumeste fisierul marcat. Se pot introduce 10 caractere pentru a obtine noul nume. Inlocuirea se face pe ecran si in memorie. Se pot folosi cursoarele orizontale, DELETE si ENTER pentru a termina ina- inte de inlocuirea a zece caractere. D - sterge fisierul marcat si actualizeaza spatiul disponibil. A N E X A 1 C O D U R I L E D E E R O R I 0 - Caracter nepermis sau instructiune incompleta 1 - Eticheta prea lunga 2 - Se asteapta ")" 3 - Eroare de trunchiere sau iesire din gama de valori permisa 4 - Se asteapta "," 5 - Eroare de context 6 - Simbol nedefinit 7 - Se asteapta "(" 8 - Mnemonica nepermisa 9 - Eticheta nedefinita A N E X A 2 C U V I N T E R E Z E R V A T E Nu pot fi folosite ca etichete dar pot apare in denumirile de etichete: A ALC ADD API AF AND B BC BIT C CALL CCF CP CPD CPDR CPI CPIR CPL D DAA DE DEC DEFB DEFM DEFS DEFN DI DISP DJNZ E EI ENT EQU EX EXX H HALT HL I IM IN INC IND INDR INI INIR IX IY JP JR L LD LDD LDDR LDI LDIR M NC NEG NOP NV NZ OR ORG OCDR OTIR OUT OUTD OUTI P PE PO POP PUSH RES RET RETI RETN PL PLA RLC RLCA RLD RR RRA RRC RRCA RRD RST SBC SCF SFT SLA SP SRA SRL SUB V XOR Z