				- 3 -

			1. raspredelenie pamqti

		w principe pamqtx podelena na dwe osnownye ~asti: ROM i RAM.
ROM zanimaet adresa 0....16383. RAM 16384...65535. sodervimym ROM my sej~as
zanimatxsq ne budem, no zato wnimatelxno prismotrimsq k pamqti RAM. ona po-
delena na bloki, wypolq`}ie razli~nye funkcii w sisteme bejsika (ris.1).

	--------------------------------------- <-- 0
	! ROM                                 !  
	--------------------------------------- <-- 16384
	! DISPLAY FILE			      !
	--------------------------------------- <-- 22528
	! ATTR				      !
	--------------------------------------- <-- 23296
	! bufer printera		      !
	--------------------------------------- <-- 23552
	! sistemnye peremennye		      !
	--------------------------------------- <-- 23734
	! karta mikrodrajwera 		      !
	--------------------------------------- <-- CHANS (23631) [23734]
	! informaciq o kanalah		      !
	---------------------------------------
	! #80				      !
	--------------------------------------- <-- PROG (23635) [23755]
	! oblastx sistemy bejsika	      !
	--------------------------------------- <--RAMTOP(23730) [65368]
	! #3e				      !
	--------------------------------------- <-- UDG  (23675) [63368]
	! grafika, opredelennaq polxzowatelem !
	---------------------------------------

		ris.1. raspredelenie pamqti

	DISPLAY FILE - oblastx, w kotoroj hranitsq informaciq o tom, wkl`-
		~eny ili poga{eny posledowatelxnye to~ki |krana.
		|to zanimaet 6144 bajta.

	ATTR - |ti 768 bajt (s adresa 22528) opredelq`t cweta posledowatex-
		nyh polej |krana (8*8 to~ek).

	bufer printera - |to oblastx (ot 23296 do 23551) ispolxzuetsq li{x
		wo wremq raboty s printerom. esli ne ispolxzu`tsq instruk-
		cii, kasa`}iesq printera (LLIST, LPRINT, COPY), to ego so-
		dervimoe ne menqetsq, i ego movno ispolxzowatx dlq drugih
		celej. pomni tolxko, ~to ispolxzowanie kakoj-libo iz |tih
		instrukcij, dave bez podkl`~eniq printera, proizwedet w
		|toj oblasti izmeneniq.

	sistemnye peremennye - |ti q~ejki pamqti ispolxzu`tsq sistemoj
		dlq zapominaniq neobhodimyh dlq ego bezo{ibo~noj raboty
		dannyh, takih, kak naprimer, adresa podwivnyh blokow pa-
		mqti, informaciq o wypolnenii programmy w bejsike, t.e.
		kakaq stroka wypolnqetsq, k kotoroj dolven osu}estwlqtx-
		sq perehod, poqwilisx li kakie-nibudx o{ibki i t.p.
				- 4 -

		w |toj oblasti nahodqtsq takve peremennye, soderva}ie kod
		poslednej navatoj klawi{i, prodolvitelxnostx "BEEP" kla-
		wiatury i e}e mnogo drugih. podrobnee my zajmemsq imi poz-
		ve.

		neposredstwenno za sistemnymi peremennymi, kotorye kon~a-
	`tsq adresom 23733, na~ina`tsq tak nazywaemye podwivnye oblasti
	pamqti. |to ozna~aet, ~to adresa ih na~al i koncow (a takve dlina)
	mogut izmenqtxsq w zawisimosti ot togo, podkl`~eny li kakie-nibudx
	wne{nie ustrojstwa, kakowa dlina programmy na bejsike, skolxko ob-
	razuet peremennyh i t.d. Adresa podwivnyh blokow nahodqtsq w soot-
	wetstwu`}ih sistemnyh peremennyh.
		na ris.1 i ris.2 ~islo za strelkoj ozna~aet adres na~ala
	ukazywaemogo bloka. esli |tot adres pereme}aetsq, to wmesto ~isla
	zapisano imq sistemnoj peremennoj, soderva}ej |tot adres, a w sko-
	bkah - adres |toj peremennoj. w kwadratnyh skobkah nahoditsq zna-
	~enie |toj peremennoj, kotoroe ustanawliwaetsq posle wkl`~eniq
	kompx`tera (ili wypolneniq RESET), no bez podkl`~eniq wne{nih
	ustrojstw.

	karta mikrodrajwa - esli k kompx`teru podkl`~en ZX interfejs 1,
		to s adresa 23734 do adresa na 1 menx{ego, ~em sodervimoe
		peremennoj CHANS, nahoditsq karta mikrodrajwa - oblastx,
		ispolxzuemaq kak bufer dlq translqcii dannyh, kak nabor
		dobawo~nyh sistemnyh peremennyh i t.p. esli interfejs ne
		podkl`~en, to oblastx |ta poprostu ne su}estwuet - pere-
		mennaq CHANS sodervit adres 23734. ona opredelqet na~alo
		bloka pamqti, w kotorom sodervatsq dannye o su}estwu`}ih
		kanalah.

	informaciq o kanalah - neobhodima dlq bezo{ibo~nogo wypolneniq
		instrukcij PRINT, LIST, INPUT i podobnyh im. w poslednej
		q~ejke |toj oblasti nahoditsq ~islo #80 (128), oprede-
		lq`}ee konec |togo bloka (|to ukazatelx konca).

	oblastx bejsika - oblastx pamqti sodervit tekst wwedennoj program-
		my na bejsike. adres ee na~ala nahoditsq w peremennoj
		PROG. srazu za tekstom programmy (s adresa, ukazannogo
		peremennoj VARS), nahoditsq oblastx, w kotoroj interpre-
		tator razme}aet peremennye, sozdawaemye programmoj. ona
		zakan~iwaetsq ukazatelem konca. zatem, na~inaq s adresa,
		soderva}egosq w peremennoj E_LINE, nahoditsq oblastx, is-
		polxzuemaq wo wremq redaktirowaniq stroki bejsika, a tak-
		ve wwoda direktiw s klawiatury (t.e. kogda w nivnej ~as-
		ti |krana migaet kursor, i my wwodim instrukci` na bej-
		sike). w konce |toj oblasti nahodqtsq dwa bajta s soder-
		vimym : 13 (ENTER) i 128 (konec oblasti). srazu posle, na-
		~inaq s adresa, ukazywaemogo sistemnoj peremennoj WORKSP,
		nahoditsq podobnaq oblastx, no prednazna~ennaq dlq wwoda
		dannyh wo wremq wypolneniq intErpretatorom instrukcii IN-
		PUT (zawer{ennoj znakom "ENTER"). za buferom INPUT, (koto-
		ryj awtomati~eski udalqetsq posle wypolneniq |toj instruk-
		cii) nahoditsq "teku}ee rabo~ee prostranstwo" - mesto pamq-
					- 5 -


		ti, ispolxzuemoe dlq samyh razli~nyh celej. tuda zagruva-
		`tsq zagolowki s~itannyh s lenty programm, tuda s~itywa-
		etsq programma, razme}aemaq w pamqti s pomo}x` MERGE, pre-
		vde ~em budet prisoedinena k uve su}estwu`}ej programme.

	----------------------------- <-- PROG		(23635) [23755]
 	! programma na bejsike      !
	!---------------------------! <-- VARS		(23627)
	! peremennye bejsika	    !
	!---------------------------!
	! #80			    !
	!---------------------------! <-- E_LINE	(23641)
	! oblastx redaktirowaniq    !
	! stroki bejsika	    !
	!---------------------------!
	! #0D			    !
	!---------------------------!
	! #80			    !
	!---------------------------! <-- WORSP		(23649)
	! bufer INPUT		    !
	!---------------------------!
	! #0D			    !
	!---------------------------!
	! teku}aq rabo~aq oblastx   !
	!---------------------------! <-- STKBOT	(23651)
	! stek			I   !
	! kalxkulqtora		V   !
	!---------------------------! <-- STKEND	(23653)
	! swobodno		    !
	!---------------------------! <-- registr SP
	! ma{innyj		A   !
	! stek			I   !
	!---------------------------! <-- ERRSP		(23613)
	! stek			A   !
	! GOSUB			I   !
	!---------------------------!
	! 1 bajt		I   !
	----------------------------- <-- RAMTOP	(23730) [65367]

		risunok 2. oblastx pamqti sistemy bejsik


		|ta oblastx ispolxzuetsq togda, kogda na opredelennoe wre-
		mq trebuetsq nemnogo swobodnoj pamqti, no tolxko wo wre-
		mennoe polxzowanie. odnako, sisteme bejsika prinadlevit
		oblastx pamqti do q~ejki, ukazywaemoj sistemnoj peremen-
		noj RAMTOP. po |tomu adresu nahoditsq ~islo #3e (62), ko-
		toroe ustanawliwaet konec ispolxzuemoj bejsikom oblasti,
		dwigaqsx po pamqti "wniz", my stalkiwaemsq s odnim ispolx-
		zuemym bajtom (|tot bajt sostawlqet sowmestno s bajtom,
		ukazywaemym s pomo}x` RAMTOP, kak by edinoe dwuhbajtowoe
		~islo (qwlqetsq ego mlad{im bajtom), neobhodimoe dlq wer-
		noj raboty instrukcii RETURN. esli wo wremq ee wypolne-
					- 6 -


		niq stek GOSUB budet uve pust, to |to ~islo ... ego pro-
		dolvenie. no poskolxku ono bolx{e, ~em 15872 (62*256),
		a stroki bejsika ne ime`t takoj wysokoj numeracii, to |to
		budet wosprinimatxsq kak o{ibka i signalizirowatxsq so-
		ob}eniem "RETURN bez GOSUB".). srazu posle |togo bajta,
		(dwigaqsx wse wremq "wniz" po pamqti), na~inaetsq "stek
		GOSUB". w nego zanosqtsq nomera programmnyh strok, iz ko-
		toryh byli wypolneny instrukcii perehoda k podprogramme,
		~toby interpretator znal to~no, kuda dolvna wernutxsq in-
		strukciq RETURN. esli interpretator ne nahoditsq w pod-
		programme (wyzwannoj s pomo}x` GOSUB), to |tot stek pros-
		to ne su}estwuet - w nem ne zapisano ni odnogo zna~eniq.
		nive nahoditsq "ma{innyj stek", neposredstwenno ispolx-
		zuemyj mikroprogrammoj. oba steka otkladywa`tsq w storo-
		nu umenx{eniq adresow pamqti. specialxnu` rolx igraet
		sistemnaq peremennaq ERRSP. procedura, obrabatywa`}aq
		o{ibku bejsika (wyzywaetsq mkpr RSt 8), pome}aet zna~e-
		nie |toj peremennoj w registr SP, posle ~ego wypolnqet 
		RET, s~itywaq takim putem poslednij zapisannyj w steke
		adres (wo wremq wypolneniq programmy on rawen oby~no
		4867). pod tem adresom w ROM nahoditsq procedura, wywo-
		dq}aq soob}enie ob o{ibke.

	grafika, opredelennaq polxzowatelem - 168 bajt, zarezerwirowan-
		nyh dlq opredeleniq znakow UDG (ih movno likwidirowatx,
		naprimer s pomo}x` CLEAR 65535). adres poslednej q~ejki 
		pamqti (rawnoj 65535, esli kompx`ter polnostx` isprawen)
		zapominaetsq w peremennoj P_RAMT. esli ~astx pamqti RAM
		powrevdena, to |ta peremennaq sodervit adres poslednej
		isprawnoj q~ejki.

			2. sposob zapisi programm na lente

		pomni, ~to prakti~eski kavdaq programma imeet hotq by pro-
	ceduru zagruzki, napisannu` na bejsike, a esli ee ne imeet, to wo-
	ob}e ne za}i}ena.
		na~nem so sposoba zapisi programm na lente - pripomni, ~to
	widno i sly{no wo wremq s~itywaniq kakoj-libo programmy. w te~enie
	1 - 2 sek. na |krane widny {irokie krasno-sinie polosy, a takve
	sly{en dlitelxnyj zwuk. |to tak nazywaemyj pilot, kotoryj pozwo-
	lqet kompx`teru sinhronizirowatxsq s signalom s lenty, kotoryj on
	budet s~itywatx. potom, na moment, poqwlq`tsq tonkie, merca`}ie,
	velto-fioletowye poloski, swidetelxstwu`}ie o tom, ~to kompx`ter
	s~itywaet informaci`. ee 17 bajtow - |to zagolowok. poqwlqetsq nad-
	pisx "BYTES:", "PROGRAM:", "CHARAKTER ARRAY:" ili "NUMBER ARRAY:",
	a potom, posle minutnogo pererywa, na~inaetsq wtoroj pilot, bolee
	korotkij, a posle nego na~inaet s~itywatxsq sobstwenno programma.
	zajmemsq teperx zagolowkami, tak kak w nih sodervatsq wavnej{ie
	dannye o s~itywaemyh programmah.
		zagolowok sodervit 17 bajt. pronumeruem ih ot 0 do 16 -
	sm. ris. 3. nulewoj bajt ozna~aet tip bloka. on rawen 0, esli
	|to programma na bejsike; 3 - blok ma{innogo koda, zapispnnyj s
	pomo}x` SAVE "..." CODE ili SAVE "..." SCREEN$, kotorye obozna~a-
				- 7 -


	`t to ve, ~to i SAVE "..." CODE 16384,6912. esli ve |tot zagolo-
	wok pred{estwuet naboru, qwlq`}emusq massiwom peremennyh bejsika,
	zapisannyh s pomo}x` SAVE "..." DATA ..., to on rawen 1 dlq ~is-
	lowyh massiwow ili 2 - dlq simwolxnyh.
		sledu`}ie 10 bajtow - |to imq s~itywaemogo bloka, ili
	tekst, poqwlq`}ijsq posle zagruzki zagolowka za nadpisx` "PROG-
	RAM:", "BYTES:" ili drugoj.
		bajty 11, 12 sodervat dwuhbajtowoe ~islo (perwyj bajt
	mlad{ij), opredelq`}ee dlinu bloka dannyh, k kotoromu otnositsq
	zagolowok.

	---------------------------------------------------------------
	!  0 ! tip bloka ! 0 - programma			      !
	!    !           ! 1 - NUMBER ARRAY (~islowoj massiw)	      !
	!    !           ! 2 - CHARACTER ARRAY (simwolxnyj massiw)    !
	!    !           ! 3 - BYTES (dannye)			      !
	!-------------------------------------------------------------!
	!  1 !							      !
	!  2 !							      !
	!  3 !							      !
	!  4 !							      !
	!  5 !			i m q 				      !
	!  6 !							      !
	!  7 !							      !
	!  8 !							      !
	!  9 !							      !
	! 10 !							      !
	!-------------------------------------------------------------!
	! 11 ! dlina     ! skolxko bajt neobhodimo budet s~itatx      !
	! 12 !           ! s lenty				      !
	!-------------------------------------------------------------!
	! 13 ! start     ! BYTES:	adres zagruzki bloka          !
	! 14 !		 ! PROGRAM:	nomer stroki starta programmy !
	!    !		 ! ARRAY:	bajt 14 - imq peremennoj      !
	!    !		 !		     13 - ne imeet zna~eniq   !
	!-------------------------------------------------------------!
	! 15 ! programma ! PROGRAM:	dlina samogo bejsika	      !
	!    !		 !		(bez peremennyh)	      !
	! 16 !		 ! BYTES, ARRAY: ne ispolxzuetsq	      !
	---------------------------------------------------------------

			ris. 3. 17 bajt zagolowka

		w zawisimosti ot tipa s~itywaemogo bloka, bajty s 13 po
	16 interpretiru`tsq po raznomu. na~nem s zagolowkow programm, na-
	pisannyh na bejsike. bajty 13 i 14 sodervat nomer stroki starta
	programmy, esli ona byla zapisana s pomo}x` SAVE "..." LINE NR.
	esli programma byla zapisana bez opcii LINE i posle s~itywaniq ne
	startuet awtomati~eski, to zna~enie |togo ~isla bolx{e 32767. od-
	nim iz sposobow nejtralizacii samostartu`}ih programm na bejsike
	qwlqetsq zamena |tih dwuh bajtow w zagolowke na ~islo, bolx{ee
	32767.
				- 8 -

		bajty 15 i 16 sodervat ~islo, opredelq`}ee dlinu samoj pro-
	grammy na bejsike, tak kak SAVE "..." ili SAVE "..." LINE zapisy-
	waet programmy wmeste so wsemi peremennymi, t.e. sodervimoe pamqti
	ot bajta, ukazannogo sistemnoj peremennoj PROG do bajta, opredelen-
	nogo peremennoj E_LINE. esli ot wsej dliny bloka (bajty 11 i 12)
	otnimem |to ~islo, to uznaem, skolxko bajtow w |tom bloke zanima`t
	peremennye bejsika. |to wse, esli idet re~x o zagolowkah programm
	na bejsike.
		w zagolowkah ma{innogo koda "BYTES" bajty 15 i 16 ne is-
	polxzu`tsq, zato 13 i 14 sostawlq`t dwuhbajtowoe ~islo, opredelq-
	`}ee, po kakomu adresu nado s~itywatx sledu`}ij za zagolowkom 
	blok.
		w zagolowkah massiwow iz |tih ~etyreh bajtow ispolxzuet-
	sq tolxko 14 -j, kotoryj predstawlqet imq s~itywaemogo massiwa.
	on zapisan takve, kak i imena wseh peremennyh bejsika (w oblasti
	ot VARS da E_LINE), t.e. tri star{ih bajta obozna~a`t tip peremen-
	noj (zdesx |to ~islowoj ili znakowyj massiw), a pqtx mlad{ih baj-
	tow - imq |toj peremennoj.
		na listinge 1 predstawlena programma, realizu`}aq procedu-
	ru, dela`}u` wozmovnym ~tenie zagolowkow programm, zapisannyh na
	lente. posle to~nogo wwoda programmy (wnimatelxno prowerx koli-
	~estwo probelow w strokah s instrukciqmi DATA) zapusti ee s po-
	mo}x` RUN i podovdi minutu. na |krane poqwitsq informaciq ob ad-
	resah na~ala i konca procedury, a takve o ee dline, kotoraq dolv-
	na sostawlqtx 284 bajta. esli |to ne tak, prowerx, wse li stro~ki
	prgrammy wwedeny bez o{ibok. esli wse dannye byli werny, to na
	twoej lente okavetsq procedura "~tec", blagodarq kotoroj ty smo-
	ve{x pro~estx kavdyj zagolowok. posle zapisi ee na lentu, ee mov-
	no udalitx iz pamqti.
		procedura "~tec" budet rabotatx prawilxno, nezawisimo ot
	togo, po kakomu adresu ona budet zagruvena. movno s~itatx ee s
	pomo}x`:

		LOAD "CZYTACZ" CODE adres

	a zatem zapustitx (dave mnogokratno) s pomo}x`:

		RANDOMIZE USR adres

		posle zapuska procedura s~itywaet po adresu 23296 (w bu-
	fer printera) perwyj wstre~ennyj zagolowok. esli iz-za podkl`~en-
	nyh wne{nih ustrojstw |tot adres ne ustraiwaet, to movno ego iz-
	menitx, zamenqq w stroke 200 programmy listinga 1 ~islo 00058
	{estnadcatiri~nym adresom, po kotoromu ty hotel by s~itywatx za-
	golowki (dwe perwye cifry qwlq`tsq mlad{im bajtom |togo adresa).
	~toby posle |toj zameny izbevatx prowerki kontrolxnoj summy w |toj
	stroke, w konce teksta, wzqtogo w kawy~ki, wmesto probela i ~ety-
	reh cifr kontrolxnoj summy pomestitx literu "S" s ~etyrxmq wedu}i-
	mi probelami.
		posle s~itywaniq zagolowka procedura s~itywaet zakl`~en-
	nu` w nem informaci` i wozwra}aetsq w bejsik, no s~itannogo zago-
	lowka ne uni~tovaet, sledowatelxno, esli velae{x prosmotretx ego
	dopolnitelxno, to move{x sdelatx |to, ispolxzuq funkci` PEEK.
				- 9 -

		odnako ~teniq zagolowkow malo, ~toby smo~x wzlomatx bloki,
	zapisannye na lente. neobhodimo e}e znatx, ~to nado sdelatx s |ti-
	mi blokami, ~toby razmestitx ih w pamqti, ne pozwolqq im pri |tom
	na~atx rabotu.
		w slu~ae blokow tipa "BYTES" dostato~no zagruzitx ih pod
	prinuditelxnyj adres wy{e RAMTOP (wy{e q~ejki pamqti, ukazannoj w
	sistemnoj peremennoj RAMTOP), naprimer:

		CLEAR 29999: LOAD " " CODE 30000

		|tot metod rabotaet, esli tolxko s~itywaemyj blok ne o~enx
	dlinnyj (do 40k). bolee dlinnye bloki mogut ne pomestitxsq w pa-
	mqtx - togda neobhodimo razdelitx ih na neskolxko ~astej. skoro my
	rasskavem ob |tom.
		w sl~ae massiwow ih zagruzka ne wyzywaet zatrudnenij - 
	dostato~no primenitx oby~nu` instrukci` LOAD " " DATA ... .
		trudnee s~itywanie programm na bejsike, oni oby~no zapisa-
	ny s pomo}x` SAVE " " LINE ..., a w na~ale stroki, s kotoroj oni
	dolvny wypolnqtxsq, razme}eny instrukcii, za}i}a`}ie programmu 
	ot ostanowa. prostej{ee re{enie - zagruzka programmy ne s pomo}x`
	LOAD " ", a s pomo}x` MERGE " ", no |tot sposob ne wsegda daet re-
	zulxtat. iz |toj beznadevnoj situacii su}estwu`t dwa wyhoda: pod-
	menitx zagolowok programmy ili ispolxzowatx predlagaemu` nive pro-
	grammu "LOAD/MERGE". perwyj sposob osnowan na zamene zapisannogo
	na lente zagolowka na takoj ve, no ne wyzywa`}ij samozapusk prog-
	rammy. movno dlq |togo ispolxzowatx programmy "COPYCOPY" - s~itatx
	zagolowok programmy, navatx "BREAK", a zatem instrukciej LET zame-
	nitx ee parametr START na ~islo, bolx{ee 32767 (t.e. wypolnitx
	LET 1=32768, esli korrektiruemyj zagolowok byl s~itan kak perwyj
	nabor). modificirowannyj takim obrazom zagolowok zapisywaem gde-
	nibudx na lente. ubiraem iz pamqti programmu "COPYCOPY" i wwodim
	LOAD " ". s~itywaem sdelannyj tolxko ~to zagolowok, no srazu pos-
	le ego okon~aniq ostanawliaem lentu. teperx w magnitofon wstawlq-
	em kassetu s programmoj - tak, ~toby s~itatx tolxko tekst program-
	my bez ee zagolowka.
		drugoj sposob namnogo lu~{e. wwodim w pamqtx s klawi{x 
	ili s lenty programmu "LOAD/MERGE" - listing 2. posle zapuska ona
	na~inaet vdatx perwu` programmu na bejsike, nahodq}u`sq na lente.
	s~itywaem ee sower{enno takve, kak instrukciej LOAD " ", no posle
	zagruzki programma ne zapustitsq - wywodit soob}enie "0 ok" i in-
	formaci` s kakoj stroki programma dolvna startowatx.
		na listinge 3 predstawlena procedura, kotoraq obrazuet 
	|tu programmu iz POKE-OB. ee opredelq`}ej instrukciej qwlqetsq
	CALL 1821. na~inaq s adresa 1541 w ROM nahoditsq procedura, in-
	terpretiru`}aq instrukcii SAVE, LOAD, VERIFY, MERGE. CALL 1821
	popadaet w seredinu |toj procedury. ee na~alxnu` ~astx (s~itywa-
	`}u` parametry |tih instrukcij) obhodim, zamenqq ee strokami
	40 - 90 na{ej programmy: sna~ala s pomo}x` RST 48 rezerwiruem 34
	bajta w oblasti WORSP. perwye 17 bajt zapolnq`tsq proceduroj iz
	ROM posle s~itywaniq parametrow wypolnqemoj instrukcii bejsika,
	a wtorye - |to mesto dlq s~itannogo zagolowka. oba |ti zagolowka
	zatem srawniwa`tsq, i pered tem, kak pro~estx blok dannyh prowerq-
	etsq sootwetstwie imeni i tipa bloka. adres swobodnogo mesta pere-
	nosim iz registra DE w IX, w stroke 80 fiksiruem w sistemnoj pere-
				- 10 -

	mennoj T_ADDR, ~to nam nuvna LOAD, a ne naprimer VERIFY. a w per-
	wom bajte zagolowka dlq srawneniq pome}aem zna~enie 255, ozna~a`-
	}ee, ~to dolven bytx s~itan perwyj wstre~ennyj blok (t.e. program-
	ma na bejsike). ostalxnoe beret na sebq procedura iz ROM, dejstwu-
	`}aq identi~no LOAD " ". raznica w wypolnenii LOAD i LOAD/MERGE
	osnowana na tom, ~to posle polnogo s~itywaniq programmy, wmesto 
	wozwrata po RET w interpretator bejsika, my perenosim zna~enie 
	peremennoj NEWPCC (nomer stroki, k kotoroj dolven bytx perehod)
	w PCC (nomer poslednej wypolnqemoj stroki), a takve ne dopuskaem
	samozapuska programmy - wypolnqem RST 8 s soob}eniem "0 OK". bla-
	godarq |tomu perenosu w wywedennom soob}enii budet informaciq o 
	nomere stroki, s kotoroj s~itannaq programma dolvna byla zapus-
	titxsq.

			2.1 listingi programm

		listing 1.

	10 CLEAR 59999: LET POCZ=60000
	20 LET ADR=POCZ
	30 RESTORE: READ A,B,S,D,E,F
	40 DATA 10,11,12,13,14,15
	50 LET NR=200: RESTORE NR
	60 LET S=0: READ A$:IF A$="." THEN GO TO 130
	70 FOR N=110 TO LEN A$-5 STEP 2
	80 LET W=16*VAL A$(N)+VAL A$(N+1)
	90 POKE ADR,W: LET ADR=ADR+1: LET S=S+W
	100 NEXT N
	110 IF VAL A$(N TO)<>S THEN PRINT "DSH.W STROK";NR: STOP
	120 LET NR=NR+10: GOTO 60
	130 PRINT "VSE DANNYE HOROSHO"'"NACHALO:";POCZ'"KONIEC_:_";
          ADR-1'"DLINA_:_";ADR=POCZ
	140 SAVE "CZITACZ" CODE POCZ,ADR-POCZ
	150 REM
	200 DATA "21920009E5DD21005BDDE51111 1246"
	210 DATA "00AF37CD5605DDE130F23E02CD 1531"
	220 DATA "011611C009DD7E00CD0A0CDDE5 1265"
	230 DATA "D113010A00CD3C202A7B5CD1E5 1231"
	240 DATA "D5ED537B5C010900CD3C20DD46 1346"
	250 DATA "0CDD4E0BCD2B2DCDE32DE1DD7E 1664"
	260 DATA "00DD460EDD4E0DC5A7202BEB01 1292"
	270 DATA "1900CD3C20D5DD4610DD4EDFCD 1361"
	280 DATA "2B2DCDE32DD1C178E6C0206EC5 1848"
	290 DATA "011300CD3C20C1CD2B2DCDE32D 1280"
	300 DATA "185BFE03203601700009EB0111  836"
	310 DATA "0018E60D449C75676F9D9B2073 1281"
	320 DATA "616D65676F2070726F6772616D 1313"
	330 DATA "75200D4175746F737461727420 1161"
	340 DATA "2D206C696E696120D2EE1B0181 1239"
	350 DATA "0009EB010900CD3C20C13E1FA0  997"
	360 DATA "F660D7DD7E003D28033E24D73E 1383"
	370 DATA "28D73E29D7E1227B5C3E0DD7C9 1538"
	380 DATA "04081C2020201C000010181030  268"
	390 DATA "100C0008103840380478000D41  430"
	400 DATA "64726573209C61646F77616E69 1357"
	410 DATA "61200D5461626C69636120  862"
	420 DATA "."
				- 11 -

		listing 2.

	1 REM	LOAD/MERGE	TS & RD 1987
	2 FOR N=60000 TO 60025: READ A: POKE N,A: NEXT N
	3 RANDOMIZE USR 60000
	4 DATA 1,34,0,247,213,221,225,253,54,58,1,221,54,1,255,205,29,7
	  42,66,92,34,69,92,207,255

		listing 3.

	10;	LOAD/MERGE
	20;
	30	ORG	60000
	40	LD	BC,34
	50	RST	48
	60	PUSH	DE
	70	POP	IX
	80	LD	(IY+58),1
	90	LD	(IX+1),255
	100	CALL	1821
	110	LD	HL,(23618)
	120	LD	(23621),HL
	130	RST	8
	140	DEFB	255
				- 12 -

			3. za}ita programm na bejsike

		pro~itannaq programma, kak prawilo, ne dolvna wyglqdetx
	"normalxno". naprimer, w programme estx stroka s nomerom 0 ili
	stroki, uporqdo~ennye po ubywani` nomerow, nelxzq wyzwatx EDIT
	ni dlq kakoj stroki, widno podozritelxnu` instrukci` RANDOMIZE
	USR 0, ili prosto ni~ego ne widno, tak kak programma ne pozwolqet
	listatx sebq. esli w programme estx ~to-to neoby~noe, lu~{e pros-
	matriwatx ee drugim sposobom - ne s pomo}x` LIST, a ispolxzuq fu-
	nkci` PEEK.
		odnako, sna~ala my dolvny uznatx, kakim obrazom razme}en
	w pamqti tekst programmy na bejsike. pogramma sostoit iz posledo-
	watelxnosti strok i tak hranitsq w pamqti.
		otdelxnaq stroka programmy wyglqdit tak:

	  MSB   LSB     LSB   MSB
	--------------------------------------------
	!  2 bajta    !  2 bajta   !  ...  !  #0D  !
	!-------------------------------------------
	!nomer stroki !   dlina    ! tekst !  ENTER!
	!             !teksta+ENTER!	   !	   !
	--------------------------------------------

			ris. 4

		ona zanimaet ne menee 5 (a to~nee 6, tak kak tekst pustym
	bytx ne movet) bajtow. dwa perwyh obozna~a`t ee nomer, no on zapi-
	san naoborot, ot wseh oby~nyh dwuhbajtowyh ~isel, hranimyh w pamq-
	ti (MSB - star{ij bajt, LSB - mlad{ij bajt).
		sledu`}ie 2 bajta - |to dlina stroki, t.e. ~islo simwolow,
	soderva}ihsq w stroke, wmeste s zawer{a`}im ee znakom "ENTER" (#0D).
	za |timi bajtami nahoditsq tekst stroki, zakan~iwaemyj "ENTER".
		esli my wwedem taku` stroku:

		10 REM BASIC

	i zapi{em ee, navimaq klawi{u "ENTER", to ona budet zapisana w pa-
	mqtx kak posledowatelxnostx bajtow:

	----------------------------------------------------------------
	!  0  !  10  !  7  !  0 ! 234 ! 66 ! 65 ! 83 ! 73 ! 67 !  13   !
	!---------------------------------------------------------------
	!    10      !     7    ! REM   B    A    S    I    C  ! ENTER !
	!--------------------------------------------------------------!
	    nomer	dlina		tekst

			ris. 5

		parametr "dlina stroki" kasaetsq ee teksta, sledowatelxno,
	hotq stroka zanimaet w pamqti 11 bajt, |tot parametr ukazywaet 
	li{x na 7 bajt: 6 bajt teksta i 1 bajt - "ENTER", zakan~iwa`}ij
	stroku.
		tebe uve ponqtno, na ~em osnowan ~asto primenqemyj tr`k
	so strokoj, ime`}ej nulewoj nomer. dostato~no w perwye dwa bajta
	stroki zanesti ~islo 0 (s pomo}x` POKE), ~toby |ta stroka stala
				- 13 -

	nulewoj. esli my hotim izmenitx nomer perwoj stroki w programme,
	a interfejsy nikakoj bystroj pamqti ne podkl`~eny, t.k. w |tom
	slu~ae izmenqetsq adres na~ala bejsika), to dostato~no napisatx:

		POKE 23755,X: POKE 23765,Y

	i stroka polu~it nomer 256*X+Y. nezawisimo ot ego zna~eniq stroka
	ostanetsq w pamqti tam, gde byla. esli wwedem:

		10 REM NUMBER LINE 10
		20 REM NUMBER LINE 20

		POKE 23755,0: POKE 23756,30

	to perwoj stroke programmy budet priswoen nomer 30, no ona osta-
	netsq w pamqti kak perwaq, a na |krane my polu~im sledu`}ee:

		30 REM NUMBER LINE 10
		20 REM NUMBER LINE 20

		sledowatelxno, ~toby na~atx razblokirowatx programmu, w
	kotoroj ime`tsq nulewye stroki, ili stroki, uporqdo~ennye po uby-
	wani` nomerow, sleduet najti adresa kavdoj stroki i w ih pole
	"nomer stroki" posledowatelxno razme}atx, k primeru, 10, 20, 30...
	w pamqti stroki raspolaga`tsq odna za drugoj, sledowatelxno, s 
	obnaruveniem ih na~al net trudnostej. esli X ukazywaet adres ka-
	koj-nibudx programmnoj stroki, to sledu`}ij adres rawen:

		X+PEEK(X+2)+256*PEEK(X+3)+4

	t.e. k adresu stroki dobawlqetsq dlina ee teksta, uweli~ennaq na 
	4 bajta, t.k. imenno stolxko zanima`t parametry "nomer stroki"
	i "dlina stroki". 
		takoj sposob nahovdeniq na~ala stroki ne dejstwuet, kogda
	primenqetsq drugoj sposob za}ity - falx{iwaq dlina stroki. on os-
	nowan na tom, ~to w pole "dlina stroki" wmesto nastoq}ego zna~eniq
	zapisano o~enx bolx{oe ~islo - porqdka 43 - 65 tysq~. |tot sposob
	primenqetsq ~asto, tak kak delaet newozmovnym s~itywanie program-
	my s pomo}x` MERGE, ~toby ne bylo samostarta. delaetsq |to potomu,
	~to MEGRE zagruvaet programmu s lenty w oblastx WORKSPACE, a zatem
	interpretator analiziruet ws` s~itanu` programmu stroka za strokoj:
	posledowatelxno prowerqet nomer kavdoj iz nih, a zatem razme}aet
	ee w soowetstwu`}em meste oblasti, prednazna~ennoj dlq teksta pro-
	grammy na bejsike. dlq |toj stroki neobhodimo tam podgotowitx so-
	otwetstwu`}ee koli~estwo swobodnyh bajt, "razdwigaq" uve su}estwu-
	`}ij tekst programmy. esli w pole "dlina stroki" stoit o~enx bolx-
	{oe ~islo, to interpretator budet staratxsq sdelatx imenno stolx-
	ko bajtow prostranstwa w oblasti tekstow programmy, ~to |to zawer-
	{itsq soob}eniem "OUT OF MEMORY" ili prosto zawisaniem sistemy.
	~toby pro~estx taku` programmu, ne wyzywaq ee samozapusk, sledu-
	et primenitx sootwetstwu`}`` otmy~ku, taku`, kak predstawlennaq
	w razdele 2 programma "LOAD/MERGE".
				- 14 -

		dopolnitelxnym |ffektom ot primeneniq falx{iwoj dliny qw-
	lqetsq newozmovnostx korrektirowki takoj stroki putem zaneseniq ee
	w pole redaktora, navatiem klawi{i "EDIT". situaciq wyglqdit ana-
	logi~no: operacionnaq sistema staraetsq oswoboditx mesto dlq |tih
	strok w oblasti redaktirowaniq strok bejsika (ot peremennoj E_LINE
	do WORKSP) odnako, |to trebuet sli{kom bolx{ogo koli~estwa swobod-
	noj pamqti, sledowatelxno kon~aetsq tolxko predupreditelxnym zwon-
	kom.
		esli programma za}i}ena |tim sposobom, to adresa o~erednyh
	strok prihoditsq iskatx wru~nu` ili dogadywatxsq, gde oni nahodqt-
	sq, pomnq o tom, ~to kavdaq stroka kon~aetsq znakom "ENTER" (no ne
	kavdoe ~islo 13 ozna~aet "ENTER").
		~toby prosmotretx programmu na bejsike, wwedi taku` stroku:

		FOR N=23755 TO PEEK 23627+256*PEEK 23628: PRINT N;"   ";
		PEEK N,CHR$ PEEK N AND PEEK N>31: NEXT N

	ona posledowatelxno wyswetit: adres, sodervimoe bajta s |tim ad-
	resom, a takve simwol, ime`}ij |tot kod, esli tolxko |to ne upraw-
	lq`}ij simwol (t.e. s kodom 0...31).
		posle smeny numeracii strok i izmeneniq ih dlin sledu`}im
	sposobom za}ity programm qwlq`tsq uprawlq`}ie simwoly, ne pozwolq-
	`}ie posledowatelxno prosmatriwatx programmu, hotq i ne tolxko |to.
		wernemsq k perwomu primeru (stroka "10 REM BASIC"). tekst
	stroki skladywaetsq iz 7 simwolow - kl`~ewogo slowa REM (wse kl`-
	~ewye slowa - instrukcii i funkcii, a takve znaki <=, >= i <> ime-
	`t odnobajtowye kody iz diapazona 165 ... 255. esli ty ne znae{x
	kakie, to wwedi:

		FOR N=165 to 255: PRINT N,CHR$ N: NEXT N

	i oznakomxsq), a takve pqti liter i simwola "ENTER". tak bywaet
	wsegda, esli w stroke nahoditsq instrukciq REM - wse znaki, wwe-
	dennye s klawiatury posle |toj instrukcii, budut razme}eny w tek-
	ste stroki bez malej{ih izmenenij. ina~e wyglqdit situaciq, kogda
	w stroke nahodqtsq drugie instrukcii, trebu`}ie ~islowyh paramet-
	row (a oby~no tak i bywaet). wwedem, naprimer, stroku:

		10 PLOT 10,9

	i posmotrim, kakim obrazom ona zapi{etsq w pamqtx (lu~{e - wwodq
	prwedennu` wy{e stroku FOR N=23755 TO ...). wyglqdit ona tak, kak
	pokazano na ris. 6.:

	----------------------------------------------------------
	!0!10!18!0!246 !49!48!14!0!0!10!0!0!44!57!14!0!0!9!0!0!13!
	!--------------------------------------------------------!
	! 10 ! 18 !PLOT! 1! 0!    10       ! ,! 9!     9      !  !
	!--------------------------------------------------------!
	nomer dlina            nomer                nomer     ENTER

			ris. 6.
				- 15 -

		kak widno, tekst byl modificirowan - posle poslednej cif-
	ry kavdogo ~isla, wystupa`}ego w tekste kak parametr, interpretator
	sdelal 6 bajtow prostranstwa i pomestil tam simwol s kodom 14, a
	takve 5 bajtow, w kotoryh zapisano zna~enie |togo ~isla, no spo-
	sobom, ponqtnym interpretatoru. |to ubystrqet wypolnenie program-
	my na bejsike, t.k. wo wremq wypolneniq programmy interpretator ne
	dolven kavdyj raz perewoditx ~isla iz alfawitno-cifrowogo predstaw-
	leniq (posledowatelxnosti cifr) na pqtibajtowoe predstawlenie, pri-
	godnoe dlq wy~islenij, no gotowoe zna~enie wybiaetsq iz pamqti iz-
	za uprawlq`}ego simwola CHR$ 14. |ta strannaq zapisx takve daet
	bolx{ie wozmovnosti w dele zatrudneniq dostupa k programmam. wo 
	mnogih programmah zagruz~ika (LOADER) prisutstwuet takaq stroka:

		0 RANDOMIZE USR 0: REM ...

	na perwyj wzglqd posle zapuska |ta programma dolvna zateretx ws`
	pamqtx, no tak ne proishodit. posle bolee wnimatelxnogo prosmot-
	ra (s pomo}x` PEEK - stroka FOR N=23755 ...) okazywaetsq, ~to
	posle USR 0 i simwola CHAR$ 14 sowsem net pqti nulej (imenno tak
	w pqtibajtowoj zapisi wyglqdit ~islo nulx. esli |to celoe ~is-
	lo, to w pqtibajtowoj zapisi ono wyglqdit:

		bajt 1		- 0
		bajt 2		- 0 (dlq +) i 255 (dlq -)
		bajt 3 i 4	- posledowatelxno mlad{ij i star{ij
				  (ili dopolnenie do 2 dlq -)
		bajt 5		- 0)

	no, k primeru, 0,0,128,92,0 - |to rawnozna~no ~islu 23770. funk-
	ciq USR ne osu}estwlqet togda perehod po adresu 0, a imenno po 
	23770, a |to kak raz adres bajta, nahodq}egosq srazu posle inst-
	rukcii REM w na{em primere. tam oby~no nahoditsq programma zag-
	ruz~ik, napisannaq na ma{innom qzyke.
		sledu`}im uprawlq`}im simwolom, ~asto primenqemom dlq
	za}ity qwlqetsq CHR$ 8 - "BACKSPACE", ili probel nazad. wyswe~i-
	wanie |togo simwola wyzywaet sdwig pozicii wywoda na odnu pozici`
	wlewo. s ego pomo}x` movno zakrywatx nekotorye pozicii na listin-
	ge, pe~ataq na ih meste drugoj tekst. esli w pamqti posledowatelx-
	no nahodqtsq znaki:

		LET A=USR 0: REM <<<<<<<<<<<<
		LOAD " ": ...

	( < obozna~aet CHR$ 8), to instrukciq LOAD " " i posledu`}ij tekst
	zakro`t pred{estwu`}u` instrukci` LET A=USR 0: . hotq na listinge
	teperx widna tolxko instrukciq LOAD " ", no dalxnej{aq ~astx prog-
	rammy ne zagruvaetsq e`, a ma{innoj programmoj, zapuskaemoj funk-
	ciej USR 0 (~to ne dolvno ozna~atx perehoda k adresu 0. takaq za-
	}ita primenqetsq w zagruz~ike programmy BETA BASIC 1.0.
				- 16 -

			4. "za}itnye" uprawlq`}ie simwoly

		w |tom razdele my poznakomimsq s ostalxnymi uprawlq`}imi
	simwolami. tri iz nih kasa`tsq izmeneniq mesta wywoda, {estx -
	smeny atributow.

			4.1. CHR$ 6 - "COMA CONTROL"

		|tot simwol (uprawlq`}aq zapqtaq) dejstwuet takve kak za-
	pqtaq, otdelq`}aq teksty w instrukcii PRINT, t.e. wywodit stolxko
	probelow (no wsegda ne menee odnogo), ~toby okazatxsq ili w kolon-
	ke 0 ili 16:

		PRINT "1","2"

	a takve

		PRINT "1"+CHR$ 6+"2"

	ime`t identi~noe zna~enie.

			4.2. CHR$ 22 - "AT CTRL"

		|tot simwol (AT uprawlq`}ij) pozwolqet perenositx pozicii
	wywoda w l`boe mesto |krana takve, kak AT w instrukcii PRINT. pos-
	le |togo znaka dolvny poqwitxsq dwa bajta, opredelq`}ie nomer stro-
	ki i nomer kolonki, w kotoroj dolven bytx raspoloven sledu`}ij 
	znak:

		PRINT AT 10,7;"!"

	rawnozna~no

		PRINT CHR$ 22; CHR$ 10; CHR$ 7;"!"

	~toby ubeditxsq, kak sdelatx s pomo}x` |togo simwola listing pro-
	grammy newidimym, wwedi:

		10 RANDOMIZE USR 30000: REM   IS NOT SEE!

	posle instrukcii REM wwedi tri probela, a posle wosklicatelxnogo
	znaka - dwe uprawlq`}ih zapqtyh. ih movno polu~itx neposredstwen-
	no s klawiatury, navimaq posledowatelxno klawi{i: EXTEND (ili oba
	SHIFT wmeste), ~toby polu~itx kursor "E", a zatem klawi{u "6" 
	(kursor smenit cwet na veltyj i DELETE - kursor peresko~it k bli-
	vaj{ej polowine |krana.
		posle wwoda |toj stroki zamenim tri |tih probela na znak
	AT 0,0 s pomo}x`:

		POKE 23774,22; POKE 23775,0; POKE 23776,0

	poprobuem teperx posmotretx programmu. na |krane ne poqwitsq tekst
	wsej stroki - na~alxnaq ee ~astx zakryta nadpisx`, nahodq}ejsq 
	posle instrukcii REM i znaka AT CTRL. takie ve trudnosti woznik-
	nut, esli |tu stroku perenesti w zonu redaktirowaniq (klawi{a EDIT).
				- 17 -

		koordinaty, zadannye w simwole AT CTRL dolvny nahoditxsq
	w pole |krana, t.e. nomer stroki ne movet bytx bolx{e 21, nomer ko-
	lonki - bolx{e 31. zadanie bolx{ih zna~enij w slu~ae PRINT ili
	LIST wyzowet soob}enie "OUT OF SCREEN" i otmenu dalxnej{ego wywo-
	da. esli ve listing polu~en navatiem "ENTER" (awtomati~eskij listing)
	- takve nastupit prekra}enie dalxnej{ego wywoda, a krome togo w 
	nivnej ~asti |krana poqwitsq miga`}ij znak woprosa - signal o{ib-
	ki. sledowatelxno, |to prakti~eski sposob za}ity ot prosmotra teksta
	dlq kavdoj programmy.

			4.3. CHR$ 23 - "TAB CTRL"

		posle |togo simwola (gorizontalxnaq tabulqciq) sledu`t dwa
	bajta, opredelq`}ie nomer kolonki, w kotoru` perenositsq poziciq
	wywoda. oni traktu`tsq kak odno dwuhbajtowoe ~islo (perwyj bajt -
	mlad{ij). poskolxku kolonok tolxko 32, to ~islo beretsq po modul`
	32, t.e. star{ij bajt i tri star{ih bita mlad{ego bajta ignoriru-
	`tsq. wtoroj su}estwennoj storonoj qwlqetsq to, ~to TAB perenosit
	pozici` wywoda s pomo}x` wywoda probela - takve, kak i uprawlq`}aq
	zapqtaq, i sledowatelxno movet bytx ispolxzowan dlq zakrywaniq uve
	nahodq}ihsq na |krane tekstow.

			4.4. simwoly smeny atributow

		|tu gruppu uprawlq`}ih simwolow sostawlq`t simwoly, menq-
	`}ie atributy:

		CHR$ 16 - INK CTRL
		CHR$ 17 - PAPER CTRL
		CHR$ 18 - FLASH CTRL
		CHR$ 19 - BRIGHT CTRL
		CHR$ 20 - INVERSE CTRL
		CHR$ 21 - OVER CTRL

		posle kavdogo iz |tih simwolow obqzatelen odin bajt, uto~-
	nq`}ij o kakom atribute idet re~x. posle simwolow INK i PAPER |to
	mogut bytx ~isla 0 ... 9, posle FLASH i BRIGHT - 0, 1, 8, posle
	INVERSE i OVER - 0 i 1. zadanie drugih zna~enij wyzywaet soob}enie:
	"INVALID COLOUR" i, estestwenno, prerywanie prosmotra programmy.
		wyswe~iwaq programmu, za}i}ennu` uprawlq`}imi simwolami 
	cwetow, prinimaem sledu`}u` posledowatelxnostx dejstwij: esli, 
	prosmatriwaq tekst programmy, my wstre~aem kod znaka PAPER CTRL,
	to zanosim w ego wtoroj bajt zna~enie 0, esli INK CTRL - zna~enie
	7, w ostalxnye uprawlq`}ie cwetami simwoly - zna~enie 0. krome to-
	go udalqem wse me{a`}ie znaki BACKSPACE (CHR$ 8) putem ih zameny
	probelami (CHR$ 32). takve likwidiruem znaki AT CTRL - zamenqem
	s pomo}x` POKE tri bajta simwola na probely. posle takoj korrek-
	tury programmu uve movno listatx bez wsqkih neovidannostej.
		esli ty ho~e{x wzlomatx programmu-zagruz~ik, to ego ne 
	obqzatelxno, da i ne nuvno o~i}atx - wavno uznatx, ~to |ta prog-
	ramma delaet, kakim obrazom zagruvaet w pamqtx i zapuskaet o~ered-
	nye bloki, a ne staratxsq, ~toby ona |to delala "ladno" i byla na-
	pisana ~isto i prozra~no. |to tem bolee wavno, ~to poka ne uzna-
	e{x to~no programmu, lu~{e ne delatx w nej nikakih izmenenij - od-
				- 18 -

	na lowu{ka movet prowerqtxsq drugoj. po|tomu nailu~{ij sposob ras-
	kalywaniq programmy qwlqetsq analiz ee raboty {ag za {agom, s~ity-
	waq posledowatelxnye bajty pamqti:
		
		0 BORDER 0: PAPER 0: INK 0: CLS: PRINT =0,
		"LOADING":: FOR N=0 to 20 STEP 4:
		BEEP .2,N: NEXT N: LOAD " " CODE: PRINT AT 19,0;
		: LOAD " " CODE: PRINT AT 19,0:: LOAD " " CODE:
		PRINT AT 19,0;: LOAD " " CODE: PRINT AT 19,0;:
		LOAD " " CODE: RANDOMIZE USR 24064

		pomni o prawilxnoj interpretacii o~erednyh bajtow: sna~a-
	la 2 bajta nomera stroki, potom dwa bajta sodervanie ee dliny (mo-
	vet bytx falx{iwoj), zatem tekst: instrukciq bejsika, potom ee pa-
	rametry, za kavdym ~islom dopisywaetsq CHR$ 14 i pqtx bajtow, so-
	derva}ih zna~enie |togo ~isla. za parametrami - dwoeto~ie i sledu-
	`}aq instrukciq ili "ENTER" i nowaq stroka programmy.
		|to bylo by wse, esli re~x idet ob uprawlq`}ih simwolah,
	no estx e}e odna we}x, kotoru` nuvno ob'qsnitx, ~toby ne imetx
	nepriqtnostej s ~teniem bejsika. re~x ob instrukcii DEF FN. wwe-
	di i rassmotri stroku:

		10 DEF FN A(A,B$,C)=A+C

	kavetsq, ~to ona dolvna zanqtx w pamqti 19 bajtow (nomer stroki,
	ee dlina, ENTER, a takve 14 wwedennyh simwolow), no |to ne tak.
	interpretator posle kavdogo parametra funkcii pomestil znak 
	CHAR$ 14 i dorezerwirowal za~em-to sledom e}e 5 bajtow. wwedi:

		PRINT FN A(1,"125",2)

	i snowa wnimatelxno prosmotri sodervimoe pamqti s adresa 23755.
	posle perwogo parametra w opredelenii funkcii dalee nahoditsq
	znak CHR$ 14, no posle nego posledowatelxno raspolovilisx: 0, 0,
	1, 0, 0, ~to w pqtibajtowoj zapisi ozna~aet ~islo 1. takve posle
	tretxego parametra funkcii nahoditsq CHR$ 14 i bajty, soderva}ie
	~islo 2. posle parametra B$ takve nahoditsq zna~enie ispolxzowan-
	nogo parametra: CHR$ 14 i pqtx bajtow, kotorye posledowatelxno 
	sodervat: perwyj ne imeet zna~eniq, wtoroj i tretij sodervat ad-
	res, po kotoromu nahoditsq cepo~ka simwolow "123" (wyzow funkcii
	byl osu}estwlen w direktiwnom revime, sledowatelxno, |tot adres
	otnositsq k oblasti redaktirowaniq stroki bejsika), a bajty 4 i
	5 - |to dlina cepo~ki - w na{em slu~ae ona sostawlqet tri znaka.
		pomni ob |tom, ~itaq bejsik s pomo}x` PEEK, a ne LIST.
	inogda slu~aetsq, ~to imenno w |tih bajtah, zarezerwirowannyh 
	dlq dejstwitelxnyh argumentow funkcii, skryty prowerki, oprede-
	lq`}ie rabotosposobnostx programmy ili dave ma{innaq programma,
	zagruva`}aq posledu`}ie bloki (naprimer BETA BASIC 1.0).
		w konce nemnogo o programmah zagruz~ikow. ih zada~ej
	qwlqetsq s~itywanie i zapisx wseh blokow, sostawlq`}ih programmu.
	oby~no oni |to dela`t sposobom, maksimalxno zatrudnq`}im ponima-
	nie ih raboty - tak, ~toby zapusk programmy drugim sposobom, a 
	ne ~erez ee zagruz~ik (ili na praktike wzlom programmy) byl by
	newozmoven. posmotrim zagruz~iki, primenqemye w bolx{instwe prog-
				- 19 -

	ramm firmy ULTIMATE (naprimer ATIC, ATAC, KUIGHTLORF, PENTAGRAM,
	NIGHT SHADE i t.d.). wyglqdqt oni primerno tak:

		FOR N=23755 to PEEK 23627+256*PEEK 23628:
		PRINT N;"   ";PEEK N, CHAR$ PEEK N AND PEEK N>31:
		NEXT N

		posle takogo zagruz~ika na lente nahodqtsq 5 sledu`}ih
	blokow: |kran, zakodirowannyj glawnyj blok programmy, a za nimi
	tri korotenxkih bloka, za}i}a`}ih programmu: odnobajtowyj (kod
	instrukcii JP(HL), iz neskolxkih bajtow (|to procedura, kotoraq
	dekodiruet ws` programmu), i poslednij dwuhbajtowyj, zagruvaemyj
	po adresu 23672, ili w peremennu` FRAMES. zna~enie |toj peremen-
	noj uweli~iwaetsq na 1 ~erez kavdye 1/50 sekundy. w ma{innoj pro-
	gramme, zapu}enoj s pomo}x` RANDOMIZE USR 24064, ee zna~enie pro-
	werqetsq, i esli otli~aetsq ot togo, kakim dolvno bytx (~to ozna-
	~aet, ~to gde-to posle zagruzki programma byla ostanowlena na ka-
	koe-to wremq), nastupaet obnulenie pamqti. wzlom programm |togo 
	tipa wesxma prost. dostato~no zagruzitx wse bloki, za iskl`~eniem
	poslednego, a posle prosmotra programmy, ili ve prowedeniq w nej
	opredelennyh izmenenij (naprimer wpisanie POKE) dostato~no li{x
	wwesti

		LOAD " " CODE: RANDOMIZE USR 24064

	(no obqzatelxno w odnoj stroke, razdelqq instrukcii dwoetO~iem),
	~toby pustitx igru. LIN 0 otdelxnoj rabotoj qwlqetsq dekodirowa-
	nie programm, ili zapusk procedurki, dekodiru`}ej tak, ~toby ona
	po zawer{eni` raboty wernulasx w bejsik. u ~itatelej, zna`}ih
	assembler, |to ne dolvno wyzywatx zatrudnenij, odnako s to~ki zre-
	niq na rasprostranennostx |togo tipa za}ity, osobenno w polxzowa-
	telxskih programmah (naprimer, ART STUDIO ili LAST WORD) my e}e
	wernemsq k |toj teme.

				- 20 -

			
			5. za}ita zagruz~ikow

		wse igry ime`t o~enx horo{o za}i}ennu` programmu, napisan-
	nu` na bejsike, tak kak |to wavnej{ij (s to~ki zreniq dejstwennos-
	ti za}ity) |lement wsej programmy - wedx s bejsika na~inaetsq s~i-
	tywanie wsej programmy. esli bejsikowyj zagruz~ik za}i}en slabo, 
	to wzlom wsej programmy zna~itelxno upro}aetsq - primerom |togo qw-
	lq`tsq zagruz~iki firmy ULTIMATE, predstawlennye w predydu}em raz-
	dele. odnim iz sposobow snqtiq za}ity zagruz~ikow qwlqetsq s~ity-
	wanie ih s pomo}x` programmy "LOAD/MERGE" (sm. razdel 2.). odnako,
	inogda lu~{e pomestitx |tot zagruz~ik ne w pamqti, prednazna~ennoj
	dlq bejsika, a wy{e RAMTOP, ~toby movno bylo spokojno prosmatriwatx
	ego, ne opasaqsx wozmovnosti slu~ajnyh izmenenij w nem.
		dlq |togo estx o~enx dejstwennyj metod - s~itywanie prog-
	rammy na bejsike kak bloka ma{innogo koda pod udobnyj dlq nas ad-
	res. ~toby |togo dobitxsq, trebuetsq znatx dlinu programmy, koto-
	ru` my hotim s~itatx (movno ispolxzowatx proceduru "CZYTACZ" iz 
	razdela 2.), hotq movno obojtisx i bez dliny. krome togo, trebuet-
	sq nemnogo swobodnogo mesta na magnitnoj lente. |tot sposob osno-
	wan na obmane instrukcii LOAD putem podmeny zagolowkow.
		na swobodnoj lente zapisywaem zagolowok bloka koda s po-
	mo}x` SAVE "BAS" CODE 30000,750, esli znaem, ~to dlina programmy
	sostawlqet 750 bajtow. esli ee ne znaem - podaem sootwetstwenno
	bolx{ee zna~enie porqdka kilobajt ili dave desqtkow kilobajt, ho-
	tq programma movet imetx wsego li{x 100 bajt dliny. na lente za-
	pisywaem tolxko sam zagolowok, prerywaq zapisx posle |togo nava-
	tiem klawi{i "BREAK". teperx ustanawliwaem lentu to~no pered za-
	pisannym zagolowkom, a lentu s programmoj - srazu posle zagolowka
	programmy, no pered trebuemym blokom dannyh. wwodim:

			CLEAR 29999: LOAD " " CODE

	ili:

			CLEAR 29999: LOAD " " CODE 30000

	i s~itywaem zagolowok. srazu posle ego s~itywaniq my navimaem STOP
	w magnitofone, zamenqem kassetu i wnowx navimaem pusk (wse |to wre-
	mq kompx`ter vdal blok dannyh). teperx s~itywaetsq programma na bej-
	sike, no pod adres 30000 - wy{e RAMTOP. esli my zadali w zagolowke
	zawy{ennu` dlinu programmy, to s~itywanie kon~aetsq soob}eniem 
	"TAPE LOADING ERROR", no |to ne me{aet - teperx uve l`bym sposo-
	bom movno smotretx s~itannu` programmu. dave nabiraq s |toj celx`
	programmu na bejsike.
		krome |togo metoda su}estwuet i wtoroj, no dlq togo, ~toby 
	im wospolxzowatxsq, obqzatelxno znanie assemblera (a polxzowatxsq
	stoit, tak kak on daet bolx{ie wozmovnosti dlq raskrytiq programm,
	a znanie ee pozwolqet oby~no ras{ifrowatx rabotu zagruz~ika).
		o~enx ~asto (osobenno w nowej{ih programmah) wstre~a`tsq
	bloki programm, zapisannye i s~itannye w pamqtx kompx`tera bez za-
	golowka. |to dostato~no originalxnaq i |ffektiwnaq mera za}ity
	oby~no otpugiwaet na~ina`}ih, no raskrytie takoj prorammy wowse
	ne qwlqetsq trudnym. wsq tajna osnowana na ispolxzowanii hranq-
	}ihsq w ROM SPECTRUM procedur, ispolxzuemyh s pomo}x` instrukcii
	LOAD, SAVE, VERIFY, MERGE.
				- 21 -

		pod adresom #0556 (1366) nahoditsq procedura LOAD-BYTES,
	s~itywa`}aq s magnitofona blok dannyh, ili pilota i sledu`}u` za
	nim informaci`. pri |tom ne wavno, budet li |to zagolowok, ili
	trebuemyj blok dannyh, kotorye sleduet razmestitx gde-to w pamq-
	ti.
		na~nem sna~ala. kavdaq za}i}ennaq programma na~inaetsq s
	zagruz~ika, napisannogo na bejsike. programma, primenq`}aq zagruz-
	ku bez zagolowkow (s pomo}x` procedury 1366 ili drugoj), dolvna
	bytx napisana w ma{innom kode, kak kavdaq procedura, obsluviwa`-
	}aq magnitofon. ~a}e wsego |ta programma pome}aetsq w odnoj iz st-
	rok bejsika, naprimer posle instrukcii REM, ili w oblasti peremen-
	nyh bejsika. posle s~itywaniq zagruz~ik na bejsike zapuskaetsq i
	wypolnqet instrukci` RANDOMIZE USR ... , iniciiruq tem samym rabo-
	tu ma{innoj programmy.
		procedura LOAD-BYTES trebuet sootwetstwu`}ih whodnyh para-
	metrow, oni pereda`tsq w sootwetstwu`}ie registry mkpr. tak w re-
	gistre IX zadaem adres, pod kotoryj hotim pro~estx blok dannyh, a
	w pare DE - dlinu |togo bloka. w registr A pome}aem 0, esli hotim s~i-
	tatx zagolowok i 255, esli |to blok dannyh. krome togo ukazatelx
	perenosa (CARRY) ustanawliwaem w 1, tak kak ina~e procedura 1366
	wmesto LOAD wypolnila by funkci` VERIFY. nive dan primer procedu-
	ry, zagruva`}ej s lenty obraz bez zagolowka:

		LD	IX,16384;	adres s~itywaniq
		LD	DE,6912;	dlina bloka
		LD	A,255;		blok dannyh
		SCF;			ustanowka CARRY
		CALL	1366;		wyzow LOAD-BYTES
		RET;			wyhod iz podprogrammy

		procedura 1366 w slu~ae o{ibki s~itywaniq ne wywodit soob-
	}eniq "TAPE LOADING ERROR". no su}estwyet e}e odna procedura zag-
	ruzki, kotoraq |to delaet. ona nahoditsq po adresom 2050 i wyglq-
	dit tak:

		2050	CALL	1366;	s~itywanie bloka dannyh
		2043	RET	C;	wozwrat esli ne bylo o{ibki
		2054	RST	8;	ina~e RST 8 s soob}eniem
		2055	DEFB	26;	"TAPE LOADING ERROR"

		posle wozwrata iz procedury 1366 ukazatelx perenosa soder-
	vit informaci` o prawilxnosti s~itywaniq bloka. esli on udalen,
	to |to ozna~aet, ~to nastupila o{ibka. nekotorye zagruz~iki ispolx-
	zu`t imenno proceduru 2050, a ne 1366.
		inogda zagruz~iki ne polxzu`tsq ni toj, ni drugoj procedu-
	rami, a zamenq`t ih sobstwennoj, no ona oby~no o~enx pohova na pro-
	ceduru 1366 ili dave qwlqetsq ee peredelkoj, blagodarq kotoroj blo-
	ki dannyh zagruva`tsq w nivn`` ~astx pamqti - s bolx{ih adresow k
	nivnim, ili zagruzka idet s drugoj skorostx`. taku` programmu sle-
	duet analizirowatx s pomo{x` dizassemblera (naprimer MONS), sraw-
	niwaq nekotorye ee fragmenty s tem, ~to nahoditsq w ROM.
		sej~as my ob'qsnim, kak ispolxzowatx procedury iz ROM dlq
	s~itywaniq bejsika pod l`boj adres, a ne w oblastx, prednazna~en-
	nu` dlq nego: sna~ala s pomo}x` "CZYTACZ" pro~itaem zagolowok prog-
					- 22 -

	rammy, kotoru` my hotim wskrytx i zapominaem ee dlinu (t.e. dlinu
	wsego bloka - programmu wmeste s peremennymi). zatem wwodim soot-
	wetstwu`}`` programmu na assemblere, kotoraq pro~tet bejsik pod
	adres, kotoryj my ustanowim (wy{e RAMTOP):

		LD	IX,adres
		LD	DE,dlina
		LD	A,255
		SCF	
		JP	2050

		takve, kak i pri podmene zagolowka, esli my ne znaem dli-
	ny programmy, to movem zadatx zawy{ennoe zna~enie, no togda ~tenie
	zawer{itsq soob}eniem "TAPE LOADING ERROR". no s~itywanie assemb-
	lera kavdyj raz, ~toby wwesti programmu, priwedennu` wy{e movet
	wyzywatx razdravenie, sledowatelxno lu~{e sozdawatx |tu program-
	mu s urownq bejsika s pomo}x` POKE:

		10 INPUT "READ ADRES BASIC ?";A
		20 RANDOMIZE A: CLEAR A-1
		30 LET A=PEEK 23670:LET B=PEEK 23671
		40 LET ADR=256*B+A
		50 INPUT "DLINA BASIC ?";C
		60 RANDOMIZE C: LET C=PEEK 23670
		70 LET D=PEEK 23671
		80 FOR N=ADR to ADR+11
		90 READ X: POKE N,X
		100 NEXT N
		110 DATA 221,33,A,B,17,C,D,62,255,195,2,8
		120 RANDOMIZE USR ADR

		ustanawliwaem lentu s obrabatywaemoj programmoj za ee za-
	golowkom. zatem zapuskaem programmu, priwedennu` wy{e, wwodim dan-
	nye i wkl`~aem magnitofon. rezulxtat analogi~en tomu, kotoryj polu-
	~aetsq pri podmene zagolowka, no perwym ve widimym dostoinstwom qw-
	lqetsq to, ~to my ne sozdaem besporqdok na kassetah.
		w zawer{enie stoit wspomnitx e}e ob odnoj procedure, raz-
	me}ennoj w ROM pod adresom 1218. |to procedura SAVE-BYTES, obrat-
	naq LOAD-BYTES, t.e. zapisywa`}aq na lentu blok s zadannymi para-
	metrami: pered ee wyzowom w registre IX razme}en adres, s kotoro-
	go na~netsq zapisx, DE sodervit dlinu zapisywaemogo bloka. w regist-
	re A pome~aem, dolven li |to bytx zagolowok (0), ili blok programmy
	(255). sostoqnie ukazatelq CARRY zna~eniq ne imeet.

			6. ispolxzowanie sistemnyh procedur

		w predudu}em razdele byli predstawleny procedury iz ROM:
	SAVE-BYTES i LOAD-BYTES. zdesx rasskazywaetsq, kak |ti procedury
	ispolxzu`tsq dlq za}ity programm. zajmemsq blokami ma{innogo koda,
	kotorye zapuska`tsq udiwitelxnym obrazom.
		perwym takim sposobom qwlqetsq prikrytie zagruz~ika blo-
	kom, kotoryj im zapuskaetsq. 0 takaq za}ita primenqetsq w igre
	"tri nedeli w paradiz-siti". prosledim sposob ~teniq |toj prog-
	rammy tak, ~toby ona ne startowala awtomati~eski.
				- 23 -

		na~nem s bejsika. okazywaetsq edinstwennoj wavnoj inst-
	rukciej qwlqetsq RANDOMIZE USR. lu~{e wsego wosstanowitx |tu pro-
	ceduru na~inaq s adresa zapuska RANDOMIZE USR (PEEK 23627+256*
	PEEK 23628), t.e. w na{em slu~ae s adresa 24130. podobnye proce-
	dury ispolxzu`t izwestnu` nam proceduru 1366, s~itywa`}u` bloki 
	bez zagolowka. tak i w |tom slu~ae, no pered ee wyzowom s pomo}x`
	komandy LDIR procedura zagruzki perenosit sama sebq w konec pamq-
	ti (pod adres 63116) i perehodit tuda po komande JP:

		24130	DI;			zapret prerywanij
		24131	LD	SP,0;		LD   SP,65536
		24134	LD	HL,(23627);	w HL adres na 28
		24137	LD	DE,28		bolx{e ~em zna~enie
		24140	ADD	HL,DE;		peremennoj VARS
		24141	LD	DE,63116;	w DE adres, a w
		24144	LD	BC,196;		BC dlina bloka
		24147	LDIR;
		24149	JP	63116;		prodolvenie wypolneniq
		-----------------------------	programmy s drugogo
		24152	LD	IX,16384;	adresa
		24156	LD	DE,6912;
		...

	teperx s~itywaetsq kartinka, a zatem glawnyj blok dannyh:

		63116	LD	IX,16384;	podgotowka zagruzki
		63120	LD	DE,6912;	kartinki na |kran
		63123	LD	A,255;		s pomo}x` procedury
		63125	SCF;			LOAD-BYTES iz ROM
		63126	CALL	1366;
		63129	LD	IX,26492;	parametry glawnogo
		63133	LD	DE,38582;	bloka programmy,
		63136	LD	A,255;		kotoryj s~itywaqsx
		63138	SCF;			zatiraet |tot proc.
		63139	CALL	1366;		s~itywanie bloka
		----------------------------
		63142	JP	NZ,+79;		posle wozwrata iz
		63144	CP	A;		procedury 1366 zdesx
		63146	CALL	65191		uve nahoditsq drugaq
		63149	JP	NC,-2;		programma

		no sposob zapuska s~itannoj programmy trebuet poqsnenij.
	kak wy znaete, kavdaq instrukciq CALL zanosit w ma{innyj stek ad-
	res, s kotorogo na~inaet rabotatx programma posle wyhoda iz pod-
	programmy. w |tom zagruz~ike posle wypolneniq wtoroj instrukcii
	CALL 1366 w stek zanositsq adres komandy, sledu`}ej za CALL, t.e.
	63142 i procedura zagruzki samym oby~nym sposobom zatiraet sama
	sebq, tak kak s~itywaet bajty s magnitofona w tu oblastx pamqti,
	gde ona byla razme}ena. su}estwennoe zna~enie imeet sposob zapus-
	ka s~itywaemoj programmy: procedura 1366 kon~aetsq instrukciej 
	RET, kotoraq ozna~aet perehod po adresu, zapisannomu w stek, ili,
	w na{em slu~ae, po adresu 63142. w processe s~itywaniq programmy
	procedura, kotoraq nahodilasx tam, byla zamenena s~itannoj prog-
	rammoj, no mkpr |togo ne zame~aet - on wozwra}aetsq po adresu, s
				- 24 -

	kotorogo wypolnen CALL 1366, ne obra}aq wnimaniq, ~to tam nahodit-
	sq uve sower{enno drugaq programma. |to shemati~no predstawleno
	na ris. 7:

	 programma-zagruz~ik			zagruvaemaq programma
	  ---------------			    --------------
	 *! LD    A,255 !	63136		    !   (254)    !
	 *! 		!	63137		    !   (254)	 !
	 *! SCF		!	63138		    !    (75)	 !
	 *! CALL  1366	!	63139		    !   (254)	 !
	 *!		!	63140		    !   (255)	 !
	 *!		!----	63141		    !   (255)	 !
	  ! JP  NZ,+79  !   !	63142		--->!  DI	 !
	  !		!   V	 ...		!   !  LD SP,0   !*
	  ! CP	 A	!  -----------------------  !		 !*
	  ! CALL 65191  !  !      LOAD-BYTES     !  !		 !*
	  !		!  !	     1366	 !  ! LD HL,28267!*
	  !		!  -----------------------  !		 !*
	  ---------------			    --------------
				ris. 7.

		s lewoj storony raspisano sodervimoe pamqti do, a s prawoj
	posle s~itywaniq programmy. komandy, otme~ennye zwezdo~kami (*),
	lovatsq na wypolnqemu` programmu.
		kak raspoznatx za}itu dannogo tipa i kak ee likwidirowatx.
	na~inaem s bejsika, s~itywaem zagruz~ik (w assembler) i opredelqem
	adresa okon~aniq s~itannyh blokow (dobawlqq k adresu na~ala registr
	IX dlina bloka - registr DE). esli kakoj libo iz blokow nakrywaet
	proceduru zagruzki, to |to ozna~aet, ~to programma s~itywaetsq i za-
	puskaetsq imenno |tim sposobom.
		dalee dostato~no, opiraqsx na dannye o blokah (adres, dlina),
	napisatx korotenxku` proceduru, zagruva`}u` interesu`}ij was blok
	koda ili podgotowitx sootwetstwu`}ij zagolowok, zatem s pomo}x`
	CLEAR ADR ustanowitx sootwetstwu`}im obrazom ma{innyj stek (~toby
	s~itywaemaq programma ne uni~tovila stek) i, nakonec, s~itatx pro-
	grammu. posle wypolneniq w nej neobhodimyh izmenenij zapisywaem ee
	na lentu, no takim ve obrazom, kakim byl zapisan original (dlina
	dolvna sowpadatx prevde wsego). esli |tot blok byl bez zagolowka
	(a tak i estx w na{em slu~ae), to zapisywam ego oby~nym
	SAVE "..." CODE ... , no opuskaq zagolowok, t.e. wkl`~aem magni-
	tofon tolxko w pererywe mevdu zagolowkom i blokom koda. takve mov-
	no probowatx zapuskatx s~itannyj blok perehodom na trebuemyj adres
	komandoj RANDOMIZE USR ... , no |to ne wsegda movet polu~itxsq. w
	igre "tri nedeli w paradiz-siti" |tim adresom kone~no budet 63142
	i kak ty move{x ubeditxsq, |tot metod srabatywaet.
		drugim sposobom zapuska blokow ma{innogo koda qwlqetsq 
	s~itywanie programmy w oblastx ma{innogo steka. |tim sposobom mov-
	no zapuskatx bloki ma{innogo koda, zagruvaq ih prosto ~erez
	LOAD " " CODE. |tot metod shemati~no predstawlen na ris. 8:
				- 25 -

				    ma{innyj stek
	   			-------------------
		65356		!		  !
		65357		!	. . .	  !
	    reg. SP ----------->!	1343	  !
		65359		!		  !
		65360		!	2053	  !
		65361		!	    -
		65362		!  7030     !	65368	   !
		65363		!	    !		   !
		65364		!  4867	    !	  ?	   !
		65365		!	    !		   !
		65366		!     ?	    !	  ?	   !
	    RAMTOP ------------>!    62	    !	 62	   !
		65368		!	    !  LD  IX	   !
		65369		!	    !	       ... !
		65370		!	    !  LD  DE	   !
					    !	       ... !

				ris. 8.

		ukazatelx steka (registr SP) prinimaet pokazannoe na ris.
	8 sostoqnie w processe wypolneniq procedury 1366 (wyzwannoj iz 
	bejsika ~erez LOAD " " CODE). sposob zapuska programmy summarno 
	o~enx prost. adres s~itywaniq bloka ras~itan tak, ~to blok s~ity-
	waetsq na ma{innyj stek imenno s togo mesta, w kotorom nahoditsq
	(zapisannyj interpretatorom bejsika) adres wozwrata iz instrukcii
	LOAD " " CODE.(on togda rawen zna~eni` sistemnoj peremennoj 
	ERRSP-2) ili prqmo iz procedury LOAD-BYTES (rawnyj ERRSP-6).
	togda dwa perwyh bajta programmy obozna~a`t adres ee zapuska. |tot
	sposob o~enx pohov na predydu}ij, za iskl`~eniem togo, ~to tam 
	podmenqlasx procedura zagruzki, a zdesx - adres wozwrata iz |toj
	procedury ili prosto adres wozwrata iz instrukcii LOAD. posle s~i-
	tywaniq bloka koda mkpr s~itywaet sodervimoe steka i perehodit po
	pro~itannomu adresu (kotoryj tolxko ~to poqwilsq w pamqti wmeste
	so s~itannoj). po |tomu adresu w programme nahoditsq na~alo pro-
	cedury zagruzki ee posledu`}ih blokow - |to widno na ris. 8.
		metod obhoda |toj za}ity tove wesxma prost. dostato~no
	zamenitx RAMTOP na sootwetstwenno nizkoe zna~enie, a zatem pro~i-
	tatx blok koda, kotoryj blagodarq |tomu ne zapustitsq. situaciq
	movet oslovnitxsq, esli blok o~enx dlinnyj (~to slu~aetsq redko)
	- togda my dolvny postupitx s nim takve, kak i s kavdym dlinnym
	blokom, no pomnitx, s kakogo adresa on zapuskaetsq.
		zajmemsq teperx ras~leneniem blokow koda s dlinoj, pre-
	wy{a`}ej 42k. wzlom blokow |togo tipa osnowan na razdelenii ih
	na takie fragmenty, ~toby w pamqti e}e ostalosx mesto dlq MONS-A
	ili drugogo assemblera, isprawlenie |tih fragmentow, a zatem ih
	skleiwanie w odno celoe, libo napisanie nowoj procedury zagruzki.
	oby~no dostato~no razdelitx dlinnyj blok na dwe ~asti. ~toby po-
	lu~itx perwu`, ispolxzuem proceduru 1366, no s drugimi parametra-
	mi (ne s temi, kotoryh trebuet razdelennyj na ~asti blok. ranee
	iz procedury zagruzki ili esli takoj net, to iz zagolowka |togo
	bloka polu~aem dlinu i adres zagruzki). prosto zadaem adres, po 
	kotoromu hotim razmestitx |tot blok (wy{e RAMTOP), a takve dlinu
				- 26 -

	primerno 16K (nesmotrq na to, ~to |tot blok zna~itelxno dlinee).
	s~itywaem teperx |tot blok ~erez CALL 1366 ili CALL 2050, no wo
	wtorom slu~ae soob}enie "TAPE LOADING ERROR", kotoroe poqwitsq, 
	ne dast nam nikakoj informacii o wernosti s~itywaniq - zagruvaem
	~astx bloka i, sledowatelxno, bez kontrolxnogo bajta, kotoryj na-
	hoditsq w konce. s~itannu` takim obrazom ~astx bloka zapisywaem 
	na lentu i pristupaem ko wtoroj ~asti. ee s~itywanie trudnee, no
	tove wozmovno, nesmotrq na ograni~eniq po pamqti. dostato~no is-
	polxzowatx tot fakt, ~to w SPECTRUM su}estwuet 16k ROM zapisx w
	kotorye prosto newozmovna. naprimer, wyzywaem proceduru 1366 s
	adresom ~teniq, rawnym 0 i na~alxnye 16k s~itywaemogo bloka bu-
	dut poterqny, a w pamqtx RAM s~ita`tsq tolxko sledu`}ie 32K
	ili menx{e (w zawisimosti ot dliny bloka). s~itannyj blok zaj-
	met w pamqti RAM adresa s 16384 i dalx{e, zahodq na sistemnye
	peremennye i ostawlqq bez izmenenij li{x te bajty, adresa koto-
	ryh bolx{e dliny bloka. po|tomu neobhodimo pozabotitxsq o tom,
	~toby ma{innyj stek, a takve zapisannu` nami proceduru zagruzki
	razmestitx w konce pamqti. nado takve pomnitx o tom, ~to sistema
	bejsika budet uni~tovena, i zapisatx srazu s~itannyj blok na len-
	tu movno tolxko proceduroj, napisannoj na assemblere. krome togo
	w promevutkah wremeni mevdu s~itywaniem  fragmenta bloka i ego
	zapisx` nelxzq razblokirowatx prerywaniq, tak kak oni izmenqt so-
	dervimoe q~eek s adresami 23552-23560, a takve 23672-32673, a tam
	nahoditsq s~itannyj blok. ~toby wypolnitx |to poslednee uslowie,
	wojdem w seredinu procedury 1366, blagodarq ~emu posle s~itywaniq
	bloka ne budet wypolnena procedura 1343. imenno ona e}e i razblo-
	kiruet prerywaniq. s pomo}x` CLEAR 64999 perenosim ma{innyj stek,
	a s adresa 65500 pome}aem proceduru zagruzki:

		ORG	65000;		
		LD	IX,0;		adres s~itywaniq
		LD	DE,DL;		dlina bloka
		LD	A,255;		podgotowka k
		SCF;			s~itywani` bloka
		INC	D;		takim sposobom
		eX	AF,AF';		zamenqem na~alo
		DEC	D;		procedury 1366
		DI;			a zatem whodim
		LD	A,15;		w ee seredinu
		OUT	(254),A;
		CALL	1378;
		LD	A,0;		~ernaq ramka
		JR	C,0K;		budet ozna~atx
		LD	A,7;		wernoe s~itywanie
	OK	OUT	(254),A;	belaq - o{ibo~noe
	CZEKAJ	LD	A,191;		ovidaem navatiq
		IN	A,(254);	"ENTER"
		RRA;
		JR	C,CZEKAJ;
		LD	IX,0;		zapisx s~itannogo
		LD	DE,DL-16384;	bloka koda na
		LD	A,255;		lentu
		CALL	1218;		a takve
		LD	HL,64999;	inicializaciq
		JP	4633;		sistemy bejsika
				- 27 -

		wmesto togo, ~toby s~itywatx assembler i wwoditx |tu pro-
	grammu, movno zapustitx programmu na bejsike, predstawlennu` na 
	listinge A:
				listing a

		10 CLEAR 64999
		20 INPUT "DLINA BLOKA ?";DL
		: RANDOMIZE DL: LET X=PEEK 23670
		: LET Y=PEEK 23671:LET S=0
		30 FOR N=65000 to 65053: READ A
		: LET S=S+A: POKE N,A:NEXT N
		40 IF S<>5254+2*(X+Y)-64 THEN
		PRINT "OSHIBKA V DANNYH"; STOP
		50 PRINT "VSE DANNYE OK"
		"VKLUSHI MAGNITOFON"
		60 RANDOMIZE USR 65550
		70 DATA 221,33,0,0,17,X,Y,62,2,
		55,55,20,8,21,243,62,15,211,254
		80 DATA 205,98,5,62,0,56,2,62,
		7,211,254,62,191,219,254,31,56
		90 DATA 249,221,33,0,0,17,X,Y-64,
		62,255,205,194,4,33,231,253,202,25,18

		kak wyglqdit razdelenie bloka ? ustanawliwaem lentu na blo-
	ke koda, kotoryj velaem razdelitx. esli on imel zagolowok. ne pu-
	gajsq, esli w opredelennyj moment uwidi{x, ~to programma s~itywa-
	etsq na |kran - tak dolvno bytx. posle zagruzki bloka cwet ramki
	signaliziruet prawilxnostx s~itywaniq: esli ramka ~ernaq, to wse
	w porqdke, esli belaq - byla o{ibka. togda wstawx w magnitofon 
	drugu` kassetu, wkl`~i zapisx i navmi "ENTER". programma zapi{et-
	sq na lentu, a potom procedura wernetsq w bejsik, inicializiruq
	sistemu soob}eniem "(C) 1982 ...", no ne o~i}aq pamqtx (uni~tova-
	tolxko oblastx ot na~ala |krana do primerno 24000 adresa). teperx,
	podgotawliwaq zagolowok ili zapisywaq korotenxku` proceduru, mov-
	no pro~estx polu~ennyj blok pod l`boj adres.
		kogda ty najde{x to, ~to iskal, i zaho~e{x zapustitx iz-
	menennu` programmu, to pridetsq nemnogo pomu~itxsq i skleitx raz-
	delennu` programmu ili napisatx dlq nee nowu` proceduru zagruzki.
	esli programma zapolnqla polnostx` 48k pamqti RAM wozmoven li{x
	wtoroj metod.
		esli nado soedinitx bloki - dostato~no napisatx procedu-
	ru, pohovu` na razdelq`}u`, no taku`, kotoraq s~itywaet perwyj 
	blok pod adres 16384, wtoroj - srazu za nim, a zatem zapi{et ih
	wmeste kak odin blok.
		w |tom razdele byl opisan sposob zapuska blokow ma{innogo
	koda putem s~itywaniq w oblastx ma{innogo steka. ~toby takoj blok
	zapustilsq, dostato~no wwesti instrukci` LOAD " " CODE, kotoraq
	zagruzit ego. ~toby ubeditxsq w |tom na praktike, wwedi i zapus-
	ti programmu s listinga B:
				- 28 -

			listing B

		10 CLEAR 65361: LET S=0
		20 FOR N=65362 to 65395: READ A
		: POKE N,A: LET S=S+A: NEXT N
		30 IF S<>3437 THEN PRINT "OSHIBKA V STROKE DATA"
		: STOP
		40 SAVE "BEEP" CODE 65362,34
		50 DATA 88,255,3,19,0,62,221,2
		29,6,8,197,17,30,0,33,112,5,205
		60 DATA 181,3,33,0,8,43,124,18,
		1,32,251,193,16,235,221,225,201

		ona zapi{et na lente korotkij blok ma{innogo koda, kotoryj
	budet zapuskatxsq samostoqtelxno. posle zapisi |togo bloka oswo-
	bodi pamqtx s pomo}x` RANDOMIZE USR 0 ili RESET (po wozmovnosti
	perestawx RAMTOP na normalxnoe zna~enie s pomo}x` CLEAR 65367) i
	pro~ti ego, wwodq LOAD " " CODE. celx |togo bloka - proinformiro-
	watx o tom, ~to on zapustilsq. on |to delaet neskolxkimi zwukowy-
	mi signalami. ty usly{i{x ih srazu ve posle s~itywaniq programmy
	kak tolxko s ramki is~eznut granatowo-veltye polosy.
 
				- 29 -

		7. dekodirowanie zakodirowannyh blokow tipa "BYTES"

		kodirowanie |to rod wesxma prostogo {ifra, dela`}ego ne-
	wozmovnym prawilxnu` rabotu programmy. dlq ee zapuska sluvit spe-
	cialxnaq specialxnaq dekodiru`}aq procedura, kotoraq nahoditsq w
	|toj ve programme, a takve, ~to wavno, ne zakodirowana. TAK dlq
	~ego sluvit kodirowanie ? |to prosto o~erednoe zatrudnenie dostu-
	pa k tekstu programmy posle togo, kak wse pred{estwu`}ie predoh-
	raniteli wzlomany i programma s~itana bez zapuska. w |tom slu~ae
	w pamqti levit "polufabrikat", kotoryj tolxko posle pererabotki
	dekodiru`}ej proceduroj stanowitsq programmoj. kodirowanie movet
	bytx osnowano, naprimer, na inwersii wseh bajtow w programme. ho-
	ro{im primerom qwlqetsq programma "ART STUDIO". ee bejsikowaq 
	~astx prakti~eski nikak ne za}i}ena, no glawnyj blok programmy
	("STUDIO-MC" CODE 26000,30672) ~asti~no zakodirowan. ~toby rasko-
	dirowatx ego, nuvno najti adres, s kotorogo |tot blok zapuskaetsq.
	w slu~ae "ART STUDIO" |tot adres - 26000. tam nahoditsq instruk-
	ciq JP 26024, kotoraq osu}estwlqet perehod k dekodiru`}ej proce-
	dure. wot ee tekst:

		26024	21C165	LD	HL,26049;	zapisx adresa
		26027	E5	PUSH	HL;		26049 w stek
		26028	21C165	LD	HL,26049;	adres na~ala
		26031	11476C	LD	DE,27719;	adres konca
		26034	7E	LD	A,(HL);		wybor bajta iz
		26035	D622	SUB	34;		pamqti, perekodi-
		26037	07	RLCA;			rowanie ego s
		26038	EECC	XOR	#CC;		pomo}x` SUB,RLCA,
		26040	77	LD	(HL),A;		XOR i zapisx
		26041	23	INC	HL;		sledu`}ij adres
		26042	B7	OR	A;		prowerka priznaka
		26043	ED52	SBC	HL,DE;		konca, wozwrat w
		26045	19	ADD	HL,DE;		cikl ili wyhod
		26046	20F2	JP	NZ,26034;	po adresu,zapisan-
		26048	C9	RET;			nomu w steke
		26049	B2EDF1				ili 26049

		sna~ala procedura pome}aet w stek adres 26049. teperx na-
	~inaetsq dekodirowanie: w registr HL zanowo zagruvaetsq adres
	26049 - kak na~alo zakodirowannogo bloka, w DE - 27719, kak adres
	poslednego zakodirowannogo bloka. zatem, w cikl dekodiru`tsq pos-
	ledowatelxno bajty-instrukcii SUB 34, RLCA i XOR #CC qwlq`tsq kl`-
	~om, s pomo}x` kotorogo ras{ifrowywaetsq |ta ~astx programmy. na-
	konec, prowerqetsq uslowie dostiveniq adresa 27719, kak posledne-
	go dekodiruemogo (sodervitsq w DE). wypolnqetsq instrukciq RET, 
	no poslednim zapisannym w stek adresom ne qwlqetsq adres wozwra-
	ta w bejsik, a zapisannyj wna~ale s pomo}x` PUSH HL adres 26049,
	ili adres tolxko ~to raskodirowannogo bloka, sledowatelxno, pro-
	ishodit ego zapusk.
		obratim wnimanie, kakie instrukcii osu}estwlq`t de{ifraci`:
	nikakaq iz nih ne terqet ni odnogo bita. wy~itanie proizwoditsq po
	modul` 256 i dlq dwuh raznyh whodnyh dannyh rezulxtaty tove raz-
	li~ny. RLCA zamenqet zna~eniq bitow 7, 6, 3, 2 na protiwopolovnye.
	drugimi instrukciqmi, ime`}imi te ve samye swojstwa, qwlq`tsq ADD,
	INC, DEC, RRCA, NEG, CPL, no ne OR ili AND. kak raskodirowatx |tot
				- 30 -

	blok? pro}e wsego, wojdq w bejsik:

		POKE 26027,0	(kod instrukcii NOP)

	tem samym likwidiruq instrukci` PUSH HL (RET w konce programmy 
	perejdet w bejsik), i wypolnitx RANDOMIZE USR 26000. stoit pom-
	nitx o tom, ~to dekodiru`}aq programma movet prowerqtxsq drugim 
	fragmentom programmy. w "ART STUDIO" tak i estx. wot dalxnej{aq
	~astx programmy:

		26283	67	LD H,A;		w a uve nahoditsq
		26284	6F	LD L,A;		zna~enie 0
		26285	E5	PUSH HL;	zapisx ego w stek
		26292	3AA865	LD A,(26024);	i prowerka
		26295	FE21	CP #21;		sodervimogo q~eek
		26297	C0	RET NZ;		s adresami
		26298	2AA965	LD HL,(26025);	26024...26027
		26301	B7	OR A;		i esli ono drugoe
		26302	11C165	LD DE,26049;	to stiranie
		26305	ED52	SBC HL,DE;	pamqti s pomo}x`
		26307	C0	RET NZ;		RET NZ
		26308	3AAB65	LD A,(26027);	(pod adres 0)
		26311	FEE5	CP #E5;		esli wse normalxno
		26313	C0	RET NZ;		to snqtie adresa 0
		26314	E1	POP NZ;		i "normalxnyj"
		26315	C9	RET;		wyhod

		|tot fragment prowerqet: nawernqka li dekodiru`}aq proce-
	dura zapustila ws` programmu, i esli net, to s pomo}x` RET NZ sti-
	raet pamqtx (tak kak na steke zapisan adres 0).
		movno likwidirowatx i |ti mery za}ity, no w nekotoryh pro-
	grammah |to ne pomovet. togda ostaetsq drugoj wyhod: snowa zako-
	dirowatx programmu, t.e. sdelatx obratnoe, ~em dekodiru`}aq prog-
	ramma. w na{em slu~ae sledowalo by wypolnitx:

		XOR	#CC
		RRCA	
		ADD	34

		w "ART STUDIO" neizwestno dlq ~ego byla pome}ena kodiru`-
	}aq programma. ona nahoditsq pod adresom 26003 i wyglqdit sledu`-
	}im obrazom:

		26003	21C1165	LD HL,26049;	adres na~ala
		26006	11476C	LD DE,27719;	adres konca
		26009	7E	LD AA,(HL);	wyborka bajta iz
		26010	EECC	XOR "CC;	pamqti, kodirowanie
		26012	0F	RRCA;		ego s pomo}x` XOR,
		26013	C6	ADD 34;		RRCA, ADD i ego
		26015	77	LD (HL),A;	zapisx
		26016	23	INC HL;		sledu`}ij adres
		26017	B7	OR A;		prowerka okon~aniq
		26018	ED52	SBC HL,DE;	perehod w cikl ili
		26020	19	ADD HL,DE;	wozwrat
		26021	20F2	JR NZ,26009;	w bejsik
		26027	C9	RET;	
				- 31 -	

		kak widno, ona postroena analogi~no dekodiru`}ej procedu-
	re. esli takoj net, to ee movno bystro i prosto napisatx na osno-
	we dekodiru`}ej procedury (naprimer ATIC, ATAC, NIGHT SHADE, THE
	LAST WORD).
		pri za}ite programm primenq`tsq takve maloizwestnye i ne-
	opublikowannye w firmennyh katalogah komandy mkpr Z80. blagodarq
	ih primeneni` rabota programmy stanowitsq malo~itaemoj, da i pro-
	smotr ee dizassemblerom zatrudnen.
		naibolee ~asto wstre~a`tsq neopublikowannye komandy, ope-
	riru`}ie na polowinkah indeksnyh registrow IX, IY w gruppe komand,
	kotorym ne pred{estwuet nikakoj inoj prefiks (t.e. CBH ili EDH).
	osnowywa`tsq oni na prefiksacii kodom DDH ili FDH komandy, kasa`-
	}ejsq registra H ili L. w |tom slu~ae wmesto |togo registra beret-
	sq sootwetstwu`}aq polowina indeksnogo registra. ~erez HX obozna-
	~aetsq star{aq polowina registra IX, ~erez IX - mlad{aq. analo-
	gi~no HY i IY. wot primery:

	-------------------------------------------------------
	!  kod  ! komanda !  kod  ! komanda !  kod  ! komanda !
	!-----------------------------------------------------!
	!  24   ! INC H   !  DD24 !  INC HX !  FD24 ! INC HY  !
	!  2D   ! DEC L   !  DD2D !  DEC IX !  FD2D ! DEC IY  !
	!  4C   ! LD C,H  !  DD4C !  LD C,HX!  FD4C ! LD C,HY !
	!  64   ! LD H,H  !  DD64 ! LD HX,HX!  FD64 ! LD HY,HY!
	! 2601  ! LD H,1  ! DD2601! LD HX,1 ! FD2601! LD HY,1 !
	!  B5   ! OR L    !  DDB5 !  OR IX  !  FDB5 ! OR IY   !
	-------------------------------------------------------

		|to werno dlq wseh komand peresylki odnobajtowyh mevdu 
	registrami i wosxmibajtowyh operacij AND, OR, XOR, ADD, ADC, SUB,
	BC i CP - wypolnqemyh w akkumulqtore.
		prefiks FDH ili DDH otnosqtsq ko wsem registram H, L ili
	HL, prisutstwu`}im w komande, sledowatelxno w odnoj instrukcii ne-
	wozmovno ispolxzowanie q~ejki, adresowannoj kak (HL), registra
	HL ili L odnowremenno s HX, HY, IX, IY (w dalxnej{em ograni~imsq
	registrom IX, no wse |to otnositsq i k registru IY), naprimer:

		66	LD	H,(HL)	DD66**	LD	HX,(IX+*)
		75	LD	(HL),L	DD75**	LD	(IX+*),IX
		65	LD	H,L	DD65	LD	HX,IX

		neskolxko ina~e predstawlqetsq rotaciq q~ejki, adresue-
	moj indeksnym registrom, t.e. instrukciej, na~ina`}ejsq kodom 
	DDCB. instrukciq tipa RR(IX+**) i im podobnye podrobno opisany
	wo wseh dostupnyh materialah ob mkpr Z80, no malo kto znaet ob
	instrukciqh tipa RR(IX+**),% i im podobnyh, gde % obozna~aet l`-
	boj registr mkpr. oni osnowywa`tsq na prefiksacii kodom DDH ili
	FDH instrukcii tipa RR %. takve obstoit delo s komandami tipa
	SET N,(IX+**),%, a takve RES N,(IX+**),%, a zatem peresylki re-
	zulxtata kak w q~ejku (IX+**), tak i sootwetstwu`}ij wnutrennij
	registr mkpr. naprimer:

		CB13		RL E
		DDCB0113	RL (IX+1),E
				- 32 -

		wyzywaet sdwig q~ejki s adresom IX+1 wlewo na 1 bit i pe-
	resylku rezulxtataw registr E, ~to oby~nym sposobom sledowalo sde-
	latx tak:

		DDCB0116	RL (IX+1)
		DD5E01		LD E,(IX+1)

		w konce rassmotreniq instrukcij |togo tipa sleduet wspom-
	nitx, ~to komand EX DE,IX ili EX DE,IY net. prefiksowanie komandy
	EX DE,HL ne daet nikakih rezulxtatow. takve - prefiksowanie komand,
	kody kotoryh na~ina`tsq s EDH, a takve teh, w kotoryh ne prisutst-
	wuet ni odin iz registrow H, L ili pary HL (naprimer ,LD B,N, RRCA
	i t.d.).
		o~erednoj l`bopytnoj komandoj qwlqetsq SLI (SHIFT LEFT AND
	INCREMENT), wypolnenie kotoroj analogi~no SLA s toj raznicej, ~to
	samyj mlad{ij bit ustanawliwaetsq w 1. priznaki ustanawliwa`tsq
	identi~no SLA i drugim sdwigom:

		CB37		SLI	A
		CB36		SLI	(HL)
		DDCB**36	SLI	(IX+**)
		DDCB**57	SLI	(IX+**),A

		wremenami nekotorye problemy wyzywaet postroenie flavko-
	wogo registra, osobenno togda, kogda on ispolxzuetsq dostato~no
	netipi~no, naprimer:

		PUSH	AF
		POP	BC
		RL	C
		JP	NC,...

		ego wid predstawlen na ris. 9:

		-------------------------------------------------
		!  7  !  6  !  5  !  4  !  3  !  2  !  1  !  0  !
		!-----------------------------------------------!
		!  S  !  Z  ! F5  !  H  ! F3  ! P/V !  N  !  C  !
		-------------------------------------------------

		dopolnitelxnoj osobennostx` registra E qwlqetsq to, ~to
	bity 3 i 5 (obozna~ennye kak F3, F5) to~no otrava`t sostoqnie
	wosxmibitowoj arifmeti~eskoj ili logi~eskoj operacii IN %,(C) i
	IN F,(C). naprimer, posle wypolneniq:

		XOR	A;	zapisx zna~eniq 0
		ADD	A,15;	rezulxtat - 00001111
		ukazateli budut: F5=0; F3=1

		poslednqq (kto poru~itsq, ~to ih bolx{e net?) tajna Z80
	|to registr obnowleniq pamqti R. to~nee to, ~to kogda posle o~e-
	rednogo ma{innogo cikla mkpr inkrementiruetsq zna~enie |togo re-
	gistra, to ego star{ij bit ostaetsq neizmennym, sledowatelxno mo-
				- 33 -

	vet bytx ispolxzowan dlq hraneniq l`boj odnobitowoj informacii.
	wavno takve to, ~to instrukciq LD A,H, s pomo}x` kotoroj movet 
	bytx polu~ena |ta informaciq, ustanawliwaet takve ukazatelx S i
	ne trebuetsq dopolnitelxnaq instrukciq, prowerq`}aq zna~enie |to-
	go bita.
		w konce neskolxko korotkih, no ~asto primenqemyh mer za-
	}ity. ih likwidaciq oby~no osnowywaetsq na dejstwiqh obratnym
	za}itnym. ~a}e wsego s |toj to~ki zreniq |kspluatiru`tsq sistem-
	nye peremennye. naprimer peremennaq DFSZ (23659) opredelqet ~islo
	strok w nivnej ~asti |krana, trebuemoe dlq wywoda soob}eniq ob
	o{ibke ili dlq wwoda dannyh wo wremq raboty programmy. |to zna~e-
	nie oby~no rawno 2, no dostato~no tuda zanesti 0, ~toby programma
	zawisla pri popytke prerywaniq (tak kak wywoditsq soob}enie, dlq
	kotorogo net mesta). esli w programme nahodqtsq instrukcii INPUT
	ili CLS, to ona imeet podobnyj rezulxtat.
		rasprostrenennym metodom za}ity qwlqetsq takve izmenenie
	zna~eniq peremennoj BORDER (23624), kotoraq opredelqet cwet ram-
	ki, i atributow nivnej ~asti |krana. zna~enie otdelxnyh bitow
	sledu`}ee:

		7 bit		- FLASH
		6 bit		- BRIGHT
		5, 4, 3 bity	- BORDER
		2, 1, 0 byty	- INK

		sposob za}ity osnowywaetsq na tom, ~to cwet ~ernil tot ve
	samyj, kak i u ramki, sledowatelxno pri ostanowke programmy mov-
	no podumatx, ~to ona zawisla (ne widno soob}enij). razblokirowatx
	za}itu movno, wpisaw BORDER 0 (ili drugoj cwet).
		o~erednym prostym sposobom za}ity qwlqetsq izmenenie zna-
	~eniq peremennoj ERRSP (23613-23614) ili dna ma{innogo steka (|ta
	peremennaq ukazywaet dno steka), gde oby~no nahoditsq adres pro-
	cedury, obrabatywa`}ej o{ibku bejsika (wyzywaemoj s pomo}x` RST 8).
	umenx{enie zna~eniq ERRSP na 2 wyzywaet za}itu programmy ot "BREAK"
	i l`boj drugoj o{ibki - programma zanowo zapuskaetsq s mesta, w ko-
	torom proizo{la o{ibka. smena sodervimogo dna ma{innogo steka ili
	drugaq zamena zna~eniq ERRSP movet wyzywatx zawisanie ili dave re-
	start kompx`tera.
		izwestnym sposobom za}ity qwlqetsq takve zanesenie zna~e-
	nij, bolx{ih 9999 w q~ejki pamqti, obozna~a`}ie nomer stroki bej-
	sika (perwyj bajt - star{ij). esli on razme}aetsq w granicah 10000
	- 16383, na listinge |to wyglqdit: 000 (wmesto 10000) i stroki |ti
	newozmovno skorrektirowatx (EDIT), esli ve prewy{aet 16384 - dalx-
	nej{aq ~astx programmy s~itaetsq nesu}estwu`}ej. movno takve wst-
	retitx za}itu, osnowywa`}u`sq na zanesenii minimalxnyh zna~enij
	(t.e. 1) w peremennye REPDEL (23561) i REPPER (23562), ~to zatrud-
	nqet rabotu s kompx`terom, no dlq ee likwidacii trebuetsq li{x 
	bystraq reakciq (zapi{i s pomo}x` POKE normalxnye zna~eniq: 35
	i 5).
		stoit e}e wspomnitx o peremennoj NMIADD, kotoraq ne ispolx-
	zuetsq iz-za o{ibki w kompx`tere. ona dolvna sodervatx adres ob-
	sluviwaniq prerywaniq NMI (wsegda prinimaemogo), o{ibka w tom, 
	~to mkpr perehodit tuda li{x togda, kogda on rawen 0. esli doba-
	witx k SPECTRUM pristawku s pamqtx` EPROM, putx k zadervke l`boj
	programmy byl by otkryt.
                                                                                                                                                                                                                                                                          