Opisi: -------- (Svet Kompjutera, #12, December 1988, ZX Intro Servis, Predrag Bećirić) ------------------------------------------------------------------------- Tata, kupi mi Maker! U prošlom broju objasnili smo kako praviti Intro Makere, takođe smo dali i prvi Intro maker za Spectrum. Sada je na red došao i nešto Jednostavniji, ali, vrlo kvalitetan program.    Program BIG (1) Intro maker omogućava vam da ispred neke igre stavite svoju propagandnu poruku. Kada neko sledeći put učita tu igru, moraće prvo da pročita vašu poruku, a zatim, pritiskom na dolazi do starta igre. Evo ukratko i načina kako to ostvariti. Kada startujete program, pojaviće se meni,slično kao i u CRAZY INTRO MAKER-u. Meni vam nudi sledeće opcije: 1. ENTER TEXT FOR SCROLLING 2. SAVE INTRO 3. INSTRUCTIONS 4. CHANGE SCROLL Prva opcija omogućava vam da unesete tekst koji želite da se skroluje. Po stanovanju ove opcije ulazite editor poruka. U gornjoj trećini ekrana pojaviće se prozor u kojem je predstavljeno 32 karaktera poruke (poruka je maksimalne dužine 512 karaktera). Unošenjem novih karaktera, dolazi i do skrola poruke po ekranu. Kada ste otkucali ćelu poruku, potrebno je da unesete ® kao marker za kraj teksta. Taj specijalni znak omogućava programu da zna koliko je poruka dugačka, a takode i da kasnije, kada ispiše ćelu poruku, počne sa ispisivanjem od početka. Za izlazak iz ove opcije potrebno je pritisnuti taster (ENTER). Pored ovih komandi EDITOR još poznaje i komande "(" (SS + R) i ")" (SS + T). Koristeći ove komande moguće je pomerati kursor po poruci i po potrebi je ispravljati. Sledeća opcija omogućava vam da gotov intro snimite na kasetu. Kasnije ćete taj Intro moći da učitate od bilo koje adrese u RAM-u i, naravno, startovati ga od te adrese. Ne treba brinuti o adresi za učitavanje: program će raditi učitan na bilo koju slobodnu adresu u RAM-u. Opcija pod rednim brojem tri daje kratko uputstvo o tome kako ubaciti intro program u igru, bilo da se ona učitava iz BASIC-a ili mašinca. Sledeća opcija ima ulogu da razbije monotoniju. Naime, ako bi skrol uvek bio isti, posle nekoliko igara to bi postalo dosadno. Zbog toga je moguće, menjajući neke parametre skrola, menjati i efekat. Stanovanjem ove opcije ulazi se u novi meni, sa sledećim opcijama: 1. Character up 2. Character down 3. Bold 4. Normal Q. Paper scroll W. Ink Scroll Prva i druga opcija ovog novog menija omogućavaju vam da menjate izgled karaktera kojim je predstavljena jedna tačka iz definicije karakter seta. Ukupno postoji 8 različitih definicija, koje, koristeći tastere 1 i 2, pomerate.gete-dole. Treća i četvrta opcija menjaju definiciju karakter seta. Možete izabrati da karakter set bude originalni Spectrumov (iz ROM-a), ili novi, podebljani. Koristeći petu ili šestu opciju moguće je izabrati da li će se skrol boja vršiti po slovima, ili po pozadini. Na ovaj način značajno se menja efektat koji se dobija ovim programom. Kako raditi sa B.I.M.-om Prva stvar koju je potrebno uraditi jeste da se unese tekst za skrolovanje.Ne zaboravite, na kraju teksta potrebno je staviti @ kao marker. Ukoliko ovaj marker zaboravite da stavite, program će nastaviti da na ekranu ispisuje neke gluposti, sve dok negde u memoriji ne naiđe na @. Zatim je potrebno da, koristeći opciju 4 iz glavnog menija,odredite parametre za skrol. Sada možete snimiti gotov intro. Intro je dugačak 1536 bajtova. Kako ubaciti intro u igru? Kao prvo, potrebno je da cela igra bude učitana u memoriju računara,ali da se pritom ne startuje. Zatim je potrebno pretražiti memoriju i pronaći negde prazan blok memorije dužine 1,5 Kb. U ovo područje je, sada, potrebno učitati snimljeni intro. Preostalo nam je još samo da učinimo da igra pre nego što se startuje pozove ovaj naš intro. U poslednje vreme sve igre za Spectrum dolaze snimljene, uglavnom, na dva načina. Prvi je takozvani Spec-Mac sistem, a drugi je učitavanje direktno iz BASIC-a. Ukoliko se igra u koju želimo da unesemo intro učitava Spec-Mac sistemom, potrebno je da u BASIC-u takve igre izvršimo sledeću izmenu: 1. Učitamo BASIC sa MERGE "" 2. Nakon toga treba da pogledamo kakav je sadržaj lokacija 23797, 23800 i 23808. Zapamtićemo lokaciju čiji je sadržaj bio 205. 3. Zatim je potrebno da 20. liniju BASIC-a zamenimo sa: 20 CLEAR 24999: POKE ,195: RANDOMIZE USR 23760: RANDOMIZE USR (adresa gde je učitan intro): RANDOMIZE USR (zapamćena adresa + 3) 4. Ovako prepravljen BASIC sada možemo snimiti na neku kasetu. Iza BASIC-a treba snimiti ostale delove igre (screen$, prvi deo od 25000 u dužini 20000, drugi deo od 45000 u dužini 20536, treći deo od 23296 dugačak 1704 i drugi screen$). Naravno, tu je potrebno da bude snimljen i intro. Ukoliko se igra u koju želimo da ubacimo intro učitava iz BASIC-a, uradićemo sledeće: 1. Učitamo BASIC sa MERGE "" 2. Ispred poslednje RANDOMIZE USR instrukcije stavićemo RANDOMIZE USR (adresa gde je učitan intro) 3. Snimimo BASIC, a iza njega i igru u koju je ubačen intro. Ukoliko se igra u koju želite da ubacite ovaj intro učitava na neki drugi način, pokušajte sami da pronađete način na koji ćete to izvesti. Big scroll U prvom delu teksta opisali smo rad sa Intro Makerom,kao i kako da ga ubacite u igru. Sada vam dajemo i uprošćenu, a u isto vreme i detaljno dokumentovanu rutinu za skrol poruka po jednoj trećini ekrana. Listing je dat u formatu Laser Genius-a. Ako koristite GENS3M21 i slične programe, moraćete da izvršite neke izmene. Naredbu DB potrebno je ćelu kucati kao DEFB. Ukoliko se iza nje nalazi neki string, potrebno ju je promeniti u DEFM; PUT instrukciju treba izbaciti, a ispred svake linije potrebno je da stoji linijski broj. Evo rutine: ORG 25500 ; Adresa odakle se program izvršava. PUT 25500 ; Mesto gde se smešta program. XOR A ; U sistemsku promenljivu LAST_K ; smeštamo LD (23560),A ; nulu, tako da sada možemo da detek- ; tujemo ; kada je pritisnut neki taster za povra- ; tak. LD HL,16384 ; Rutina za brisanje ekrana. LD DE,16385 ; U prvi bajt postavimo nulu, a zatim s LD (HL),A ; njim popunimo ćelu video memoriju. LD BC6911 ; LDIR ; LD HL,tekst ; Početak teksta u memoriji smeštamo u LD (tek),HL ; memorijsku lokaciju, koja se koristi ; ; kao varijabla. LD HL,buffer ; Početak bafera se takode smešta u LD (buff),HL ; memorijsku lokaciju. LD (brojac),A ; U brojač se smešta nula. ispis: LD A,(brojac) ; Uzima se vrednost iz brojača. AND A ; Proverava se da li je nula. JP Z,slovo ; Ukoliko jeste, postavlja se novo slovo. DEC A ; Umanji se brojač za jedan. LD (brojač),A ; I to se sada smešta kao brojač. LD HL,22528+512 ; U HL smeštamo početak atributa ; poslednje trećine ekrana. LD B,8 ; Brojač redova postavljamo na 8. wl: PUSH BC ; Pamtimo lu vrednost. LD B,31 ; U redu imamo 31 karakter. Trideset ; drugi moramo da maskiramo. w2: LD (HL),A ; Postavljamo boju atributa za karakter. INC HL ; Tako radimo za 31 karakter u redu. DJNZ w2 ; POP BC ; Obnavljamo brojač redova. INC HL ; Preskačemo 32. karakter. INC A ; Uvećavamo boju za jedan. CP 8 ; Ukoliko je veća od 8 pozivamo CALL Z,chg ; chg, gde se boja ponovo postavlja ; na početnu vrednost. DJNZ wl ; Idemo na sledeći red. CALL scroll ; Na rutinu za skrol donje trećine. LD B,8 ; Novi brojač postavljamo na 8. LD HL,20480 + 31; Adresa od koje se smešta novo slovo. LD DE,(buff) ; U DE se postavlja početak tablice. toopl: PUSH BC ; Na stek se smeštaju vređnosti PUSH DE ; registarskih aprova BC, DE i HL. PUSH HL ; LD B,8 ; Brojač postavljamo na 8. LD A,(DE) ; Uzimamo prvi podatak iz tablice. AND A ; Da li je nula? JR Z,toop2 ; Ukoliko jeste, idi na toop2. LD IX,tble ; U IX je početak tablice za definiciju ; jedne uvećane tačke. toop3: LD A,(IX + 0) ; Uzima se jedan podatak, LD (HL),A ; a zatim se smešta u video memoriju. INC H ; Sledeći red na ekranu i INC IX ; sledeći podatak iz tablice. DJNZ toop3 ; Crta se ceo karakter. JR nxt2 ; Nastavlja se program. toop2: LD (HL), A ; Postavlja se prazan karakter na ekran. INC H DJNZ toop2 nxt2: POP HL ; Sa steka se uzima stara vrednost za LD DE,32 ; HL a zatim se uvećava za 32 da bi ADD HL,DE ; se dobio početak za sledeći red. POP DE ; Obnavlja se vrednost sa steka, INC DE ; a zatim se uvežava za jedan. POP BC ; Obnavlja se vrednost brojača. DJNZ toopl ; Dok je on različit od nule, petlja ; se ponavlja. LD (buff),DE ; Vrednost se ponavlja u 'buff. LD A,(23560) ; Da li je pritisnut neki taster? AND A ; Ukoliko jeste, vrednost će biti RET NZ ; različita od nule i doći će do povratka. JR ispis ; Ukoliko je nula, program se nastavlja. chg: LD A,l ; Registar A dobija novu vrednost.' RET ; Povratak. change: LD HL.tekst ; Ponovo se postavlja vrednost LD (tek),HL ; početka teksta u memoriji u varijablu LD A,(HL) ; 'tek', a zatim se kod prvog karaktera RET ; smešta u registar A. Povratak. kec: LD A,255 ; U registar A smešta se 255, a zatim JR mrt ; dolazi do povratka scroll: LD HL,20481 ; Postavljaju se početne vređnosti LD DE,20480 ; za skrol ekrana. HALT ; Čeka se da se završi interapt tj. da ; elektronski mlaz dođe u gornji ; deo ekrana. LD B,64 ; Potrebno je skrolovati 64 linije. kop: PUSH BC ; Skrolovanje se vrši LDI LDI ; naredbom, jer je ona mnogo LDI ; brža od LDIR naredbe, ali ; zbog toga prosto guta memoriju. ; U ovom slučaju potrebno je postaviti LDI ; 32 puta, jer jedna LDI instrukcija LDI ; i premešta samo jedan bajt. POP BC ; Pošto imamo 64 linije, to moramo DJNZ kop ; da izvršimo 64 puta. slovo: LD HL,(tek) ; U HL se smešta lokacija, sa koje je ; potrebno uzeti podatak za skrol. LD A,8 ; U brojač se postavlja 8. LD (brojac),A ; LD De,buffer ; Postavlja se ukazivač početka bafera LD (buff),DE ; na fizički početak bafera. LD A,(HL) ; Kod novog karaktera smešta se u A. CP "&" ; Da li je on '&'? CALL Z,change ; Ukoliko jeste, pozovi change. INC HL ; Pomeri pokazivač na sledeći karakter LD (tek),HL ; i zapamti tu vrednost. CALL convert ; Pozivamo potprogram convert. LD B,8 ; Postavljamo brojač ciklusa. LD HL,buffer ; Početak bafera se smešta u HL. m2: PUSH BC ; Pamti se vrednost brojača. LD B,8 ; Novi brojač. LD DE,buffl ; U DE je početak bafera buffl. ml: LD A,(DE) ; Uzima se prvi podatak. RLCA ; Rotira se ulevo. Sedmi bit u CARRY. LD (DE),A ; Dobijena vrednost se zatim ponovo ; smešta u memoriju. JR C,kec ; Ako je CARRY setovan, zovemo 'kec'. XOR A ; Registar A = 0. nxt: LD (HL),A ; Vrednost registra A smešta se u me- ; moriju. INC DE ; Povećava se vrednost DE. INC HL ; Povećava se vrednost HL. DJNZ ml ; Obnovi ciklus. POP BC ; Pokupi vrednost za brojač. DJNZ m2 ; Obnovi ciklus. • JP ispis ; Idi na početak programa. convert:LD L,A ; U registar L se smešta kod karaktera. LD H,0 ; U registru H je nula. Znači, u HL je ADD HL,HL ; kod karaktera. Zatim se množi sa 8, ADD HL,HL ; jer svaki karakter ima 8 bajtova ADD HL,HL ; za svoju definiciju. LD DE, # 3C00 ; Početak definicije karaktera ADD HL,DE ; To se sabira sa vrednošću u HL. LD DE,buffl ; U DE je početak bufferal. moop: LD A, (HL) ; prvi bajt iz definicije ; karaktera. LD (DE),A ; Smešta se u bafer. INC DE ; Povećava se DE. INC HL ; Povećava se HL. DJNZ moop ; Tako se radi osam puta. RET ; Povratak na program. tble: DB 24,36,90,165 ; Tablica za definiciju jednog DB 165,90,36,24 ; karaktera, koji predstavlja ; jednu tačku originalnog karaktera. buffl: DS 8 ; Bafer za jedan red slova. buffer: DS 64 ; Bafer za sve tačke slova. buff: DS 2 tek: DS 2 ; brojač: DS 1 ; tekst: DB „Svet igara 4" ; Tekst koji se skroluje. DB "&" ; Na kraju obavezno mora biti &. Sada sledi i program koji smo vam pripremili za ovaj broj-BIG(l) INTRO MAKER. Da biste ga imali na svojoj kaseti potrebno je da pažljivo prekucate listing sa str. 38 i startujete ga. Ukoliko vam kompjuter ispiše poruku ERROR potrebno je da pronađete grešku, i zatim ponovo startujete program. Ukoliko ste sve dobro uneli kompjuter će od vas zatražiti da stavite kasetu na koju želite da se snimi B.I.M., a zatim će ga i snimiti. Na ovaj način dobili ste još jedan intro program za računar ZX Spectrum. Da biste ga učitali potrebno je da ispred mašinskog dela snimite sledeći BASIC: 10 CLEAR 65535:LOAD "" CODE 27000 20 RANDOMIZE USR 27000: RANDOMIZE USR 4535 • • • Ovo je sve što smo vam pripremili za ovo izdanje Spectrum Intro servisa. Ukoliko vam nešto od ovoga nije bilo jasno, slobodno nam pišite. Adresa je ista: Svet kompjutera Makedonska 31 11000 Beograd (za Spectrum Intro servis) Do čitanja u sledećem broju!