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!
|