home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 39 / Flop_Magazin_39_1997_01_Raster_cs_Side_A.atr / multitas.cap < prev    next >
Text File  |  2023-02-26  |  5KB  |  1 lines

  1. Radek ③t%rba¢Assembler ╱nejen$ pro pokro'il[¢MULTITASKING na 8-bitov[m Atari¢¢Multitaskingem ozna'ujeme soub%(n[ prov*d%n) v)ce proces+ ╱]loh, program+$. Na v%t&)ch po')ta')ch ho pova(ujeme za naprostou samoz@ejmost, ale pod)vejme se na mo(nosti vyu()vat tuto techniku na 8-bitov[m Atari.¢¢Co je to VBI asi ka(d` Atarista v). Jedn* se o mo(nost nechat volat danou strojovou rutinu ka(dou 1/50 sekundy. Tato rutina pak b%() jakoby na pozad) a pou()v* se s oblibou nap@)klad pro hran) hudby nebo pro roluj)c) se text. S vyu()v*n)m VBI v&ak souvis) n%kolik z*kladn)ch probl[m+:¢1.$ Rutina pro VBI mus) b`t konstruov*na tak, aby byla voln% pr+choz). Klasick* struktura programu s prov*d%n)m n%'eho v cyklu s 'ekac) pauzou nen) mo(n*. Je tedy nutn[ program p@etvo@it do podstatn% slo(it%j&) a nep@ehledn%j&) struktury.¢2.$ Pro ka(d` pr+chod touto rutinou m*me k dispozici pouze cca 20000 strojov`ch cykl+.¢3.$ Klasick`m zp+sobem m+(eme nechat b%(et ve VBI pouze jeden program. Pokud bychom pot@ebovali postupn% r+zn% spou&t%t a vyp)nat n%kolik rutin, kter[ maj) b%(et na pozad), struktura programu by se zkomplikovala je&t% v)ce.¢¢Je jasn[, (e s bodem 2 toho moc neud%l*me. Omezen) je d*no t)m, (e na&e rutina m* b`t prov*d%na ka(dou 1/50 sekundy a pokud p@ekro')me on%ch zmiovan`ch 20tis)c cykl+, dojde k zablokov*n) syst[mu. Ostatn) probl[my, zmiovan[ v bodu 1 a 3 v&ak lze programov% obej)t:¢¢¢TASKMANAGER, Radek ③t%rba - RASTER 1996¢¢TaskManager je sada speci*ln)ch assemblerovsk`ch podprogram+ m[ vlastn) v`roby ur'en* pro podporu nonpreemprivn)ho multitaskingu na 8bitov[m Atari. To dlouh[ ciz) slovo znamen*, (e jednotliv[ rutiny pro soub%(n[ zpracov*n) mus) splovat ur'it[ podm)nky, jinak dojde k "zamrznut)" syst[mu.¢¢Nejlep&) je n*zorn` p@)klad:¢M%jme rutinu, kter* m* prov*d%t postupn[ zvy&ov*n) barvy textu na obrazovce s pauzou 1/10 sekundy.¢¢RUTINA¢    LDX #0¢NA1 STX 709   ;barva textu¢    LDA #5    ;5/50 = 1/10sec¢    JSR PAU   ;cekani A padesatin sec.¢    INX¢    JMP NA1¢¢;Podprogram PAU vypada takto¢PAU PHA¢    LDA #0¢    STA 20¢    PLA¢PA2 CMP 20¢    BNE PA2¢    RTS¢¢Pokud bychom cht%li, aby se tato rutina prov*d%la ve VBI, museli bychom ji upravit t@eba takto: ¢¢RUTINA¢    INC PP1¢    LDA PP1¢    CMP #5¢    BNE NA2¢    LDA #0¢    STA PP1¢    INC PP2¢    LDA PP2¢    STA 709¢NA2¢¢D*le by je&t% bylo t@eba vyhradit m)sto pro prom%nn[ PP1 a PP2 a za@)dit je&t% p@ed spu&t%n)m rutiny jejich inicializaci ╱po'*te'n) nastaven)$:¢¢    LDA #0¢    STA PP1¢    STA PP2¢¢;vyhrazeni mista musi byt mimo oblast programu¢PP1 .BYTE 0¢PP2 .BYTE 0¢¢D)ky TaskManageru lze v&ak ponechat p+vodn) tvar a pouze nahradit vol*n) pauzy PAU jeho rutinou SLPTASK.¢¢RUTINA¢    LDX #0¢NA1 STX 709   ;barva textu¢    LDA #5    ;5/50 = 1/10sec¢    JSR SLPTASK ;cekani A padesatin sec.¢    INX¢    JMP NA1¢¢Vlastn) pou(it) TaskManageru je velice snadn[. Sada jeho rutin je um)st%na v knihovn% TASKMNG.LIB, kterou lehce p@id*me ke sv[mu assemblerovsk[mu programu. Kompletn) @e&en) cel[ho probl[mu s jeho pou(it)m by pak vypadalo takto:¢¢;MULTI1.MAC¢;Vyrobil Radek Sterba¢;RASTER 1996¢    .OPT OBJ, NO LIST¢    ✓= ◆5000¢;¢    .INCLUDE #D:TASKMNG.LIB¢;¢START¢    TASKMANAGER 4¢;¢    JSR INITTM¢;¢    LDA #0¢    LDX #<RUTINA¢    LDY #>RUTINA¢    JSR RUNTASK¢;¢LOOP¢;zde muzeme provadet cokoliv dalsiho¢    JMP LOOP¢;¢RUTINA¢    LDX #0¢NA1 STX 709   ;barva textu¢    LDA #5    ;5/50 = 1/10sec¢    JSR SLPTASK ;cekani A padesatin sec.¢    INX¢    JMP NA1¢;¢    ✓= ◆2E0¢    .WORD START¢¢Nyn) n*sleduje koment*@ jednotliv`ch @*dk+ programu:¢¢.INCLUDE #D:TASKMNG.LIB¢P@id* k va&emu programu knihovnu TASKMNG.LIB, kter* obsahuje makro TASKMANAGER a sadu podprogram+ pro pohodln[ @)zen) multitaskingu.¢¢TASKMANAGER 4¢Makro, definovan[ v knihovn%. Zajist) p@ikompilov*n) v&ech rutin TaskManageru do va&eho programu. ⇨)slo 4 ozna'uje, (e budeme moci pou()vat sou'asn% maxim*ln% 4 soub%(n[ rutiny. ╱Pro tento p@)klad by sta'ilo i ')slo 1.$¢¢JSR INITTM¢Inicializace TaskManageru. Bez tohoto vol*n) nebude multitasking fungovat.¢¢LDA #0¢Budeme spou&t%t rutinu pod symbolick`m ')slem 0. ╱Proto(e jsme u makra TASKMANAGER uvedli ')slo 4, mohli bychom spou&t%t celkem a( 4 rutiny pod ')sly 0,1,2 a 3.$¢¢LDX #<RUTINA¢LDY #>RUTINA¢Nastaven) doln)ho a horn)ho byte adresy po'*tku rutiny.¢¢JSR RUNTASK¢Vlastn) spu&t%n) rutiny. ¢¢Od tohoto okam(iku b%() soub%(n% s dal&)m programem i p@)slu&n* rutina.¢¢LDA #5¢JSR SLPTASK¢Vol*n) podprogramu SLPTASK zp+sob), (e n*vrat z n%j nastane a( za dobu 5/50 sekundy ╱v Akumul*toru bylo ')slo 5$. Nejedn* se v&ak o klasick[ 'ek*n), kter[ by ve VBI rutin% zp+silo spolehliv[ "vytuhnut)", ale o jak[si "usp*n)" rutiny na danou dobu. ⇨ek*n) tedy nen) aktivn) a nezdr(uje zbytek syst[mu.¢¢Kompletn) v`pis v&ech podprogram+ TaskManageru najdete v druh[m samostatn[m 'l*nku.¢