Antic AssemblerTworzeniem obrazu na monitorze w małym "Atari" zajmuje się specjalnie do tego celu zaprojektowany mikroprocesor, zwany Antic. Program dlań tworzy automatycznie system operacyjny (np. po komendzie GRAPHICS), bądź też (ręcznie) użytkownik. W tym drugim przypadku może być to czynność nieco żmudna i stresująca. Aby temu jakoś zaradzić, stworzyłem przedstawiony niżej program. Jest to assembler, a więc program tłumaczący pewien tekst, będący ciągiem symbolicznie zapisanych rozkazów mikroprocesora, na postać dla tego ostatniego zrozumiałą. OBSŁUGAASSEMBLER1. Rozkazy Anticu SET bajt [,LMS [>]słowo,DLI,HSC,VSC] - Rozkaz ten powoduje wygenerowanie linii obrazu w trybie określonym parametrem bajt (przyjmującym wartości 2-15). Chodzi tutaj o tryb Anticu, a nie systemu operacyjnego. Tak więc jeśli chcemy uzyskać linię trybu GRAPHICS O, wartość parametru bajt wynosić musi 2. Po rozkazie SET możliwe są 4 rozkazy dodatkowe (tzn. ustawiające bity w starszej połówce bajtu rozkazu): HSC - włącza przesuw poziomy (w danej linii), VSC - włącza przesuw pionowy. DLI - wywołuje przerwanie DLI, LMS [>]słowo - powoduje załadowanie licznika obrazu adresem określonym przez "słowo". Oznacza to, że dane do wyświetlenia pobierane będą właśnie od tego adresu. Jeżeli parametr ów poprzedzony jest znaczkiem ">", to adres ów jest sumą argumentu poprzedniego LMS-a i parametru "słowo". Tak więc program SET 2,LMS $20 SET 2,LMS $10 da w efekcie dta b($42),a($0020) dta b($42),a($0010) a (dla porównania) program SET 2,LMS $20 SET 2,LMS >$10 wygeneruje kod dta b($42),a($0020) dta b($42),a($0030) - czyli $20 z poprzedniego LMS-a zsumowane z $10. Jeżeli nie użyto wcześniej żadnego rozkazu LMS, jako pierwszy składnik sumy przyjmowany jest adres podany w pseudorozkazie ADR, lub (jeżeli i on nie był użyty) po prostu zero. EMP bajt [,DLI] - powoduje wygenerowanie na ekranie pustych linii. Ich liczba określona jest parametrem bajt 1 przyjmuje wartości 1-8. Możliwy jest tutaj, podobnie jak i w dwóch następnych rozkazach, tylko jeden rozkaz dodatkowy: DLI. Uwaga! 1 linia ekranu ma grubość linii obrazu w trybie GRAPHICS 8. Tak więc EMP 8 wygeneruje na ekranie "pasek" grubości linii w trybie GRAPHICS O. JMP adres [,DLI] - powoduje stworzenie i pustej linii ekranu i bezwarunkowy skok pod podany adres. JVB adres [,DLI] - powoduje skok pod podany adres- po oczekiwaniu na synchronizację pionową. Więcej informacji na temat działania rozkazów mikroprocesora odnaleźć można w cyklu "Piszemy demo" prezentowanym ostatnio na łamach "TA". 2. Pseudorozkazy ORG adres - ustala adres początku programu Anticu. Jeżeli użyto tego rozkazu, to w trybie QA wygenerowana zostanie linia org adres w trybie NUM natomiast stworzony zostanie 6 bajtowy nagłówek pliku. DEF etykieta - Ten rozkaz zadziała tylko w trybie QA. Na początku każdego pliku wynikowego dla QA tworzona jest linia dlist equ * DBF pozwala zmienić etykiete dlist na dowolną inną (max. 6-bajtową). REM komentarz - wszystkie znaki po rozkazie REM są ignorowane. Ignorowane są również wszystkie teksty po prawidłowo zinterpretowanym rozkazie. W przypadku rozkazów Anticu teksty owe nie mogą jednak zaczynać się od przecinka. ADR - definiuje pierwszy składnik sumy dla rozkazu LMS > adres REP bajt - początek pętli. Wszystkie instrukcje miedzy REP a NXT będą asemblowane tyle razy ile określa to liczba "bajt" (z zakresu 1-255). Pętle mogą być zagnieżdżane (tzn. jedna może być umieszczona wewnątrz drugiej) do 8 razy. NXT - Oznaczenie końca pętli. END - Koniec pliku źrodlowrgo. Przerywa asemblację. W powyższym zestawieniu w nawiasach kwadratowych podano te elementy rozkazu, które mogą wystąpić, ale nie muszą. Antic Assembler nie stawia żadnych wymagań odnośnie tabulacji, użytych liter (mogą być duże i małe), do woli używać można trybu inverse video. Liczby wpisywać można dziesiętnie, lub szesnastkowo - w tym wypadku poprzedzać je należy znaczkiem "$" (Uwaga! Liczba hex musi następować bezporednio po "$"!). Linie puste są ignorowane. BŁĘDYPo każdym komunikacie błędu asemblacji należy nacisnąć dowolny klawisz, program będzie kontynuował pracę (kod wynikowy nie będzie jednak już tworzony). Asemblację przerwać można w każdej chwili, naciskając ESC. 1000 REM *--------------------------* 1002 REM : ANTIC Assembler 6.3 : 1004 REM : autor: Maciej Czarnota : 1006 REM : (c) 1992 Tajemnice ATARI : 1008 REM *--------------------------* 1010 DATA ffff0080558aa56a38e904856a 1020 DATA 85922094efa9e08594a5928596 1030 DATA a90085938595a203a000b19391 1040 DATA 95c8d0f9e694e696ca10f0a200 1050 DATA 86908691a5928596a690bd078a 1060 DATA 3025e6900a0a9004e696e6960a 1070 DATA 9002e6968595a000a691bd108a 1080 DATA 9195e8c8c008d0f586914c3280 1090 DATA a5928df402a9038554a9d28d30 1100 DATA 02a9878d3102a5581869788ddc 1110 DATA 87a55969008ddd87a284a036a9 1120 DATA 07205ce420fdf2a207dd6d88f0 1130 DATA 30ca10f820af83c92af008c92e 1140 DATA 90e8c95bb0e4ac018ac00cd004 1150 DATA 888c018a99778820ba83ac018a 1160 DATA 993188c88c018a4c8d808a0aaa 1170 DATA bd8e878de080bd8f878de180a2 1180 DATA e4a062a907205ce420df804c84 1190 DATA 80ac038ac8c002d002a0008c03 1200 DATA 8a980a0aa8a200b997889d6988 1210 DATA c8e8e003d0f460ad028af017a9 1220 DATA 008d028a0a0a0aa8a200b98788 1230 DATA 9d5b88e8c8e007d0f460ac008a 1240 DATA c8c003d002a0008c008ab98488 1250 DATA 8d758820ba838d2f8860a56a18 1260 DATA 6904856a2094ef6c0a00a20ca9 1270 DATA 009d31889d7788ca10f7e88e01 1280 DATA 8a6020b584a21020a781ac018a 1290 DATA f003209c81ac7588c044f00320 1300 DATA a781a9069d4a03205d843015a2 1310 DATA 10207c84300aa280a0052042c6 1320 DATA 4c7f81c088f005a90020a5844c 1330 DATA 7284a9759d4403a9889d450360 1340 DATA a99f9d4403a9889d450360ac01 1350 DATA 8af00a20c2818820c2818c018a 1360 DATA 60a900993188a92099778860ad 1370 DATA 028a0aa8b99e878ddf81b99f87 1380 DATA 8de08120de81a58ef005a90a20 1390 DATA a584a58dd015a594c583a595e5 1400 DATA 84f00ba9018d028a200f812049 1410 DATA 8160a910a2029d5088ca10fa20 1420 DATA b584204f8410034c9481a907a2 1430 DATA 109d4203a9569d4403a98a9d45 1440 DATA 03ad058a9d4803ad068a9d4903 1450 DATA 2056e43005a9014ca584c088d0 1460 DATA d2a95685f3187d48038594a98a 1470 DATA 85f47d49038595207284a900a2 1480 DATA 05958bca10fb8d528a8d538aa2 1490 DATA 05bda6889de289ca10f7a59485 1500 DATA 83a5958584a00084f2b1f3c99b 1510 DATA f00c297f91f3c8d0f3a9044c9a 1520 DATA 84205d838580a8a902b02ea903 1530 DATA c00cb028b9dc88f00720c983a9 1540 DATA 05b01ca5800aa8b9a0878dbf82 1550 DATA b9a1878dc08220be82b074f039 1560 DATA 8580209385b06ba000a5809183 1570 DATA e001f00ac8a5d49183c8a5d591 1580 DATA 838a18658385839002e6842041 1590 DATA 83900ca900858ea90c20a5844c 1600 DATA 7284209384a4f2b1f3c99bf003 1610 DATA c8d0f7c8981865f385f39002e6 1620 DATA f4a5f4c5959006a5f3c594b016 1630 DATA adfc02c9ffd0034c7c8220fdf2 1640 DATA a90b20a584a900858e60209a84 1650 DATA c91bf0ef4cfe82a002b95088aa 1660 DATA e8e01ad002a2108a995088c910 1670 DATA d0058810ea38601860a9ac8d85 1680 DATA 83a9888d8683a9008582202484 1690 DATA a903b039a2008e048aa582c90f 1700 DATA d0023860a4f220ad83dd8483f0 1710 DATA 038d048ae8c8e003d0efa90318 1720 DATA 6d85838d85839003ee8683e682 1730 DATA ad048ad0cb84f2a5821860b1f3 1740 DATA c9619006c97bb002295f60a82a 1750 DATA 2a2a2a2903aa98299f1d49fb60 1760 DATA 202484c924d00be6f220e48390 1770 DATA 0cc6f238602000d8b0f720d2d9 1780 DATA 60a00084d584d4a4f2a20020ad 1790 DATA 83c9309025c93a900dc941901d 1800 DATA c947b01938e937d00338e93006 1810 DATA d426d518e8e004d0f605d485d4 1820 DATA c8d0d2c4f2f00484f218603860 1830 DATA a4f288c8b1f3c99bf0f4c920f0 1840 DATA f584f21860aeff89cad00dac01 1850 DATA 8ab931884980993188a2148eff 1860 DATA 894c62e4a904d002a908a2109d 1870 DATA 4a03209c81a9039d4203a9809d 1880 DATA 48039d4b03a9009d49034c56e4 1890 DATA a210a90c9d42034c56e4a9809d 1900 DATA 4403a9059d4503a9059d4203a9 1910 DATA 809d48034c56e4a6f3a4f44c42 1920 DATA c6482093846820a5844cfdf20a 1930 DATA a8b9b887aab9b987a82042c685 1940 DATA 8d60a99b4cb0f2686860202484 1950 DATA a906b024a200a4f2b1f3c99bf0 1960 DATA 0d9de289e8c8e006f004c920d0 1970 DATA eda9209de289e8e007d0f6a200 1980 DATA 186018a20060a5d5d057a5d4c9 1990 DATA 10b051c902904da2011860a5d5 2000 DATA d045a4d4f041c009b03d88980a 2010 DATA 0a0a0aa2011860a901d002a941 2020 DATA a2031860a908a48ec020f023a5 2030 DATA d5d01da5d499a000a5f399a100 2040 DATA a5f499a200a5f299a300c8c8c8 2050 DATA c8848e4c7585a9073860a909a4 2060 DATA 8ef0f8b99c00aaca8a999c00f0 2070 DATA 12b99d0085f3b99e0085f4b99f 2080 DATA 0085f2a8d00688888888848ea2 2090 DATA 0018608490a5d48d528aa5d58d 2100 DATA 538a4c7585a5d4858ba5d5858c 2110 DATA 4c7585a9008591202484c92cf0 2120 DATA 08a580059185801860e6f28a48 2130 DATA 205d8368aaa902900160a903a4 2140 DATA 82c00c9055a58238e90c8582f0 2150 DATA 3da903a480c0029044c010b040 2160 DATA a582c903d02b20248448c93ed0 2170 DATA 02e6f220c983b02868c93ed00d 2180 DATA a58b1865d485d4a58c65d585d5 2190 DATA a5d4858ba5d5858ca203a482b9 2200 DATA d988059185914c978568a90538 2210 DATA 60ad038af073205384306ba583 2220 DATA 38e5948592a584e5958593a590 2230 DATA f039a9069d4803a9009d4903a9 2240 DATA 509d4403a98a9d4503a592186d 2250 DATA 528a8d548aa5936d538a8d558a 2260 DATA ac548ad003ce558a888c548aa9 2270 DATA 0b9d42032056e4a90b9d4203a5 2280 DATA 929d4803a5939d4903a5949d44 2290 DATA 03a5959d45032056e430034c72 2300 DATA 844c948120538430f8a5948585 2310 DATA a5958586a590f016a2dca08920 2320 DATA 4e87ad538a203187ad528a2031 2330 DATA 87206e87a2e2a089206b87a000 2340 DATA b18548a681e003d005204a87d0 2350 DATA 07a2f6a089204e8768203187a0 2360 DATA 00b185290ff02fc901f006b185 2370 DATA 2940f025a2faa089204e87a002 2380 DATA b185203187a001b185203187a5 2390 DATA 8518690285859002e686206787 2400 DATA d007206787c6811003206e87e6 2410 DATA 85d002e686a585c583a586e584 2420 DATA d094a581c903f00320b5844c72 2430 DATA 844829f04a4a4a4a203e876829 2440 DATA 0f186930c93a900269264c7487 2450 DATA a2eea08986878488a0009848b1 2460 DATA 8748297f20748768aa68a8c88a 2470 DATA 10ee60a929d009204e87a90385 2480 DATA 81a99ba20b8e5203a2008e5803 2490 DATA 8e5903a2102056e4100568684c 2500 DATA 948160e580228105815b81cd81 2510 DATA 3c814981b28104821386ba84bd 2520 DATA 84e98479851f854c85ed84ff84 2530 DATA 158519858885e888fd880d891a 2540 DATA 892c893e895089648982899689 2550 DATA a289ae89c38970707042f58702 2560 DATA 021042dc870202020202020202 2570 DATA 02020202020202020202020241 2580 DATA d28780a1eef4e9e380a1f3f3e5 2590 DATA ede2ece5f280968e938080a1f5 2600 DATA f4eff29a80ad8ea3fae1f2eeef 2610 DATA f4e1800000000000002e617a77 2620 DATA 6100706c696b7500241a000000 2630 DATA 00000000000000000000000000 2640 DATA 00000000000000326f7a6b617a 2650 DATA 1a001010100000347279621a00 2660 DATA 2f64637a79740000002b6f641a 2670 DATA 00312100000b0e14209b1b3c7e 2680 DATA 443a2020202020202020202020 2690 DATA 20204443542f64637a79740000 2700 DATA 3a61706973000000312100002e 2710 DATA 352d0044313a2a2e2a20646c69 2720 DATA 737420454e4444454652454d4f 2730 DATA 52475245504e5854534554454d 2740 DATA 504a4d504a5642414452444c49 2750 DATA 4853435653434c4d5380102040 2760 DATA 0000000101000101010101427b 2770 DATA 11642077656a176369612f7779 2780 DATA 6a176369619b506c696b207a62 2790 DATA 797420647b7567699b427b1164 2800 DATA 20736b7b61646e699b4e69656c 2810 DATA 6567616c6e7920726f7a6b617a 2820 DATA 9b5a7b7920666f726d61742074 2830 DATA 656b7374759b4f637a656b6977 2840 DATA 616e61206c69637a62619b4f63 2850 DATA 7a656b6977616e61206574796b 2860 DATA 696574619b50727a656b726f63 2870 DATA 7a6f6e79207a616b7265732070 2880 DATA 6172616d657472759b50727a65 2890 DATA 70657b6e69656e69652073746f 2900 DATA 73759b4e58542062657a205245 2910 DATA 509b5245502062657a204e5854 2920 DATA 9b4173656d626c61636a612070 2930 DATA 727a657277616e619b506c696b 2940 DATA 2077796e696b6f7779207a6279 2950 DATA 7420640c7567699b206f726720 2960 DATA a42020202020202065717520aa 2970 DATA 20647461206228a42c6228a429 2980 DATA 2c6128a4140000000000001044 2990 DATA 4d50515657587bff00003c667e 3000 DATA 603c060c18007c666666000c18 3010 DATA 003c66663c0000003c063e663e 3020 DATA 0c0c18003c60603c000c183e60 3030 DATA 3c067c000018007e0c307e0000 3040 DATA 38181c38183c00ffff00000000 3050 DATA e002e1020080 PRZYKŁADYrem PROGRAM PRZYKŁADOWY NR 1 rem EKRAN MIESZANY org $8000 def etyk (Nowa etykieta!) rep 3 emp 8 Tradycyjne 24 puste linie nxt adr $f00 - adres początkowy dla lms >a rem z kolejnych 16 linii dane pobierane rem będą z początku kolejnych stron rem pamięci. Początek - $f00+$100! rep 16 set 15, lms >$100,hsc - tryb GR.8 nxt rem okno tekstowe. set 2,lms $4000,dli - Pamięć ekranu od $4000 rep 9 set 2,dli - Razem 10 linii, w każdej przerwanie dli nxt set 14,lms $5000,dli rep 95 set 14 - 96 linii w trybie 7+ nxt jvb $8000,dli - skok na początek end rem PROGRAM PRZYKŁADOWY NR 2 rem Ekran w trybie graphics 0 org $9c20 adres początkowy rep 3 emp 8 24 linie puste nxt set 2,lms $9c40 pamięć ekranu od $9c40 rep 23 set 2 razem 24 linie obrazu nxt jvb $9c20 skok na początek end Maciej Czarnota
|