;EXOS valtozok beallitasa makro ;Hivasa: VAR valtozoszam, ertek ;Ahol a valtozoszam az EXOS valtozoira vonatkozik VAR MACRO @1,@2 LD BC,0100H+@1 LD D,@2 EXOS 16 ENDM ;Csatorna megnyitas ;Hasonlo, mint a BASIC OPEN parancsa, ;de nem kell a csatornaszam ele # jel OPEN MACRO @1,@2 LD A,@1 LD DE,@2 EXOS 1 ENDM MODE EQU 22 ;VIDEO mod EXOS valtozoja COLOR EQU 23 ;Videolap szinuzemmod valtozoja VIDEOX EQU 24 ;Videolap x meretenek valtozoja VIDEOY EQU 25 ;Videolap y meretenek valtozoja ORG 100H ;Kezdocim megadasa (uj alkalmazoi program) LD SP,STACK ;A verem beallitasa LD BC,0 ;Varakoyas, ami RESET eseten L0 DEC BC ;jelentos, igy ket RESET lenyomassal NOP ;ujraindithato a rendszer NOP LD A,B OR C JR NZ,L0 LD A,255 ;A rendszerszegmens belapozasa OUT (0B2H),A ;a 2. lapra (8000H-0BFFFH tartomany) LD HL,100H ;A RESET cim beallitasa LD (0BFF8H),HL ;Egyszeri RESET eseten ujraindul a program EI ;Megszakitasok engedelyezese VAR MODE,0 ;Video parameterek megadasa VAR COLOR,0 ;Egy 20*40 karakter meretu VAR VIDEOX,40 ;szoveges ablak definialasa VAR VIDEOY,20 ;a BASIC-ben szokasos modon OPEN 1,VIDEO ;VIDEO csatorna megnyitasa (1-es csatorna) LD B,1 ;Az egyes csatorna (videolap) megjelenitese LD A,1 LD C,1 ;Az elso sortol kezdve LD D,20 ;20 sor kirakasa LD E,1 ;a kepernyo 1. sor helyere EXOS 11 ;Megfelel a BASIC "DISPLAY #1:AT 1 FROM 1 TO 20" ;utasitasanak OPEN 2,KEYB ;A masodik csatorna megnyitasa ;(ez lesz a billentyuzetcsatorna) VAR 27,0 ;A BORDER fekete szinu VAR 29,1 ;Az EDITOR videocsatornaja VAR 30,2 ;Az EDITOR billentyuzetcsatornaja VAR 31,20 ;Az EDITOR puffermerete 20*256 byte VAR 32,00010100B ;Olvasasi parameterek (ld. a szovegben) OPEN 3,EDITOR ;EDITOR (szovegszerkeszto) csatorna megnyitasa VAR 4,3 ;Az alapertelmezesu csatorna az elobb nyitott ;szerkeszto csatorna EXOS 24 ;Egy 16 kbyte meretu RAM szegmens lefoglalasa LD A,C ;es belapozasa OUT (0B1H),A ;az 1. lapra (4000H-7FFFH cimtartomany) EXOS 24 ;Meg ket szegmens lefoglalasa LD A,C ;es belapozasa OUT (0B2H),A ;Ezekre fog toltodni a program EXOS 24 OUT (0B3H),A LD DE,CONT ;Egy uzenet kiirasa a kepernyore LD BC,CONTHO ;DE-ben van a cim, BC-ben a hossz LD A,3 ;A-ban csatornaszam (3=EDITOR) EXOS 8 ;Kiiras CALL INPUT ;Valasz bekerese INC DE ;Amennyiban a valasz "I" vagy "i" LD A,(DE) ;a program automatikusan menti a programokat RES 5,A ;Nagybetusites ("i"-bol "I" lesz) SUB "I" ;Ha a valasz igenlo, akkor a WFLAG-be nulla kerul LD (WFLAG),A ;igy nem kell billentyut nyomni a kimenteshez WARM LD SP,STACK ;A foprogram belepesi pontja LD DE,NAME ;A file nev bekerese elott egy felszolitas LD BC,HOSSZ ;kiiratasa a 3-as csatornara LD A,3 EXOS 8 CALL INPUT ;A filenev bekerese LD A,(DE) ;Amennyiben ez csak egy ENTER, akkor OR A ;visszaugras fociklusba JR Z,WARM LD C,A ;A nevhossz tarolasa C-ben INC DE ;Ha a filenev elso karaktere kettospont, akkor LD A,(DE) ;akkor ezt nem filenevnek, hanem a BASIC-hez ;hasonloan CP ":" ;rendszerbovito hivasanak ertelmezi JR NZ,L3 ;Ha nem kettospont, folytatja az L3-on LD A,C ;A kettospont nelkuli hossz kiszamitasa DEC A ;es tarolasa EXOS-nak tetszo modom LD (DE),A EXOS 26 ;"REBDSZERBOVITO LETAPOGATAS" nevu EXOS hivas JP NZ,EXERR ;Ha nem volt sikeres, hibauzenet kiadasa JR WARM ;Ugras a fociklusba L3 DEC DE ;Program atmasolasanak kezdete LD A,255 ;Programok szamlaloja LD (3FFEH),A ;a 3FFEH cimen NEXT LD A,(3FFEH) ;A szamlalo novelese 1-el INC A ;Mivel a kezdoertek 255 volt, igy az elso LD (3FFEH),A ;program nevebe a 0 kerul PUSH DE ;DE-ben a kimentendo file neve LD IX,3FFFH ;A betoltes LD DE,0FFFFH ;Mivel DE-ben 0FFFFH-van, ezert a tipusbyte-ot ;is betolti (0 ha fejlec, 255 ha programblokk) SCF ;Toltes beallitasa (ha carry 0, akkor csak ;ellenorzes) CALL LOAD ;A betolto szubrutin hivasa IN A,(0B5H) ;A STOP billantyu figyelese RRA JR NC,WARM ;Ha STOP volt lenyomva, akkor kilepes INC H ;Betoltes sikerenek ellenorzese DEC H CALL NZ,ERROR ;Ha toltesi hiba volt, uzenet kiirasa EI CALL WAIT ;Ha nem folyamatos a mukodes, ;akkor itt varakozik POP HL ;A file-nev atalakitasa a kovetkezo formara: PUSH HL ;FILENEV.sorszam (1 karakter) ;program tipusa (2 karakter) LD A,(HL) LD C,A ADD A,4 ;Hossz igy 4 karakterrel megno LD (HL),A ;A program tipusa 00 ha fejlec FF ha blokk INC HL LD B,0 ADD HL,BC LD C,A LD (HL),"." INC HL LD A,(3FFEH) ADD A,48 CP ":" JR C,L1 ADD A,7 L1 LD (HL),A INC HL LD A,(3FFFH) CALL WRA ;A program tipusanak kiirasa hexadecimalisan PUSH BC LD DE,SAVING ;Kimentendo program nevenek kiirasa LD BC,SHO LD A,3 EXOS 8 POP BC POP DE PUSH DE INC DE LD A,3 EXOS 8 POP DE PUSH DE ;A beirt nev alapjan a kimentes megkezdese LD A,5 ;Az 5. csatorna megnyitasa kimenetkent EXOS 2 ;vagyis egy uj file letrehozasa JR NZ,EXERR ;Hiba eseten hibauzenet kiirasa PUSH IX ;A betoltott program hosszanak kiszamitasa POP HL LD DE,4001H OR A SBC HL,DE LD B,H ;A kiszamitott hossz BC-ben LD C,L LD A,5 DEC DE ;A cim DE-ben (4000H) EXOS 8 ;A program kimentese ENTERPRISE formaban JR NZ,EXERR ;Hiba figyelese LD A,5 ;Siker eseten a csatorna lezarasa EXOS 3 ;es a fociklusba visszaugras POP DE LD A,(DE) ;Elotte a nev mogotti 4 karakter megszuntetese SUB 4 LD (DE),A JP NEXT ;Hiba eseten ide ugrik a program EXERR LD DE,HELY1 ;Egy 64 byte-os puffer megadasa EXOS 28 ;Az EXOS az A regiszterben levo hibakodnak ;megfelelo hibauzenetet ebbe a pufferbe masolja LD A,(DE) ;Az elso byte megadja, hogy hany byte INC A ;hosszu a hibauzenet. LD C,A ;BC-be ez a hossz + 1 kerul LD A,13 ;mivel e plusz 13-as karakter is beiktatodik LD (DE),A ;ami az ASCII kodrendszerben egy CR (kocsi vissza) LD B,0 ;ENTERPRISE-on (az :EDITOR eseten) ez soremeles is LD A,3 ;A 3-as (EDITOR) csatornara kiiras EXOS 8 LD A,5 ;A megnyitott 5-os csatorna lezarasa EXOS 3 JP WARM ;Vissza a fociklusba WRA PUSH AF ;Az A-regiszter tartalmanak hexadecimalis kiirasa RRA ;A mentes utan a felso szamjegy rotalasa RRA ;ami igy az also 4 bit helyere kerul RRA RRA CALL DIGIT ;Egy szamjegy kiirasa POP AF ;Az eredeti ertek visszatoltese. ;Az also 4 biten az also szamjegy DIGIT AND 15 ;Csak az ertekes 4 bit marad meg ADD A,90H ;Konverzio, mely soran a 0-9 szamok helyett a DAA ;"0-9" ASCII kodok, a 10-15 szamok helyett ADC A,40H ;pedig az "A-F" 'bettuk keletkeznek DAA LD (HL),A ;a szamjegy tarolasa HL cimen INC HL RET ;Visszateres ERROR PUSH AF ;Figyelmezteto uzenet kiirasa PUSH HL LD DE,MESSAGE LD BC,MHO EXOS 8 POP HL POP AF RET INPUT LD HL,HELY ;A HELY nevu pufferbe karakterek olvasasa LD D,0 ;D regiszterben a beirt karakterek szama INP1 PUSH DE LD A,3 ;Karakter olvasasa a szovegszerkesztobol EXOS 5 ;a B regiszterbe POP DE LD A,B ;A kiolvasott karakter vizsgalata CP 13 ;ENTER eseten ,visszater JR Z,INP2 INC HL ;egyebkent tarolja a karaktert INC D LD (HL),A JR INP1 INP2 LD A,D ;A puffer elso byte-ja egy hosszusagbyte, ami LD DE,HELY ;megadja, hogy hany karakter kovetezik utana LD (DE),A ;Visszatereskor a DE regiszterpar erre a pufferre ;mutat RET WAIT LD A,(WFLAG) ;Varakozas, amennyiben a WFLAG erre van beallitva OR A RET Z ;Ha nulla akkorvisszateres (folyamatos uzem) LD DE,ANYKEY ;Kulonben a "Nyomd meg e billentyut" LD BC,ANYHO ;feliratu szoveg eloadasa LD A,3 EXOS 8 LD A,2 ;Varakozas egy billentyuleutesre EXOS 5 RET ;A SPECTRUM loader LOAD DI ;ha A=0, fejlec INC D ;Zeroflag torlese EX AF,AF' ;Parameterek mentese DEC D ;D eredeti erteke LD A,47H ;Mangnomotor bekapcsolasa, STOP OUT (0B5H),A ;billentyu kijelolese OUT (129),A ;Keret beallitasa IN A,(0B6H) ;A B6H port elozetes leolvasasa AND 128 ;Csak a DATA bitet tartla meg LD C,A ;Bit tarolasa C regiszterben CP A ;Zerobit 1-be allitasa LDSTOP RET NZ ;STOP lenyomasakor visszateres LDSTART CALL LDEDGE1 ;Jelvaltas vizsgalata JR NC,LDSTOP ;Ha nincs, vizsgalat folytatasa LD HL,415H ;Bevezeto jel keresese LDWAIT DJNZ LDWAIT DEC HL LD A,H OR L JR NZ,LDWAIT CALL LDEDGE2 JR NC,LDSTOP LDLEAD LD B,9CH CALL LDEDGE2 JR NC,LDSTOP LD A,0C6H CP B JR NC,LDSTART INC H JR NZ,LDLEAD LDSYNC LD B,0C9H ;Szinkronizalo impulzus CALL LDEDGE1 JR NC,LDSTOP LD A,B CP 0D4H JR NC,LDSYNC CALL LDEDGE1 RET NC LD H,0 LD B,0B0H JR LMARKER LDLOOP EX AF,AF' JR NZ,LDFLAG JR NC,LVERIFY LD (IX),L JR LDNEXT LDFLAG RRA XOR L RET NZ LD A,C RLA LD C,A INC DE JR LDDEC LVERIFY LD A,(IX) XOR L RET NZ LDNEXT INC IX LDDEC DEC DE EX AF,AF' LD B,0B2H LMARKER LD L,1 LD8BITS CALL LDEDGE2 RET NC LD A,0CBH CP B RL L LD B,0B0H JP NC,LD8BITS LD A,H XOR L LD H,A LD A,D OR E JR NZ,LDLOOP LD A,H CP 1 RET LDEDGE2 CALL LDEDGE1 RET NC LDEDGE1 LD A,16H LDDELAY DEC A JR NZ,LDDELAY AND A LSAMPLE INC B RET Z IN A,(0B5H) RRA RET NC IN A,(0B6H) XOR C JP P,LSAMPLE LD A,C CPL LD C,A LD A,B OUT (129),A CP A SCF RET ;Szovegek VIDEO DEFB 6,"VIDEO:" ;A VIDEO eszkoz neve KEYB DEFB 9,"KEYBOARD:" ;A billentyuzet neve EDITOR DEFB 7,"EDITOR:" ;A szovegszerkeszto CONT DEFB "Folyamatosan ?",13,10 CONTHO EQU $-CONT NAME DEFB 13,10,"Mi legyen a file neve ?",13,10 HOSSZ EQU $-NAME SAVING DEFB 13,10,"File:" SHO EQU $-SAVING ANYKEY DEFB 13,10,"Nyomj meg egy billentyut!",13,10 ANYHO EQU $-ANYKEY MESSAGE DEFB 13,10,"Toltesi hiba!" MHO EQU $-MESSAGE WFLAG DEFB 1 ;A varakozasi mutato ;Pufferek HELY1 EQU $ ;Hibauzenet helye 64 byte HELY EQU $+64 ;A beirt filenev helye STACK EQU 3000H ;A verem 3000H alatt END ;Program vege