Skocz do zawartości

Pomocna odpowiedź

@InspektorGadzet Panie kolego... miło by było aby znalazł Pan jakiś inny temat (ew. interlokutorów) do dyskusji. Nie wiem co robiłeś, niespecjalnie mnie to interesuje. Jeśli nie rozumiesz tego co napisałem, to idź się przespać, a najlepiej sprawdź, czy na onecie Cię nie potrzebują. Pamiętaj: rozmawiamy konkretnie o 6510, to że znasz inne procesory to nas tu niewiele interesuje.

@atlantis86 wiem - tylko np. do realizacji portu wyjściowego wystarczy dekoder, do we/wy potrzebne jest coś co przełączy szynę danych.

Pogadamy później, jak się pewien kolega przeniesie na inne forum, bo w tej chwili nie ma to żadnego sensu.

  • Nie zgadzam się! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
56 minut temu, atlantis86 napisał:

Systemy wzorowane na 8080/8085 (np. Z80 albo rodzina x86) miały osobną (mniejszą) przestrzeń adresową dla układów IO.

I to był nie najlepszy pomysł, bo nie dało się zastosować wszystkich rozkazów CPU dla układów IO.Dekoder adresowy w praktyce musiał być na co najmniej 2 układach TTL.  Ja w Z-80 peryferia podłączałem  tak jak w każdym normalnym systemie  (np ARM, 68k) w liniową przestrzeń adresową a nie w jak w 8080, Z-80, 8051q czy AVR. Jak widać po współczesnych, nowoczesnych rozwiązaniach, pomysł oparty o fanaberie Intela upadł.

25 minut temu, ethanak napisał:

tylko np. do realizacji portu wyjściowego wystarczy dekoder, do we/wy potrzebne jest coś co przełączy szynę danych.

Chyba za dużo C2H5OH. Prześpij się, naucz się projektować systemy mikroprocesorowe i dopiero po tym wróć do rozmowy, bo jak na razie to głupoty piszesz. Budowałem systemy z 6502, 680x0, Z-80, 8051 z zewnętrzną RAM, ROM, PIO i nie trzeba przełączać szyny danych. Poznałeś AVR i masz mgliste pojęcie o systemach mikroprocesorowych.

25 minut temu, Treker napisał:

lepiej zamienić na 2-3 merytoryczne zdania, z których będzie można się czegoś dowiedzieć.

Napisałem na czym buduje się dekoder adresowy, do jakich linii IO się go podłącza i że nie trzeba przełączać linii danych. Jeśli ktoś chce zgłębić wiedze z tym tematem nie zobaczy jak jest zbudowany CA-80 albo Cobra1.

W zeszycie "CA80 MIK 05" (plik ma ponad 50MB więc nie mogę go tu umieścić) znajdują się schematy CA-80. @ethanak gdzie tam jest przełączana szyna danych? Fragment dokumentacji Cobry1 w załączniku. Gdzie przełączanie szyny danych? To samo w systemie na 680x0, który zaprojektowałem.

AV 85 3 str16 17 (schemat czesc z procesorem).pdf

680x0 bufor.pdf 680x0 cpu.pdf 680x0 cpu bga.pdf 680x0 dekoder.pdf 680x0 isa.pdf 680x0 lpt timer.pdf 680x0 pio.pdf 680x0 prj.pdf 680x0 rom ram.pdf 680x0 slotcpu.pdf 680x0 sloty.pdf 680x0 vic.pdf

Edytowano przez InspektorGadzet

Udostępnij ten post


Link to post
Share on other sites

chętnie zobaczę co się wywinie z tej dyskusji, bo zawsze chciałem zbudować komputer na 8-bitowym procesorze, i widzę dużo wiedzy można stąd wyciągnąć ^^

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
22 minuty temu, Leoneq napisał:

zawsze chciałem zbudować komputer na 8-bitowym procesorze,

Dobrze udokomentowany jest CA-80. Cobry1 nie polecam, chyba, ze zmodyfikujesz konstrukcję tak aby obsługiwała przerwania.

W dzisiejszych czasach, budowa systemu nie jest rozsądna, chyba, że to duży system ale od tego raczej nie zaczyna się przygody z CPU. 8-bit tez nie zachwyca, a 32-bit to nie taka prosta sprawa zwłaszcza przy szybkim taktowaniu.16-bit taki kompromis, bo są pamięci ROM/FLASH i RAM 16-bit. Jak można wnioskować z załączników które umieściłem dwa posty wcześniej, zbudowanie systemu 16-bit jest wykonalne ale problemem jest emulacja ROM/FLASH. Teraz pewnie nie łatwo będzie kupić emulator trzeba będzie go więc zrobić albo napisać prosta procedurę, która będzie ładowała program przez np UART do FLASH czy RAM. No i bez CPLD raczej nie podchodź. Pierwszą wersję zrobiłem na 2 GAL 20V8, na TTL to chyba ponad 5 sztuk potrzeba.

Łatwo zbudować coś na 8051 bo ROM, SIO, CTC masz w jednej obudowie. Na zewnątrz tylko ROM i dodatkowe IO, RAM. Można tez zrobić np na P8051RD2. Wszystko łącznie z FLASH i sporej ilości (jak na 8051) RAM masz w jednej obudowie, programowanie przez bootloader przez UART.

Inna opcja, to płytka NUCLEO + 6502 czy Z-80. W EP były artykuły na ten temat. Z 68000 chyba też był.

Edytowano przez InspektorGadzet

Udostępnij ten post


Link to post
Share on other sites

właśnie myślałem o zakupie z80 z kostką ramu i komunikować się po serialu z pc jako terminal (na start).  Ale na to jeszcze mam czas - może po drodze taki układ sam do mnie trafi XD
taki komputer miałby być tylko do celów edukacyjnych, ostatecznie na retrogranie (emulatorów nie lubię, np. mam drastica i chyba jednak dsa normalnego se kupie). Pytanie jeszcze, 6502 czymś znaczącym się różni od z80 "na start"?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
3 godziny temu, atlantis86 napisał:

W przypadku Z80 była to chyba jedna dodatkowa linia, którą trzeba było przepuścić przez dodatkową logikę aby stwierdzić, z czym procesor chce się w danej chwili dogadać.

IORQ - dostęp do IO, MREQ - dostęp do pamięci. W praktyce trzeba było dać dwa dekodery, jeden dla pamięci drugi dla IO. Jeśli po 4 stroby wystarczy można było to zrealizować jednym układem 74HC155.

Fajne IO z rodziny Z-80 to KIO. Około 2003 roku miałem na tym robić projekt ale Zilog wycofał się z PL i temat umarł. W sumie dobrze, bo miałem też robić, na beznadziejnych Z8. To dopiero syf.Ciekawym CPU jest Z180 (Z-80 z MMU). C166 też fajny 16-bit. 80251 jest za to mikrokontrolerem z możliwością adresowania 128kB pamięcią programu.

ColdFire fajny 32-bit. 683xx mikrokontrolery 16-bit (wewnętrzna budowa 32-bit). 68008 wersja 68000 z magistralą 8-bit. Trochę tych procków się poznała, nawet H8 się kiedyś bawiłem. Teraz ARM, zwłaszcza STM32, wygryzł inne rodziny. Nie ma się co dziwić, przy tym samym zegarze, ARM jest ok 7 razy szybszy od AVR a niedawno dotarła do mnie NUCLEO z F7 480MHz to taki AVR Xmega 3,3GHz 🙂 Ponadto KAŻDY ARM ma to czego brakuje KAŻDEMU AVRmega/tiny czyli DMA. W takim Z-80 czy 8080 DMA nie bardzo mogło rozwinąć skrzydła, w ARM jest inaczej.

 

2 godziny temu, Leoneq napisał:

Pytanie jeszcze, 6502 czymś znaczącym się różni od z80 "na start"?

Z-80 jest popularniejszy, ma wielopoziomowy system przerwań z CTC, SIO, PIO można dość wydajne systemy budować.

6502 jest prosty w budowie, ma prosty język maszynowy, dużo trybów adresowania o czym Z-80 może pomarzyć. Czasem, to co 6502 robi jednym rozkazem, Z-80 wymaga 3 i to mimo tego, że Z-80 ma więcej rozkazów (ok 700, 6502 ok 240). To właśnie dzięki trybom adresowania 6502 jest szybszy od Z-80 przy 4 razy wolniejszym zegarze i od 8051 przy 12 razy wolniejszym zegarze.

Edytowano przez InspektorGadzet

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
2 godziny temu, Leoneq napisał:

właśnie myślałem o zakupie z80 z kostką ramu i komunikować się po serialu z pc jako terminal (na start).  Ale na to jeszcze mam czas - może po drodze taki układ sam do mnie trafi XDtaki komputer miałby być tylko do celów edukacyjnych, ostatecznie na retrogranie (emulatorów nie lubię, np. mam drastica i chyba jednak dsa normalnego se kupie). Pytanie jeszcze, 6502 czymś znaczącym się różni od z80 "na start"?

Wgrywanie programu do RAM-u przez UART nie jest wcale zadaniem trywialnym. Tak czy inaczej będziesz potrzebował jakiejś stałej pamięci (np. EPROM lub EEPROM), w której będziesz trzymał podstawowe podprogramy obsługujące transmisję szeregową, wektory przerwań, a także bootloader odpowiedzialny za ładowanie programu. Myślałem, żeby zrobić coś podobnego w jednym ze swoich projektów, tylko zamiast do RAM-u, ładować program do pamięci EEPROM. Mógłbym w ten sposób programować urządzenie w sposób przypominajacy Arduino. Jednak do tej pory nie chciało mi się za to zabrać i "męczę się" z kasownikiem i programatorem EPROM-ów. 😉

O budowaniu komputera do retrogamingu raczej zapomnij. Wszystko rozbija się o grafikę i dźwięk. Niemal wszystkie popularne komputery korzystały ze specjalnych chipów (np. słynne SID i VIC w Commodore). Nie były one dostępne w handlu. Obecnie można je czasem kupić na aukcjach - demontowane z uszkodzonych egzemplarzy, za cenę zbliżoną do używanego C64. Na dobrą sprawę pewne dałoby się je odtworzyć w jakimś FPGA, ale tutaj pojawia się pytanie o sens takiego przedsięwzięcia, skoro można w ten sposób odtworzyć cały komputer. Prościej wygląda sytuacja z układem ULA z ZX Spectrum - jego dało się odtworzyć za pomocą dużej ilości układów logicznych, powinien się też zmieścić w lepszym układzie CPLD. Zapewne są już gdzieś dostępne odpowiednie projekty. Na twoim miejscu budując komputer do grania w klasyki, celowałbym właśnie w Spectrum. Tyle tylko, że nie masz się co oszukiwać, że będzie to rozwiązaniem prostszym i tańszym niż zakup używanego "gumiaka". Bo nie będzie. 😉

Jeśli chcesz się bawić w technikę mikroprocesorową, to tutaj sens mają właściwie tyko zastosowania sentymentalno-dydaktyczne (CA-80), ewentualnie wzbogacone o sens praktyczny. W przypadku moich projektów mamy do czynienia z tą drugą sytuacją - próbuję budować na starych procesorach rzeczy, które o wiele prościej i szybciej mógłbym uruchomić na Atmedze. Ale tu chodzi o frajdę. 😉

Edytowano przez atlantis86

Udostępnij ten post


Link to post
Share on other sites
56 minut temu, InspektorGadzet napisał:

To właśnie dzięki trybom adresowania 6502 jest szybszy od Z-80

Dodatkowo: 6502 pracował "na zakładkę" (tzn. w cyklu wykonania pobierał jednocześnie pierwszy bajt następnej instrukcji).

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
53 minuty temu, atlantis86 napisał:

Jeśli chcesz się bawić w technikę mikroprocesorową, to tutaj sens mają właściwie tyko zastosowania sentymentalno-dydaktyczne (CA-80), ewentualnie wzbogacone o sens praktyczny. W przypadku moich projektów mamy do czynienia z tą drugą sytuacją - próbuję budować na starych procesorach rzeczy, które o wiele prościej i szybciej mógłbym uruchomić na Atmedze. Ale tu chodzi o frajdę

Większa frajdę daje zbudowanie własnego CPU Z-80 ma sporo tranzystorów ale 6502 jest prosty

a jak już jest CPU to mam z firmy Atari schematy układu TIA używanego w Atari2600. Wiadro TTL i mamy konsolę do gier.

Edytowano przez InspektorGadzet

Udostępnij ten post


Link to post
Share on other sites
Przed chwilą, InspektorGadzet napisał:

Większa frajdę daje zbudowanie własnego CPU https://monster6502.com/

To też mi chodzi po głowie, chociaż pewnie pójdę po linii najmniejszego oporu. Czyli 74181 i mikrokod. Nie mam zamiaru budować CPU z pojedynczych tranzystorów. Chociaż z grupą znajomych pracujemy nad projektem tranzystorowego zegara cyfrowego. Niestety obecnie projekt wisi w próżni. 😉

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
16 godzin temu, atlantis86 napisał:

pewnie pójdę po linii najmniejszego oporu. Czyli 74181 i mikrokod. Nie mam zamiaru budować CPU z pojedynczych tranzystorów

Faktycznie budowanie z tranzystorów to przesada ale z bramek czemu nie? Może ARM zbudujesz, też ma stosunkowo prosta konstrukcję.

Dla zainteresowanych TIA i Atari2600.

Mnie to coś na 4004 się marzy.

 

TIA_1A_2048_1.jpg TIA_1A_2048_2.jpg TIA_1A_2048_3.jpg

TIA_1A_2048_4.jpg TIA_1A_2048_5.jpg Schematic_Atari2600_1000.png

Schematic_Atari2600_2000.png Schematic_Atari2600_Cartridge_PAL.gif Schematic_Atari2600_Console_PAL.gif

Schematic_Atari2600_ControlPanel_PAL.gif Schematic_Atari2600_CX22_2000.png Schematic_Atari2600_Junior_PAL.gif

Schematic_Atari2600_Modulator_PAL.gif Schematic_Atari2600A_2000.png Schematic_Atari2600_RFSections_2000.png

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
1 godzinę temu, ethanak napisał:

Dodatkowo: 6502 pracował "na zakładkę" (tzn. w cyklu wykonania pobierał jednocześnie pierwszy bajt następnej instrukcji).

Inną ciekawą cechą 6502 było to, że dostęp do pamięci miał w jednej fazie zegara, w drugiej mogło się odbywać odświeżanie DRAM lub dostęp układu wizyjnego albo drugiego CPU. 6502 nie miał 3-stanowwej magistrali adresowej za to taką posiadał 6510 czy 8500 (CMOS'owa wersja 6502).

6502 miał niespotykane w 8-bit programowe przerwanie (rozkaz BRK). Wektor był taki sam jak dla maskowalnego ale w rejestrze statusu był ustawiany  bit "B". 6502, umieszczał na stosie rejestr statusu po wejściu w przerwanie i zdejmował wychodząc. Ciekawy był bit "V". Istniał rozkaz kasujący ten bit (CLV) ale nie było rozkazu ustawiającego go. Bit ten mógł być ustawiony przez zmianę pinu CPU (chyba SYNC). Używane to było w napędach dyskowych Commodore. Wtedy zrozumiała była sekwencja rozkazów:

	CLV
loop:	BVC loop

która wydawałoby się powinna doprowadzić do zawieszenia CPU.

6502 to prawdziwe 8-bit. Poza PC wszystkie rejestry były 8-bit, Z-80 miał pary rejestrów. W stosunku do Z-80 praktycznie wszystkie rozkazy ustawiały znaczniki, dlatego wiele operacji robiono dwoma rozkazami a 8080 czy Z-80 potrzebował trzech. Przykładowo na Z-80

LD a,xxxx
CMP a,0
JNE adres

a w 6502:

LD a,xxxx
BNE adres

 

Edytowano przez InspektorGadzet

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
20 godzin temu, InspektorGadzet napisał:

Faktycznie budowanie z tranzystorów to przesada ale z bramek czemu nie? Może ARM zbudujesz, też ma stosunkowo prosta konstrukcję.

Mnie ten Monster 6502 trochę ciekawi, odkąd po raz pierwszy usłyszałem o tym projekcie. Nie powiem - chciałbym go mieć jako "gadżet". Przy czym pewnie koszt zamówienia płytki o tym rozmiarze wyszedłby astronomiczny, nawet w Chinach. Tranzystory i LEDY-y drogie nie są, ale przy tej ilości też uzbierałaby się zauważalna kwota...

Cytat

Mnie to coś na 4004 się marzy.

To jednak poszukiwany obiekt kolekcjonerski, a jego ceny na aukcjach są dość wysokie. Trochę bałbym się z nim eksperymentować. No i złożony na tym system będzie dość mocno ubogi...

Zanim zabiorę się za budowanie własnego procesora, pewnie będę jeszcze kontynuował eksperymenty z polskim MCY7880. Potem chciałbym złożyć coś na 68k, tylko do tego czasu muszę popracować nad umiejętnościami programowania CPLD. 😉

Edytowano przez atlantis86
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
49 minut temu, atlantis86 napisał:

Potem chciałbym złożyć coś na 68k, tylko do tego czasu muszę popracować nad umiejętnościami programowania CPLD.

Jak zdobędzie 74xx148 (teraz to chyba nie problem) to resztę na kilku 74xx zrobisz. Jak masz dostęp do programatora GAL lub PALCE, to mogę dać pliki źródłowe i wynikowe dla GAL. Potrzebne będą dwa GAL/PALCE. Poszukam tych plików, będziesz wiedział jak to było zbudowane, bo nawet BusError obsługiwałem.

Coś już znalazłem (archiwum Amigi musiałem otworzyć):

Schemat1.thumb.gif.651c0dbd937798f24dfd5d5bffa48358.gif  Schemat.2-IO.gif  Schemat.2-Pamieci.gif 

GAL, daję co mam:

GAL20V8
dekoder

;---------------------------- Deklaracja pinów ----------------------
A3  A2  A1    RDL   WRL CS0  CS1 IO2 IO3   RW    NC GND
NC  NC  DTACK CS574 NC  ELCD NC  NC  CS245 IORDY NC VCC


;---------------------------- Dekoder adresowy ----------------------
/CS574   = /WRL * /IO2 * /A1 * /A2 * /A3	;Rejestr 574 - IO2 #00
/CS245   = /RDL * /IO2 * /A1 * /A2 * /A3	;Rejestr 245 - IO2 #00
ELCD     = /RDL * /IO2 *        A2 * /A3	;LCD         - IO2 #04-06
         + /WRL * /IO2 *        A2 * /A3

DESCRIPTION:
GAL22V10
RW

;---------------------------- Deklaracja pinów ----------------------
Q7  NC   NC  AS   UDS  LDS RW  FC2 FC1 FC0  NC  GND
ROM USER VPA BERR INTA WRU WRL RDU RDL R164 NC  VCC


;---------------------------- Dekoder RD/WR -------------------------
/WRL    =  /LDS * /RW
/WRU    =  /UDS * /RW
/RDL    =  /LDS *  RW
/RDU    =  /UDS *  RW

;---------------------------- Generator potwierdzenia przerwania ----
/VPA    =  FC0 * FC1 * FC2 * /AS
/INTA   =  FC0 * FC1 * FC2

/USER  =  /FC2 * /RW			;Jeôli tryb uűytkownika i zapis to USER=L

;---------------------------- Pozostaîe -----------------------------
/R164   =  AS				;Negator dla 74HCT164
/BERR   =    Q7				;Negator dla wytworzenia BusError 74164 przepeîni sië
	  + /ROM * /WRL  		; lub gdy próba zapisu do ROML
          + /ROM * /WRU  		; lub  ROMU



DESCRIPTION:
GAL20V8
8 na 3

;---------------------------- Deklaracja pinów ----------------------
Clock IRes NC    NC   IRQ1 IRQ2  IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 GND
OE    ResI IPL0  IPL1 IPL2 Reset NC   ResO Halt CLK  NC   VCC



;---------------------------- Enkoder 8 na 3 ------------------------
IPL0 =   /IRQ2 * IRQ1
       + /IRQ4 * IRQ1 * IRQ2 * IRQ3
       + /IRQ6 * IRQ1 * IRQ2 * IRQ3 * IRQ4 * IRQ5
       +  IRQ1 * IRQ2 * IRQ3 * IRQ4 * IRQ5 * IRQ6 * IRQ7

IPL1 =   /IRQ3 * IRQ1 * IRQ2
       + /IRQ4 * IRQ1 * IRQ2 * IRQ3
       + /IRQ7 * IRQ1 * IRQ2 * IRQ3 * IRQ4 * IRQ5 * IRQ6
       +  IRQ1 * IRQ2 * IRQ3 * IRQ4 * IRQ5 * IRQ6 * IRQ7

IPL2 =   /IRQ5 * IRQ1 * IRQ2 * IRQ3 * IRQ4
       + /IRQ6 * IRQ1 * IRQ2 * IRQ3 * IRQ4 * IRQ5
       + /IRQ7 * IRQ1 * IRQ2 * IRQ3 * IRQ4 * IRQ5 * IRQ6
       +  IRQ1 * IRQ2 * IRQ3 * IRQ4 * IRQ5 * IRQ6 * IRQ7

;---------------------------- Dzielnik przez 2 ----------------------
CLK.R  = /CLK


;---------------------------- Reset ---------------------------------
ResO.T = GND       		;wyjôcie trójstanowe (.T)
Halt.T = GND			;wyjôcie trójstanowe (.T)
ResO.E = /IRes       		;pin kontrolujâcy stan trzeci (.E)
Halt.E = /IRes			;pin kontrolujâcy stan trzeci (.E)
Reset  = ResI



DESCRIPTION:

Wyjôcia trójstanowe:
- wyjôcie oznaczone (.T) jest wyjôciem trójstanowym
- opis po pinie oznaczonym (.E) okreôla kiedy wyjôcie bëdzie w stanie
  aktywnym, a kiedy w trzecim
- wejôcie /OE wpîywa na wyjôcia rejestrowe (.R) i niewykorzystane (NC)


GAL20V8
dekoder

;---------------------------- Deklaracja pinów ----------------------
A21 A22 A20 A19 A18 A17 A16 A15 IOE INTA  USER GND
Q1  Q2  QOE IO2 IO3 IO0 IO1 RAM ROM DTACK A23  VCC


;---------------------------- Dekoder adresowy ----------------------
/ROM	 =  /A23 * /A22 * /A21 * /A20 * /A19 * /A18 * /A17		;ROM $000000-$01ffff (128kb)
/RAM	 =   A23 * /A22 * /A21 * /A20 * /A19 * /A18 * /A17 * /A16	;RAM $800000-$80ffff  (64kb)
/IO0	 =   A23 *  A22 * /A21 * /A20 * /A19 * /A18 * /A17 * /A16	;IO0 $c00000-$c0ffff  (64kb)
/IO1	 =   A23 *  A22 * /A21 * /A20 * /A19 * /A18 * /A17 *  A16	;IO1 $c10000-$c1ffff  (64kb)
/IO2	 =   A23 *  A22 * /A21 * /A20 * /A19 * /A18 *  A17 * /A16	;IO2 $c20000-$c2ffff  (64kb)
/IO3	 =   A23 *  A22 * /A21 * /A20 * /A19 * /A18 *  A17 *  A16	;IO3 $c30000-$c3ffff  (64kb)


/DTACK.T =   /ROM  * Q1		;DTACK=L gdy wybrano ROM,
 	   + /RAM		; RAM,
	   + /IO0		; IO0,
	   + /IO1		; IO1,
	   + /IO2  * Q2		; IO2,
	   + /IO3  * Q2         ; IO3
				;Rownanie z "* Q1" lub "* Q2" powoduje wstawienie
				; jednego lub dwóch taktów oczekiwania

/QOE     =   /ROM               ;DTACK=wychodzi ze stanu trzeciego gdy zaadresowano dekoder
	   + /RAM               ; wyprowadzenia QOE i IOE sâ ze sobâ poîâczone
	   + /IO0
	   + /IO1
	   + /IO2
	   + /IO3
DTACK.E  = /IOE



DESCRIPTION:

??? Dodaę:
Jeôli USER=L i wybrany obszar RAM lub ROM supervisora to nie generowaę DTACK
 co spowoduje, űe próba zapisu RAM supervisora wywoîa BusError

 

Jak chcesz to mogę dać komplet materiałów, łącznie z PCB w Autotrax.

Edytowano przez InspektorGadzet

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

W załączniku ZIP68000.zip.  Do obrazków użyj IrfanView on rozpoznaje Amigowy format IFFILBM. W archiwum znajdziesz programy testowe (*.s)

; Nie dajemy dyrektywy ORG $000000 bo bëdzie úle,jeôli brak dyrektywy
; to i tak kompilator skompiluje od adresu $000000 dodajâc tablicë relokacji
; adresy w rozkazach ukazane w listingu sâ nieprawdziwe. Rzeczywisty adres
; jest równy ADRES-adres dîugiego sîowa pod "dc.l start"


;---------------- Podziaî pamiëci RAM ----------
data_user		equ	$0000		;Poczâtek danych urzytkownika
						;... dane urzytkownika
;---------------- Staîe ------------------------
LED		equ	$c20000			;Adres zatrzasku 74HCT574
FLASH_ERR_TIME	equ	$4000			;Szybkoôę migania LEDw
ROL_ERR_TIME	equ	$2000			;Szybkoôę biegajâcego punktu

;---------------- Wektory w ROM ----------------
		dc.l	$ffff			;1   Wskaúnik stosu (na koniec ram)
		dc.l	start			;0   Wektor startu

;-----------------------------------------------
;Biegajâcy punkt
;
start:		nop				;Jesteômy w trybie nadzorcy
flash:  	move.b	#%11111110,d0		;D0 - przesowany wzór
		move.l	#5*8,d1			;D1 - liczba powtorzen skrola
flash_loop:     move.b	d0,LED
		rol.b	#1,d0
		move.l	#ROL_ERR_TIME,d2	;D2 - licznik opóúnienia
flash_delay:	divs	#1,d1			;lepsze niű NOP
		dbf	d2,flash_delay
		dbf	d1,flash_loop
		move.l #7,d0  ;???
		bra	error ;???

;-----------------------------------------------
;Sygnalizacja bîëdu na LED'ach
;we: D0 - nr bîëdu
;
error:   	eor.b	#$ff,d0			;Negujemy (ze wzglëdu na sposób wîâczenia diod)
error_loop:	move.b	d0,LED			;Zaôwiecenie LEDw
		move.l	#FLASH_ERR_TIME,d1
error_delay:	divs	#1,d1			;lepsze niű NOP
		dbf	d1,error_delay
		move.b	#$ff,LED      		;Zgaszenie LED'ów
		move.l	#FLASH_ERR_TIME,d1
error_delay2:	divs	#1,d1			;lepsze niű NOP
		dbf	d1,error_delay2
		bra	error_loop		;Dodaę liczenie obiegów
						; i po kilkunastu powtórzeniach
						; wykonaę rozkaz RESET i skok $000000

Poczytaj komentarze, niektóre nie wymagają RAM do działania (nie używają stosu) i służą do pierwszych testów systemu. Polskie znaki  w plikach w standardzie AmigaPL. Nie wiem czy przypadkiem nie ma tu prostego multikaskingu:



; Nie dajemy dyrektywy ORG $000000 bo bëdzie úle,jeôli brak dyrektywy
; to i tak kompilator skompiluje od adresu $000000 dodajâc tablicë relokacji
; adresy w rozkazach ukazane w listingu sâ nieprawdziwe. Rzeczywisty adres
; jest równy ADRES-adres dîugiego sîowa pod "dc.l stos_supervisor_str"




;DODAĘ:
;- generowanie sygnalu USER (gdy superwisor i RW=L(zapis) USER=L)
;
;- gdy USER=L i wybrany RAM superwisora nie generowaę DTACK co wywoîa
;  buserror (próba zapisu ram superwisora)


;- gdy INTA blokowanie Io w górnej przestrzeni adresowej (powyűej $f00000)


CAL100us		equ	38		;Licznik pëtli 100µs

;---------------- Podziaî pamiëci RAM ----------
ram			equ	$800000
data_user		equ	ram			;Poczâtek danych uűytkownika
tab_char_lcd		equ	ram			;
;xxxx			equ	ram+8
							;... dane uűytkownika
stos_user_end		equ	ram+$6000		;koniec stosu uűytkownika
stos_user_str		equ	ram+$8000		;Poczâtek stosu uűytkownika

data_supervisor		equ	ram+$8000		;Poczâtek danych supervisora
b_D0			equ	data_supervisor+$000
b_D1			equ	data_supervisor+$004
b_D2			equ	data_supervisor+$008
b_D3			equ	data_supervisor+$00C
b_D4			equ	data_supervisor+$010
b_D5			equ	data_supervisor+$014
b_D6			equ	data_supervisor+$018
b_D7			equ	data_supervisor+$01C
b_A0			equ	data_supervisor+$020
b_A1			equ	data_supervisor+$024
b_A2			equ	data_supervisor+$028
b_A3			equ	data_supervisor+$02C
b_A4			equ	data_supervisor+$030
b_A5			equ	data_supervisor+$034
b_A6			equ	data_supervisor+$038
b_function_code		equ	data_supervisor+$03C
b_access_adress		equ	data_supervisor+$040
b_instruction_register	equ	data_supervisor+$044
b_status_register	equ	data_supervisor+$048
b_program_counter	equ	data_supervisor+$04C
							;... dane supervisora
stos_supervisor_end	equ	ram+$f000		;koniec stosu supervisora
stos_supervisor_str	equ	ram+$10000		;Poczâtek stosu superwisora

;---------------- Staîe programu ---------------
LED		equ	$c20000			;Adres zatrzasku 74HCT273
KEY		equ	$c20001			;Adres bramy 74HCT245
LCD_D		equ	$c30005			;Adres wyôwietlacza LCD (Dane)
LCD_R		equ	$c30001			;Adres wyôwietlacza LCD (Rozkaz)
CS1Fx		equ	$c00000			;Adres IDE CS0
CS3Fx		equ	$c10000			;Adres IDE CS1

FLASH_ERR_TIME	equ	$8000			;Szybkoôę migania LEDw
ROL_ERR_TIME	equ	$1000			;Szybkoôę biegajâcego punktu
TEST_WAIT_TIME	equ	$8000			;Czas wyôwietlania wyniku testu na LED'ach

T		equ	15			;Bity statusu - tryb nadzorcy
S		equ	13
IM2		equ	10			; maska IRQ gdy=%000 wszystkie przerwania
IM1		equ	9			;           gdy=%111 tylko NMI (Level 7)
IM0		equ	8
X		equ	4			;Bity statusu - tryb uűytkownika
N		equ	3
Z		equ	2
V		equ	1
C		equ	0

CLS		equ	$0F			;Kod ASCII czyszczenia LCD
POZIOM1		equ	254			;Kod ASCII BarGraph
POZIOM2		equ	253			;Kod ASCII BarGraph
POZIOM3		equ	252			;Kod ASCII BarGraph
POZIOM4		equ	251			;Kod ASCII BarGraph
STRZALKA_L	equ	250
STRZALKA_P	equ	249
PLAY		equ	248

;---------------- Wektory w ROM ----------------
		dc.l	stos_supervisor_str	;0   Wskaúnik stosu (na koniec ram)
		dc.l	start			;1   Wektor startu
	;Aby dziaîaîy stany wyjâtkowe musi byę sprawna pamiëę RAM
		dc.l	bus_error               ;2
		dc.l	adres_error             ;3
		dc.l	command_error           ;4   Nieistniejâca instrukcja
		dc.l	division_error          ;5   Dzielenie przez ZERO
		dc.l	chk                     ;6   Instrukcja CHK <ea>,Dn
		dc.l	trapv                   ;7   Instrukcja TRAPV
		dc.l	priority_error		;8   Pogwaîcenie priorytetu
		dc.l	trap_error              ;9   ôledzenie
		dc.l	emu1010_error           ;10
		dc.l	emu1111_error           ;11
		dc.l	reserved_12             ;12
		dc.l	reserved_13             ;13
		dc.l	reserved_14             ;14
		dc.l	init_int_error          ;15  Niezaincjowany wektor przerwania
		dc.l	reserved_16		;16
		dc.l	reserved_17             ;17
		dc.l	reserved_18             ;18
		dc.l	reserved_19             ;19
		dc.l	reserved_20             ;20
		dc.l	reserved_21             ;21
		dc.l	reserved_22             ;22
		dc.l	reserved_23		;23
		dc.l	false_int_error		;24  Faîszywe przerwanie
		dc.l	int_1level		;25  Autowektor 1 poziomu
		dc.l	int_2level		;26  Autowektor 2 poziomu
		dc.l	int_3level		;27  Autowektor 3 poziomu
		dc.l	int_4level		;28  Autowektor 4 poziomu
		dc.l	int_5level		;29  Autowektor 5 poziomu
		dc.l	int_6level		;30  Autowektor 6 poziomu
		dc.l	int_7level		;31  Autowektor 7 poziomu
		dc.l	trap_0			;32  Instrukcja TRAP #0
		dc.l	trap_1			;33  Instrukcja TRAP #1
		dc.l	trap_2			;34  Instrukcja TRAP #2
		dc.l	trap_3			;35  Instrukcja TRAP #3
		dc.l	trap_4			;36  Instrukcja TRAP #4
		dc.l	trap_5			;37  Instrukcja TRAP #5
		dc.l	trap_6			;38  Instrukcja TRAP #6
		dc.l	trap_7			;39  Instrukcja TRAP #7
		dc.l	trap_8			;40  Instrukcja TRAP #8
		dc.l	trap_9			;41  Instrukcja TRAP #9
		dc.l	trap_10			;42  Instrukcja TRAP #10
		dc.l	trap_11			;43  Instrukcja TRAP #11
		dc.l	trap_12			;44  Instrukcja TRAP #12
		dc.l	trap_13			;45  Instrukcja TRAP #13
		dc.l	trap_14			;46  Instrukcja TRAP #14
		dc.l	trap_15			;47  Instrukcja TRAP #15
		dc.l	reserved_48		;48
		dc.l	reserved_49		;49
		dc.l	reserved_50		;50
		dc.l	reserved_51		;51
		dc.l	reserved_52		;52
		dc.l	reserved_53		;53
		dc.l	reserved_54		;54
		dc.l	reserved_55		;55
		dc.l	reserved_56		;56
		dc.l	reserved_57		;57
		dc.l	reserved_58		;58
		dc.l	reserved_59		;59
		dc.l	reserved_60		;60
		dc.l	reserved_61		;61
		dc.l	reserved_62		;62
		dc.l	reserved_63		;63
		dc.l	user_int_64             ;64   Wektory uűytkownika (potwierdzajâce)
		dc.l	user_int_65             ;65 
		dc.l	user_int_66             ;66 
		dc.l	user_int_67             ;67 
		dc.l	user_int_68             ;68 
		dc.l	user_int_69             ;69
		dc.l	user_int_70             ;70 
		dc.l	user_int_71             ;71 
		dc.l	user_int_72             ;72 
		dc.l	user_int_73             ;73 
		dc.l	user_int_74             ;74 
		dc.l	user_int_75             ;75 
		dc.l	user_int_76             ;76
		dc.l	user_int_77             ;77
		dc.l	user_int_78             ;78 
		dc.l	user_int_79             ;79 
		dc.l	user_int_80             ;80 
		dc.l	user_int_81             ;81 
		dc.l	user_int_82             ;82 
		dc.l	user_int_83             ;83 
		dc.l	user_int_84             ;84 
		dc.l	user_int_85             ;85 
		dc.l	user_int_86             ;86 
		dc.l	user_int_87             ;87 
		dc.l	user_int_88             ;88 
		dc.l	user_int_89             ;89 
		dc.l	user_int_90             ;90 
		dc.l	user_int_91             ;91 
		dc.l	user_int_92             ;92 
		dc.l	user_int_93             ;93 
		dc.l	user_int_94             ;94
		dc.l	user_int_95             ;95 
		dc.l	user_int_96             ;96 
		dc.l	user_int_97             ;97 
		dc.l	user_int_98             ;98 
		dc.l	user_int_99             ;99 
		dc.l	user_int_100            ;100
		dc.l	user_int_101            ;101
		dc.l	user_int_102            ;102
		dc.l	user_int_103            ;103
		dc.l	user_int_104            ;104
		dc.l	user_int_105            ;105
		dc.l	user_int_106            ;106
		dc.l	user_int_107            ;107
		dc.l	user_int_108            ;108
		dc.l	user_int_109            ;109
		dc.l	user_int_110            ;110
		dc.l	user_int_111            ;111
		dc.l	user_int_112            ;112
		dc.l	user_int_113            ;113
		dc.l	user_int_114            ;114
		dc.l	user_int_115            ;115
		dc.l	user_int_116            ;116
		dc.l	user_int_117            ;117
		dc.l	user_int_118            ;118
		dc.l	user_int_119            ;119
		dc.l	user_int_120            ;120
		dc.l	user_int_121            ;121
		dc.l	user_int_122            ;122
		dc.l	user_int_123            ;123
		dc.l	user_int_124            ;124
		dc.l	user_int_125            ;125
		dc.l	user_int_126            ;126
		dc.l	user_int_127            ;127
		dc.l	user_int_128            ;128
		dc.l	user_int_129            ;129
		dc.l	user_int_130            ;130
		dc.l	user_int_131            ;131
		dc.l	user_int_132            ;132
		dc.l	user_int_133            ;133
		dc.l	user_int_134            ;134
		dc.l	user_int_135            ;135
		dc.l	user_int_136            ;136
		dc.l	user_int_137            ;137
		dc.l	user_int_138            ;138
		dc.l	user_int_139            ;139
		dc.l	user_int_140            ;140
		dc.l	user_int_141            ;141
		dc.l	user_int_142            ;142
		dc.l	user_int_143            ;143
		dc.l	user_int_144            ;144
		dc.l	user_int_145            ;145
		dc.l	user_int_146            ;146
		dc.l	user_int_147            ;147
		dc.l	user_int_148            ;148
		dc.l	user_int_149            ;149
		dc.l	user_int_150            ;150
		dc.l	user_int_151            ;151
		dc.l	user_int_152            ;152
		dc.l	user_int_153            ;153
		dc.l	user_int_154            ;154
		dc.l	user_int_155            ;155
		dc.l	user_int_156            ;156
		dc.l	user_int_157            ;157
		dc.l	user_int_158            ;158
		dc.l	user_int_159            ;159
		dc.l	user_int_160            ;160
		dc.l	user_int_161            ;161
		dc.l	user_int_162            ;162
		dc.l	user_int_163            ;163
		dc.l	user_int_164            ;164
		dc.l	user_int_165            ;165
		dc.l	user_int_166            ;166
		dc.l	user_int_167            ;167
		dc.l	user_int_168            ;168
		dc.l	user_int_169            ;169
		dc.l	user_int_170            ;170
		dc.l	user_int_171            ;171
		dc.l	user_int_172            ;172
		dc.l	user_int_173            ;173
		dc.l	user_int_174            ;174
		dc.l	user_int_175            ;175
		dc.l	user_int_176            ;176
		dc.l	user_int_177            ;177
		dc.l	user_int_178            ;178
		dc.l	user_int_179            ;179
		dc.l	user_int_180            ;180
		dc.l	user_int_181            ;181
		dc.l	user_int_182            ;182
		dc.l	user_int_183            ;183
		dc.l	user_int_184            ;184
		dc.l	user_int_185            ;185
		dc.l	user_int_186            ;186
		dc.l	user_int_187            ;187
		dc.l	user_int_188            ;188
		dc.l	user_int_189            ;189
		dc.l	user_int_190            ;190
		dc.l	user_int_191            ;191
		dc.l	user_int_192            ;192
		dc.l	user_int_193            ;193
		dc.l	user_int_194            ;194
		dc.l	user_int_195            ;195
		dc.l	user_int_196            ;196
		dc.l	user_int_197            ;197
		dc.l	user_int_198            ;198
		dc.l	user_int_199            ;199
		dc.l	user_int_200            ;200
		dc.l	user_int_201            ;201
		dc.l	user_int_202            ;202
		dc.l	user_int_203            ;203
		dc.l	user_int_204            ;204
		dc.l	user_int_205            ;205
		dc.l	user_int_206            ;206
		dc.l	user_int_207            ;207
		dc.l	user_int_208            ;208
		dc.l	user_int_209            ;209
		dc.l	user_int_210            ;210
		dc.l	user_int_211            ;211
		dc.l	user_int_212            ;212
		dc.l	user_int_213            ;213
		dc.l	user_int_214            ;214
		dc.l	user_int_215            ;215
		dc.l	user_int_216            ;216
		dc.l	user_int_217            ;217
		dc.l	user_int_218            ;218
		dc.l	user_int_219            ;219
		dc.l	user_int_220            ;220
		dc.l	user_int_221            ;221
		dc.l	user_int_222            ;222
		dc.l	user_int_223            ;223
		dc.l	user_int_224            ;224
		dc.l	user_int_225            ;225
		dc.l	user_int_226            ;226
		dc.l	user_int_227            ;227
		dc.l	user_int_228            ;228
		dc.l	user_int_229            ;229
		dc.l	user_int_230            ;230
		dc.l	user_int_231            ;231
		dc.l	user_int_232            ;232
		dc.l	user_int_233            ;233
		dc.l	user_int_234            ;234
		dc.l	user_int_235            ;235
		dc.l	user_int_236            ;236
		dc.l	user_int_237            ;237
		dc.l	user_int_238            ;238
		dc.l	user_int_239            ;239
		dc.l	user_int_240            ;240
		dc.l	user_int_241            ;241
		dc.l	user_int_242            ;242
		dc.l	user_int_243            ;243
		dc.l	user_int_244            ;244
		dc.l	user_int_245            ;245
		dc.l	user_int_246            ;246
		dc.l	user_int_247            ;247
		dc.l	user_int_248            ;248
		dc.l	user_int_249            ;249
		dc.l	user_int_250            ;250
		dc.l	user_int_251            ;251
		dc.l	user_int_252            ;252
		dc.l	user_int_253            ;253
		dc.l	user_int_254            ;254
		dc.l	user_int_255            ;255

;---------------- Obsîuga bîëdów ---------------
bus_error:      jsr	pamietaj_group0		;Zapamiëtujemy ramkë ze stosu
		lea	txt_bus_err,A6		;Wyôwietlamy tekst
		bsr	text_lcd
		bsr	print_group0		;Wyôwietlamy ramkë stosu
		moveq	#2,d0
		bra     error_supervisor

adres_error:    jsr	pamietaj_group0
		lea	txt_adress_err,A6	
		bsr	text_lcd
		bsr	print_group0
		moveq	#3,d0 
		bra     error_supervisor

command_error:  jsr	pamietaj_group1		;Zapamiëtaj ramkë stosu
		lea	txt_command_err,a6	;Wyôwietlamy tekst
		bsr	text_lcd
		bsr	print_group1		;Wyôwietlamy ramkë stosu
		moveq	#4,d0 
		bra     error_supervisor

division_error:	jsr	pamietaj_group2		
		lea	txt_division_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#5,d0 
		bra     error_supervisor

chk:            jsr	pamietaj_group2		
		lea	txt_chk_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#6,d0 
		bra     error_supervisor

trapv:          jsr	pamietaj_group2		
		lea	txt_trapv_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#7,d0 
		bra     error_supervisor

priority_error: jsr	pamietaj_group1		
		lea	txt_prioryty_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#8,d0 
		bra     error_supervisor

trap_error:     jsr	pamietaj_group2		
		lea	txt_trap_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#9,d0 
		bra     error_supervisor

emu1010_error:	jsr	pamietaj_group1		
		lea	txt_emu1010_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#10,d0
		bra     error_supervisor

emu1111_error:  jsr	pamietaj_group1		
		lea	txt_emu1111_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#11,d0 
		bra     error_supervisor

reserved_12     moveq	#12,d0 
		bra     error_supervisor
reserved_13     moveq	#13,d0 
		bra     error_supervisor
reserved_14     moveq	#14,d0 
		bra     error_supervisor

init_int_error: jsr	pamietaj_group1		
		lea	txt_init_int_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#15,d0 
		bra     error_supervisor

reserved_16     moveq	#16,d0 
		bra     error_supervisor
reserved_17     moveq	#17,d0 
		bra     error_supervisor
reserved_18     moveq	#18,d0 
		bra     error_supervisor
reserved_19     moveq	#19,d0
		bra     error_supervisor
reserved_20     moveq	#20,d0 
		bra     error_supervisor
reserved_21     moveq	#21,d0
		bra     error_supervisor
reserved_22     moveq	#22,d0 
		bra     error_supervisor
reserved_23     moveq	#23,d0 
		bra     error_supervisor

false_int_error:rte 				;Tu lepiej daę powrót bo
	;	jsr	pamietaj_group1		; czasem wystëpuje faîszywe przerwanie
	;	lea	txt_false_int_err,a6	; i wyîorzy caîy program, a tak
	;	bsr	text_lcd		; 
	;	bsr	print_group1
	;	moveq	#24,d0 
	;	bra     error_supervisor

int_1level:     jsr	pamietaj_group1		
		lea	txt_int1_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#25,d0 
		bra     error_supervisor

int_2level:     jsr	pamietaj_group1		
		lea	txt_int2_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#26,d0 
		bra     error_supervisor

int_3level:     jsr	pamietaj_group1		
		lea	txt_int3_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#27,d0 
		bra     error_supervisor

int_4level:     jsr	pamietaj_group1		
		lea	txt_int4_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#28,d0
		bra     error_supervisor

int_5level:     jsr	pamietaj_group1		
		lea	txt_int5_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#29,d0 
		bra     error_supervisor

int_6level:     jsr	pamietaj_group1		
		lea	txt_int6_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#30,d0 
		bra     error_supervisor

int_7level:     jsr	pamietaj_group1		
		lea	txt_int7_err,a6	
		bsr	text_lcd
		bsr	print_group1
		moveq	#31,d0 
		bra     error_supervisor

trap_0:         jsr	pamietaj_group2
		lea	txt_trap0_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#32,d0 
		bra     error_supervisor

trap_1:         jsr	pamietaj_group2
		lea	txt_trap1_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#33,d0 	
		bra     error_supervisor

trap_2:         jsr	pamietaj_group2
		lea	txt_trap2_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#34,d0 
		bra     error_supervisor

trap_3:         jsr	pamietaj_group2
		lea	txt_trap3_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#35,d0 
		bra     error_supervisor

trap_4:         jsr	pamietaj_group2
		lea	txt_trap4_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#36,d0 
		bra     error_supervisor

trap_5:         jsr	pamietaj_group2
		lea	txt_trap5_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#37,d0
		bra     error_supervisor

trap_6:         jsr	pamietaj_group2
		lea	txt_trap6_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#38,d0 
		bra     error_supervisor

trap_7:         jsr	pamietaj_group2
		lea	txt_trap7_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#39,d0 
		bra     error_supervisor

trap_8:         jsr	pamietaj_group2
		lea	txt_trap8_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#40,d0 
		bra     error_supervisor

trap_9:         jsr	pamietaj_group2
		lea	txt_trap9_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#41,d0 
		bra     error_supervisor

trap_10:        jsr	pamietaj_group2
		lea	txt_trap10_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#42,d0 
		bra     error_supervisor

trap_11:        jsr	pamietaj_group2
		lea	txt_trap11_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#43,d0 
		bra     error_supervisor

trap_12:        jsr	pamietaj_group2
		lea	txt_trap12_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#44,d0 
		bra     error_supervisor

trap_13:        jsr	pamietaj_group2
		lea	txt_trap13_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#45,d0 
		bra     error_supervisor

trap_14:        jsr	pamietaj_group2
		lea	txt_trap14_err,a6	
		bsr	text_lcd
		bsr	print_group2
		moveq	#46,d0
		bra     error_supervisor

;trap_15:       jsr	pamietaj_group2
;		lea	txt_trap15_err,a6	
;		bsr	text_lcd
;		bsr	print_group2
;		moveq	#47,d0
;		bra     error_supervisor

reserved_48     moveq	#48,d0 
		bra     error_supervisor
reserved_49     moveq	#49,d0 
		bra     error_supervisor
reserved_50     moveq	#50,d0 
		bra     error_supervisor
reserved_51     moveq	#51,d0 
		bra     error_supervisor
reserved_52     moveq	#52,d0 
		bra     error_supervisor
reserved_53     moveq	#53,d0 
		bra     error_supervisor
reserved_54     moveq	#54,d0 
		bra     error_supervisor
reserved_55     moveq	#55,d0
		bra     error_supervisor
reserved_56     moveq	#56,d0 
		bra     error_supervisor
reserved_57     moveq	#57,d0 
		bra     error_supervisor
reserved_58     moveq	#58,d0 
		bra     error_supervisor
reserved_59     moveq	#59,d0
		bra     error_supervisor
reserved_60     moveq	#60,d0 
		bra     error_supervisor
reserved_61     moveq	#61,d0 
		bra     error_supervisor
reserved_62     moveq	#62,d0 
		bra     error_supervisor
reserved_63     moveq	#63,d0 
		bra     error_supervisor
user_int_64     moveq	#64,d0
		bra     error_supervisor
user_int_65     moveq	#65,d0 
		bra     error_supervisor
user_int_66     moveq	#66,d0 
		bra     error_supervisor
user_int_67     moveq	#67,d0 
		bra     error_supervisor
user_int_68     moveq	#68,d0 
		bra     error_supervisor
user_int_69     moveq	#69,d0 
		bra     error_supervisor
user_int_70     moveq	#70,d0 	
		bra     error_supervisor
user_int_71     moveq	#71,d0 
		bra     error_supervisor
user_int_72     moveq	#72,d0 
		bra     error_supervisor
user_int_73     moveq	#73,d0
		bra     error_supervisor
user_int_74     moveq	#74,d0 
		bra     error_supervisor
user_int_75     moveq	#75,d0 
		bra     error_supervisor
user_int_76     moveq	#76,d0 
		bra     error_supervisor
user_int_77     moveq	#77,d0 
		bra     error_supervisor
user_int_78     moveq	#78,d0 
		bra     error_supervisor
user_int_79     moveq	#79,d0 
		bra     error_supervisor
user_int_80     moveq	#80,d0 
		bra     error_supervisor
user_int_81     moveq	#81,d0 
		bra     error_supervisor
user_int_82     moveq	#82,d0
		bra     error_supervisor
user_int_83     moveq	#83,d0 
		bra     error_supervisor
user_int_84     moveq	#84,d0 
		bra     error_supervisor
user_int_85     moveq	#85,d0 
		bra     error_supervisor
user_int_86     moveq	#86,d0 
		bra     error_supervisor
user_int_87     moveq	#87,d0 
		bra     error_supervisor
user_int_88     moveq	#88,d0 
		bra     error_supervisor
user_int_89     moveq	#89,d0 
		bra     error_supervisor
user_int_90     moveq	#90,d0 
		bra     error_supervisor
user_int_91     moveq	#91,d0
		bra     error_supervisor
user_int_92     moveq	#92,d0 
		bra     error_supervisor
user_int_93     moveq	#93,d0 
		bra     error_supervisor
user_int_94     moveq	#94,d0 
		bra     error_supervisor
user_int_95     moveq	#95,d0 
		bra     error_supervisor
user_int_96     moveq	#96,d0 
		bra     error_supervisor
user_int_97     moveq	#97,d0 
		bra     error_supervisor
user_int_98     moveq	#98,d0 
		bra     error_supervisor
user_int_99     moveq	#99,d0 
		bra     error_supervisor
user_int_100    moveq	#100,d0
		bra     error_supervisor
user_int_101    moveq	#101,d0 
		bra     error_supervisor
user_int_102    moveq	#102,d0 
		bra     error_supervisor
user_int_103    moveq	#103,d0 
		bra     error_supervisor
user_int_104    moveq	#104,d0 
		bra     error_supervisor
user_int_105    moveq	#105,d0 
		bra     error_supervisor
user_int_106    moveq	#106,d0 
		bra     error_supervisor
user_int_107    moveq	#107,d0 
		bra     error_supervisor
user_int_108    moveq	#108,d0 
		bra     error_supervisor
user_int_109    moveq	#109,d0
		bra     error_supervisor
user_int_110    moveq	#110,d0
		bra     error_supervisor
user_int_111    moveq	#111,d0
		bra     error_supervisor
user_int_112    moveq	#112,d0
		bra     error_supervisor
user_int_113    moveq	#113,d0
		bra     error_supervisor
user_int_114    moveq	#114,d0
		bra     error_supervisor
user_int_115    moveq	#115,d0
		bra     error_supervisor
user_int_116    moveq	#116,d0
		bra     error_supervisor
user_int_117    moveq	#117,d0
		bra     error_supervisor
user_int_118    moveq	#118,d0
		bra     error_supervisor
user_int_119    moveq	#119,d0
		bra     error_supervisor
user_int_120    moveq	#120,d0
		bra     error_supervisor
user_int_121    moveq	#121,d0 
		bra     error_supervisor
user_int_122    moveq	#122,d0 
		bra     error_supervisor
user_int_123    moveq	#123,d0 
		bra     error_supervisor
user_int_124    moveq	#124,d0 
		bra     error_supervisor
user_int_125    moveq	#125,d0 
		bra     error_supervisor
user_int_126    moveq	#126,d0 
		bra     error_supervisor
user_int_127    moveq	#127,d0
		bra     error_supervisor
user_int_128    move.b	#128,d0 
		bra     error_supervisor
user_int_129    move.b	#129,d0
		bra     error_supervisor
user_int_130    move.b	#130,d0
		bra     error_supervisor
user_int_131    move.b	#131,d0
		bra     error_supervisor
user_int_132    move.b	#132,d0
		bra     error_supervisor
user_int_133    move.b	#133,d0
		bra     error_supervisor
user_int_134    move.b	#134,d0
		bra     error_supervisor
user_int_135    move.b	#135,d0
		bra     error_supervisor
user_int_136    move.b	#136,d0
		bra     error_supervisor
user_int_137    move.b	#137,d0
		bra     error_supervisor
user_int_138    move.b	#138,d0
		bra     error_supervisor
user_int_139    move.b	#139,d0
		bra     error_supervisor
user_int_140    move.b	#140,d0
		bra     error_supervisor
user_int_141    move.b	#141,d0
		bra     error_supervisor
user_int_142    move.b	#142,d0
		bra     error_supervisor
user_int_143    move.b	#143,d0
		bra     error_supervisor
user_int_144    move.b	#144,d0
		bra     error_supervisor
user_int_145    move.b	#145,d0
		bra     error_supervisor
user_int_146    move.b	#146,d0
		bra     error_supervisor
user_int_147    move.b	#147,d0
		bra     error_supervisor
user_int_148    move.b	#148,d0
		bra     error_supervisor
user_int_149    move.b	#149,d0
		bra     error_supervisor
user_int_150    move.b	#150,d0
		bra     error_supervisor
user_int_151    move.b	#151,d0
		bra     error_supervisor
user_int_152    move.b	#152,d0
		bra     error_supervisor
user_int_153    move.b	#153,d0
		bra     error_supervisor
user_int_154    move.b	#154,d0
		bra     error_supervisor
user_int_155    move.b	#155,d0
		bra     error_supervisor
user_int_156    move.b	#156,d0
		bra     error_supervisor
user_int_157    move.b	#157,d0
		bra     error_supervisor
user_int_158    move.b	#158,d0
		bra     error_supervisor
user_int_159    move.b	#159,d0
		bra     error_supervisor
user_int_160    move.b	#160,d0
		bra     error_supervisor
user_int_161    move.b	#161,d0
		bra     error_supervisor
user_int_162    move.b	#162,d0
		bra     error_supervisor
user_int_163    move.b	#163,d0
		bra     error_supervisor
user_int_164    move.b	#164,d0
		bra     error_supervisor
user_int_165    move.b	#165,d0
		bra     error_supervisor
user_int_166    move.b	#166,d0
		bra     error_supervisor
user_int_167    move.b	#167,d0
		bra     error_supervisor
user_int_168    move.b	#168,d0
		bra     error_supervisor
user_int_169    move.b	#169,d0
		bra     error_supervisor
user_int_170    move.b	#170,d0
		bra     error_supervisor
user_int_171    move.b	#171,d0
		bra     error_supervisor
user_int_172    move.b	#172,d0
		bra     error_supervisor
user_int_173    move.b	#173,d0
		bra     error_supervisor
user_int_174    move.b	#174,d0
		bra     error_supervisor
user_int_175    move.b	#175,d0
		bra     error_supervisor
user_int_176    move.b	#176,d0
		bra     error_supervisor
user_int_177    move.b	#177,d0
		bra     error_supervisor
user_int_178    move.b	#178,d0
		bra     error_supervisor
user_int_179    move.b	#179,d0
		bra     error_supervisor
user_int_180    move.b	#180,d0
		bra     error_supervisor
user_int_181    move.b	#181,d0
		bra     error_supervisor
user_int_182    move.b	#182,d0
		bra     error_supervisor
user_int_183    move.b	#183,d0
		bra     error_supervisor
user_int_184    move.b	#184,d0
		bra     error_supervisor
user_int_185    move.b	#185,d0
		bra     error_supervisor
user_int_186    move.b	#186,d0
		bra     error_supervisor
user_int_187    move.b	#187,d0
		bra     error_supervisor
user_int_188    move.b	#188,d0
		bra     error_supervisor
user_int_189    move.b	#189,d0
		bra     error_supervisor
user_int_190    move.b	#190,d0
		bra     error_supervisor
user_int_191    move.b	#191,d0
		bra     error_supervisor
user_int_192    move.b	#192,d0
		bra     error_supervisor
user_int_193    move.b	#193,d0
		bra     error_supervisor
user_int_194    move.b	#194,d0
		bra     error_supervisor
user_int_195    move.b	#195,d0
		bra     error_supervisor
user_int_196    move.b	#196,d0
		bra     error_supervisor
user_int_197    move.b	#197,d0
		bra     error_supervisor
user_int_198    move.b	#198,d0
		bra     error_supervisor
user_int_199    move.b	#199,d0
		bra     error_supervisor
user_int_200    move.b	#200,d0
		bra     error_supervisor
user_int_201    move.b	#201,d0
		bra     error_supervisor
user_int_202    move.b	#202,d0
		bra     error_supervisor
user_int_203    move.b	#203,d0
		bra     error_supervisor
user_int_204    move.b	#204,d0
		bra     error_supervisor
user_int_205    move.b	#205,d0
		bra     error_supervisor
user_int_206    move.b	#206,d0
		bra     error_supervisor
user_int_207    move.b	#207,d0
		bra     error_supervisor
user_int_208    move.b	#208,d0
		bra     error_supervisor
user_int_209    move.b	#209,d0
		bra     error_supervisor
user_int_210    move.b	#210,d0
		bra     error_supervisor
user_int_211    move.b	#211,d0
		bra     error_supervisor
user_int_212    move.b	#212,d0
		bra     error_supervisor
user_int_213    move.b	#213,d0
		bra     error_supervisor
user_int_214    move.b	#214,d0
		bra     error_supervisor
user_int_215    move.b	#215,d0
		bra     error_supervisor
user_int_216    move.b	#216,d0
		bra     error_supervisor
user_int_217    move.b	#217,d0
		bra     error_supervisor
user_int_218    move.b	#218,d0
		bra     error_supervisor
user_int_219    move.b	#219,d0
		bra     error_supervisor
user_int_220    move.b	#220,d0
		bra     error_supervisor
user_int_221    move.b	#221,d0
		bra     error_supervisor
user_int_222    move.b	#222,d0
		bra     error_supervisor
user_int_223    move.b	#223,d0
		bra     error_supervisor
user_int_224    move.b	#224,d0
		bra     error_supervisor
user_int_225    move.b	#225,d0
		bra     error_supervisor
user_int_226    move.b	#226,d0
		bra     error_supervisor
user_int_227    move.b	#227,d0
		bra     error_supervisor
user_int_228    move.b	#228,d0
		bra     error_supervisor
user_int_229    move.b	#229,d0
		bra     error_supervisor
user_int_230    move.b	#230,d0
		bra     error_supervisor
user_int_231    move.b	#231,d0
		bra     error_supervisor
user_int_232    move.b	#232,d0
		bra     error_supervisor
user_int_233    move.b	#233,d0
		bra     error_supervisor
user_int_234    move.b	#234,d0
		bra     error_supervisor
user_int_235    move.b	#235,d0
		bra     error_supervisor
user_int_236    move.b	#236,d0
		bra     error_supervisor
user_int_237    move.b	#237,d0
		bra     error_supervisor
user_int_238    move.b	#238,d0
		bra     error_supervisor
user_int_239    move.b	#239,d0
		bra     error_supervisor
user_int_240    move.b	#240,d0
		bra     error_supervisor
user_int_241    move.b	#241,d0
		bra     error_supervisor
user_int_242    move.b	#242,d0
		bra     error_supervisor
user_int_243    move.b	#243,d0
		bra     error_supervisor
user_int_244    move.b	#244,d0
		bra     error_supervisor
user_int_245    move.b	#245,d0
		bra     error_supervisor
user_int_246    move.b	#246,d0
		bra     error_supervisor
user_int_247    move.b	#247,d0
		bra     error_supervisor
user_int_248    move.b	#248,d0
		bra     error_supervisor
user_int_249    move.b	#249,d0
		bra     error_supervisor
user_int_250    move.b	#250,d0
		bra     error_supervisor
user_int_251    move.b	#251,d0
		bra     error_supervisor
user_int_252    move.b	#252,d0
		bra     error_supervisor
user_int_253    move.b	#253,d0
		bra     error_supervisor
user_int_254    move.b	#254,d0
		bra     error_supervisor
user_int_255    move.b	#255,d0
		bra     error_supervisor

;-----------------------------------------------
;Zapamiëtuje zawartoôę rejestrów w zmiennych
;
pamietaj_rejestry:
		move.l	D0,b_D0
		move.l	D1,b_D1
		move.l	D2,b_D2
		move.l	D3,b_D3
		move.l	D4,b_D4
		move.l	D5,b_D5
		move.l	D6,b_D6
		move.l	D7,b_D7
		move.l	A0,b_A0
		move.l	A1,b_A1
		move.l	A2,b_A2
		move.l	A3,b_A3
		move.l	A4,b_A4
		move.l	A5,b_A5
		move.l	A6,b_A6
		rts

;-----------------------------------------------
;Zapamiëtuje ramkë stosu (str. 6-17 68000 Microprocessors User's Manual)
; Wskaúnik zmieniono o +4 poniewaű wykonano podprogram (stos -4)
;
pamietaj_group0:bsr	pamietaj_rejestry
		move.w	 0+4(A7),b_function_code		
		move.l	 2+4(A7),b_access_adress		
		move.w	 6+4(A7),b_instruction_register	
		move.w	 8+4(A7),b_status_register	
		move.l	10+4(A7),b_program_counter	
		rts
		
;-----------------------------------------------
;Zapamiëtuje ramkë stosu (str. 6-10 68000 Microprocessors User's Manual)
; Wskaúnik zmieniono o +4 poniewaű wykonano podprogram (stos -4)
;
pamietaj_group2:
pamietaj_group1:bsr	pamietaj_rejestry
		move.w	0+4(A7),b_status_register	
		move.l	2+4(A7),b_program_counter	
		rts

;-----------------------------------------------
;Wyôwietla liczniki, status, itp zapamiëtane w RAM
;
print_group2:
print_group1:	lea	txt_pc,A6		;napis
		bsr	text_lcd
		move.l	b_program_counter,D0	;Wyôwietlamy PC
		bsr	long_lcd
		lea	txt_sr,A6		;Napis
		bsr	text_lcd
		move.l	b_status_register,D0	;Wyôwietlamy Status register
		bsr	word_lcd

		lea	txt_Dx,A6		;napis
		bsr	text_lcd
		move.l	b_D0,D0			;wyô wartoôę rejestru
		bsr	long_lcd

		lea	txt_Ax,A6		;napis
		bsr	text_lcd
		move.l	b_A5,D0			;wyô wartoôę rejestru
		bsr	long_lcd
		bsr	spc_lcd			;spacja
		move.l	b_A6,D0			;wyô wartoôę rejestru
		bsr	long_lcd
		rts
				
;-----------------------------------------------
;Wyôwietla liczniki, status, itp zapamiëtane w RAM
;
print_group0:	lea	txt_pc,A6		;napis
		bsr	text_lcd
		move.l	b_program_counter,D0	;Wyôwietlamy PC
		bsr	long_lcd
		lea	txt_sr,A6		;Napis
		bsr	text_lcd
		move.l	b_status_register,D0	;Wyôwietlamy Status register
		bsr	word_lcd
		lea	txt_asccess,A6		;Napis
		bsr	text_lcd
		move.l	b_access_adress,D0	;Wyôwietlamy adres
		bsr	long_lcd
		lea	txt_fcode,A6		;Napis
		bsr	text_lcd
		move.b	b_function_code,D0	;wyôwietlamy function code
		bsr	hex_lcd
		rts
				
;===============================================
;Sygnalizacja bîëdu na LED'ach w trybie nadzorcy
;we: D0 - nr bîëdu
;
error_supervisor:
	   ;	eor.b	#$ff,d0			;Negujemy (ze wzglëdu na sposób wîâczenia diod)
		moveq	#10,d2			;D2 - liczba powtórzeď FLASHA
error_loop:	move.b	d0,LED			;Zaôwiecenie LEDw
		move.l	#FLASH_ERR_TIME,d1	;D1 - Pëtla opóúniajâca
error_delay:	divs	#1,d0			;NOP
		dbf	d1,error_delay
		move.b	#$00,LED      		;Zgaszenie LED'ów
		move.l	#FLASH_ERR_TIME,d1	;D1 - Pëtla opóúniajâca
error_delay2:	divs	#1,d0			;NOP
		dbf	d1,error_delay2
		dbf	d2,error_loop		;Dodaę liczenie obiegów
	;???	reset			;Choę tryb nadzorcy to wywoîuje
					; bîâd nieistniejâca instrukcja (wektor 4)
		jmp	start

;-----------------------------------------------
;Wykorzystane do przejôcia w tryb nadzorcy i wykonania podprogramu uűytkownika
; zawierajâcego rozkazy dla trybu nadzorcy
;we: A6 - adres procedury zakoďczonej rozkazem RTS
;
supervisor:	trap	#15			;Wywoîuje stan wyjâtkowy i skok do "trap_15"
		rts				; wracamy z podprogramu

trap_15:	jsr	(a6)			;Skaczemy do podprogramu
		rte 				; wracamy z przerwania

;===============================================
;Biegajâcy punkt sygnalizujâcy poprawnâ pracë CPU i ROM
; Jesteômy w trybie nadzorcy
start:	  	move.b	#%00000001,d0		;D0 - przesówany wzór
		moveq	#3*8-1,d2		;D2 - liczba powtorzeď skrola
flash_loop:     move.b	d0,LED
		rol.b	#1,d0
		move.l	#ROL_ERR_TIME,d1	;D1 - licznik opóúnienia
flash_delay:	divs	#1,d0			;NOP
		dbf	d1,flash_delay
		dbf	d2,flash_loop
		move.b	#%00000001,D7		;D7 - wyniki testów (LED1 - CPU OK)
		move.b	D7,LED
		move.l	#TEST_WAIT_TIME,d1	;D1 - Pëtla opóúniajâca
test0_delay:	divs	#1,d0			;NOP
		dbf	d1,test0_delay
		

;Sprawdzenie sumy kontrolnej ROM
		bset	#1,D7			;LED2 - CHECKSUM ROM OK
		move.b	D7,LED
		move.l	#TEST_WAIT_TIME,d1	;D1 - Pëtla opóúniajâca
test1_delay:	divs	#1,d0			;NOP
		dbf	d1,test1_delay


;Sprawdzenie RAM parzystego
		lea	data_user,A0		;Adres RAM do A0
		move.b	#$aa,(A0)		; zapis i odczyt RAM parzytego
		cmpi.b	#$aa,(A0)
		bne	test2_fail
		move.b	#$55,(A0)
		cmpi.b	#$55,(A0)
		bne	test2_fail
		bset	#2,D7			;LED3 - RAM OK
		move.b	D7,LED
		move.l	#TEST_WAIT_TIME,d1	;D1 - Pëtla opóúniajâca
test2_delay:	divs	#1,d0			;NOP
		dbf	d1,test2_delay
test2_fail:	


;Sprawdzenie RAM nieparzystego
		lea	data_user+1,A0		;Adres RAM do A0	
		move.b	#$aa,(A0)		; zapis i odczyt RAM nieparzytego
		cmpi.b	#$aa,(A0)
		bne	test3_fail
		move.b	#$55,(A0)
		cmpi.b	#$55,(A0)
		bne	test3_fail
		bset	#3,d7			;LED4 - RAM OK
		move.b	D7,LED
		move.l	#TEST_WAIT_TIME,d1	;D1 - Pëtla opóúniajâca
test3_delay:	divs	#1,d0			;NOP
		dbf	d1,test3_delay
test3_fail:	


;Sprawdzenie RAM parzystego i nieparzystego
		lea	data_user,A0		;Adres RAM do A0
		move.l	#$aaaaffff,(A0)		; zapis i odczyt RAM nieparzytego
		cmpi.l	#$aaaaffff,(A0)
		bne	test4_fail
		move.l	#$55550000,(A0)
		cmpi.l	#$55550000,(A0)
		bne	test4_fail
		bset	#4,d7			;LED5 - RAM OK
		move.b	D7,LED
		move.l	#TEST_WAIT_TIME,d1	;D1 - Pëtla opóúniajâca
test4_delay:	divs	#1,d0			;NOP
		dbf	d1,test4_delay
test4_fail:	

;Sprawdzenie wyôwietlacza LCD
		bsr	init_lcd		;Inicjalizacja (jeôli jest)
		move.b	#0,D0			;Ustaw kursor
		bsr	kursor_lcd
		bsr	wait_busy_lcd		;Odczytanie znaku z LCD
		cmpi.b	#" ",LCD_D		;jeôli spacja to OK
		bne	test5_fail
		bset	#5,d7			;LED6 - LCD OK
		move.b	D7,LED
		move.l	#TEST_WAIT_TIME,d1	;D1 - Pëtla opóúniajâca
test5_delay:	divs	#1,d0			;NOP
		dbf	d1,test5_delay
test5_fail:	


		bset	#6,d7			;LED7 - 
		move.b	D7,LED
		move.l	#TEST_WAIT_TIME,d1	;D1 - Pëtla opóúniajâca
test6_delay:	divs	#1,d0			;NOP
		dbf	d1,test6_delay


		bset	#7,d7			;LED8 - 
		move.b	D7,LED
		move.l	#TEST_WAIT_TIME,d1	;D1 - Pëtla opóúniajâca
test7_delay:	divs	#1,d0			;NOP
		dbf	d1,test7_delay

;Koniec testów
		move.l	#TEST_WAIT_TIME,d1	;D1 - Pëtla opóúniajâca
test8_delay:	divs	#1,d0			;NOP
		divs	#1,d0
		divs	#1,d0
		dbf	d1,test8_delay
		move.b	#$00,LED		;Wyîâczenie wszystkich LED

;================ Tryb uűytkownika =============
		;	       iii
		;         T.S..210...XNZVC
	;	move.w  #%0000000000000000,SR	;Tryb uűytkownika, wîâczone wszystkie przerwania
	;	lea	stos_user_str,a7	;Ustawienie stosu urzytkownika
	;	bsr	init_lcd		;inicjalizacja LCD

	;	lea	tekst,A6		;Wyôwietlenie tekstu
	;	bsr	text_lcd

loopL:
	move.b	LCD_D,D0
	move.b	D0,LED
	jmp	loopL


;-----------------------------------------------
migaj:	   ;	eor.b	#$ff,d0			;Negujemy (ze wzglëdu na sposób wîâczenia diod)
		moveq	#10,d2			;D2 - liczba powtórzeď FLASHA
migaj_loop:	move.b	d0,LED			;Zaôwiecenie LEDw
		move.l	#FLASH_ERR_TIME,d1	;D1 - Pëtla opóúniajâca
migaj_delay:	divs	#1,d0			;NOP
		dbf	d1,migaj_delay
		move.b	#$00,LED      		;Zgaszenie LED'ów
		move.l	#FLASH_ERR_TIME,d1	;D1 - Pëtla opóúniajâca
migaj_delay2:	divs	#1,d0			;NOP
		dbf	d1,migaj_delay2
		dbf	d2,migaj_loop		;Dodaę liczenie obiegów


	;	dc.w	$ffff			;Dziaîa - emulator linii F
	;	dc.w	$afff			;Dziaîa - emulator linii A

	;	divs	#0,D0			;Dziaîa - daje stan wyjâtkowy

	;	move.w	D0,SR			;Dziaîa - naruszenie uprzywilejowania

	;	trap	#5			;Dziaîa - póîîapka
		
	;	move.b	$d00000,d0		;Dziaîa - BusError (nieistniejâcy obszar)
	;	move.b  #0,$000004		;Dizaîa - BusError (próba zapisu ROM)
	;	move.b	$810000,d0		;Dziaîa - BusError (przekroczenie ram)
	;	jmp	$12345678		;Dziaîa - BusError (przekroczenie rom)

		lea	przywilej,a6		;Wykonanie fragmentu uprzywilejowanego
		jsr	supervisor



		lea	migaj_end,a6		;Adres programu
		jsr	supervisor		;Od tego momentu wykonujemy tryb nadzorcy
migaj_end:	move.w	SR,D0
		move.w	D0,SR
		jmp	start



przywilej:	move.w	SR,D0
		move.w	D0,SR
		move.b	#$f0,LED
		rts

skok:		jsr	skok2
		rts

skok2:		nop
		rts
		
;-----------------------------------------------
;Inicjalizuje wyôwietlacz LCD
;
;??? jak zadziala zastâpię ,LCD_R przez ROZKAZ(A6) - w A6 adres bazy LCD
;
init_lcd:	move.w	#150,d1			;Wait 15ms
		bsr	delay_100us
		lea	LCD_R,A6
		move.b	#%00110000,(A6)		;Functiom Set
		move.w	#50,d1			;Wait 5ms
		bsr	delay_100us
		move.b	#%00110000,(A6)		;Functiom Set
		move.w	#2,d1			;Wait 200us
		bsr	delay_100us
		move.b	#%00110000,(A6)		;Functiom Set
	
		move.b	#%00111000,d0		;szyna 8-bit, 2 linie, znaki 5*7
		bsr	rozkaz_lcd
		move.b	#%00001000,d0		;Display OFF
		bsr	rozkaz_lcd
		move.b	#%00000001,d0		;Clear displey
		bsr	rozkaz_lcd
		move.b	#%00000110,d0		;Entry mode set
		bsr	rozkaz_lcd
		move.b	#%00001111,d0		;Display ON
		bsr	rozkaz_lcd

		;move.b	#%01000000,d0		;Poczâtek generatora znaków
		;bsr	rozkaz_lcd
		;move.l	#63,D6			;D6 - liczba bajtów do skopiowania
		;lea	polskie_znaki,A6	;A6 - adres znakow w ROM
init_lcd_l1:	;bsr	wait_busy_lcd
		;move.b	(A6)+,LCD_D		;Niemoűe byę "print_lcd" ponieaű filtruje znaki
		;dbf	D6,init_lcd_l1
		;move.b	#%00000001,d0		;Clear displey
		;bsr	rozkaz_lcd
		bsr	clear_tab_lcd		;Czyôę tablicë znaków dynamicznych
		rts

;-----------------------------------------------
;Czyôci tablicë TAB_CHAR_ASCII
;
clear_tab_lcd:	movem.l	D0/A6,-(A7)		;rejestry na stos
		move.l	#7,D0			;Liczba znaków w TAB_CHAR_LCD
		lea	tab_char_lcd,A6		;adres tablicy do A5
init_lcd_l2:	move.b	#0,(A6)+		;Zerowanie tablicy TAB_CHAR_LCD
		dbf	D0,init_lcd_l2
		movem.l	(A7)+,D0/A6		;rejestry ze stosu
		rts
		
;-----------------------------------------------
;Wysyîa znak z rejestru D0 do pamiëci danych LCD
; przeprowadza konwersjë polskich znaków i akceptuje kody sterujâce
; typu: czyszczenie wyôwietlacza, kursor w poîoűenie spoczynkowe, itp
;we: D0.b - znak do wysîania
;wy: --
;zm: --
;
print_lcd:	cmpi.b	#CLS,D0			;Czy kod sterujâcy ?
		beq	cls_lcd

;		movem.l	D0/A6,-(a7)		;rejestry na stos
;		lea	tab_konw_pl,a6
;print_lcd_l2:	cmp.b	(A6)+,D0		;czy znak do skonwertowania ?
;		beq	print_lcd_l1		; - tak wiëc kowertuj
;		cmpa.l	#tab_konw_pl+9,A6	;czy koniec tablicy konwersji
;		bne	print_lcd_l2		; - nie wiëc pëtla
;		bra	print_lcd_l3		; - tak wiëc skok do drukowania znaku
;print_lcd_l1:	move.b	8(A6),D0		;pobranie skonwerowanego znaku
;print_lcd_l3:	bsr	wait_busy_lcd
;		move.b	D0,LCD_D
;		movem.l	(a7)+,D0/A6		;rejestry ze stosu
;		rts
;
;tab_konw_pl:	DC.B	"â","ę","ë","î","ď","ó","ô","ű","ú"
;		DC.B	 08, 01, 02, 03, 04, 05, 06, 07, 07 

		movem.l	D0-D3/A5-A6,-(a7)	;rejestry na stos
	;------- Czy znak konwertowaę (nie ma w ROM LCD) ---
		lea	tab_specjalne_lcd,a6	;adres tablicy znaków do konwertowania
print_lcd_l2:	cmp.b	(A6),D0			;czy znak do skonwertowania ?
		beq	print_lcd_l1		; - tak wiëc kowertuj
		adda.l	#1,A6			; - nie wiëc next kod
		cmpa.l	#tab_alternatywne_lcd,A6	;czy koniec tablicy konwersji
		bne	print_lcd_l2		; - nie wiëc pëtla
		bra	print_lcd_l3		; - tak wiëc skok do drukowania znaku bez zmian

	;------- Czy znak jest juű w TAB_CHAR_LCD czyli takűe w pamiëci LCD ---
print_lcd_l1:	move.l	#7,D1			;Liczba znaków w TAB_CHAR_LCD
		lea	tab_char_lcd,A5		;adres TAB_CHAR_LCD do A5
print_lcd_l5:	cmp.b	(A5),D0			;czy znak jest juű w TAB_CHAR_LCD
		beq	print_lcd_l4		; - tak wiëc drukuj zgodnie ze znalezionym kodem
		adda.l	#1,A5			; - nie wiëc next kod
		dbf	D1,print_lcd_l5		;jeôli nie koniec tablicy to skok

	;------- Czy sâ wolne miejsca w TAB_CHAR_LCD ---
		move.l	#7,D1			;Liczba znaków w TAB_CHAR_LCD
		lea	tab_char_lcd,A5		;adres TAB_CHAR_LCD do A5
print_lcd_l7:	cmpi.b	#0,(A5)			;Czy jest wolny kod w TAB_CHAR_LCD
		beq	print_lcd_l6		; - tak wiëc wyôlij wzór
		adda.l	#1,A5			; - nie wiëc next kod
		dbf	D1,print_lcd_l7		;jeôli nie koniec tablicy to skok

	;------- Nie da sië przesîaę wzoru znaku wiëc podstaw alternatywny ---
		adda.l	#tab_alternatywne_lcd-tab_specjalne_lcd,A6
		move.b	(A6),D0
		bra	print_lcd_l3
	
	;------- Wpisz kod znaku do TAB_CHAR_LCD i wyôlij wzór znaku do RAM LCD ---
	;D0 - kod znaku 
	;A6 - adres znaku w tab_specjalne_lcd
	;A5 - adres kodu znaku w TAB_CHAR_LCD
print_lcd_l6:	move.b	D0,(A5)			;Kod znaku do TAB_CHAR_LCD
		suba.l	#tab_specjalne_lcd,A6	;Obliczenie nr wzoru znaku
		move.l	A6,D1			;nr wzoru do D1
		rol	#3,D1			;i monoűymy przez 8 (liczba bajtów znaku)
		lea	polskie_znaki,A6	;A6 - adres wzorów znaków 
		adda.l	D1,A6			;dodajemy do obliczonego ofsetu

		bsr	wait_busy_lcd		;Odczyt pozycji kursora
		move.b	LCD_R,D2		; i zapamiëtanie w D2
		move.l	A5,D0			;Obliczenie nr znaku w RAM LCD
		sub.l	#tab_char_lcd,D0
		rol	#3,D0			;monoűymy przez 8 (liczba bajtów znaku)
		or.b	#%01000000,d0		;Adres generatora znaków w LCD
		bsr	rozkaz_lcd
		move.l	#7,D6			;D6 - liczba bajtów do skopiowania
print_lcd_l8:	bsr	wait_busy_lcd		;kopiowanie wzoru znaku do RAM LCD
		move.b	(A6)+,LCD_D		;Nie moűe byę "print_lcd" ponieaű filtruje znaki
		dbf	D6,print_lcd_l8
		move.b	D2,D0			;Odtworzenie pozycji kursora
		bsr	kursor_lcd		; i ustawienie go
		
	;------- Wysîanie znaku o kodzie w A5 (z tablicy TAB_CHAR_LCD) ---
print_lcd_l4:	suba.l	#tab_char_lcd,A5	;Obliczenie nr znaku w RAM LCD
		move.l	A5,D0			;wynik do D0

	;------- Drukowanie kodu z D0 na LCD ---
print_lcd_l3:	bsr	wait_busy_lcd		;Drukowanie na LCD kodu z D0
		move.b	D0,LCD_D
		movem.l	(a7)+,D0-D3/A5-A6	;rejestry ze stosu
		rts

tab_specjalne_lcd:
		DC.B	"â","ę","ë","î","ď","ó","ô","ű","ú"
		DC.B	"Â","Ę","Ë","Î","Ď","Ó","Ô","Ű","Ú"
		DC.B	POZIOM1,POZIOM2,POZIOM3,POZIOM4
		DC.B	STRZALKA_L,STRZALKA_P,PLAY
tab_alternatywne_lcd:
		DC.B	"a","c","e","l","n","o","s","z","z"
		DC.B	"A","C","E","L","N","O","S","Z","Z"
		DC.B	$20,$20,$ff,$ff
		DC.B	"<",">",">"      

	;------- Kolejnoôę kodów musi byę taka sama jak w tablicy "tab_specjalne_lcd"
polskie_znaki:
         	DC.B    %00000			; â
		DC.B    %00000
		DC.B    %01110
		DC.B    %00001
		DC.B    %01111
		DC.B    %10001
		DC.B    %01111
		DC.B    %00010

		DC.B    %00010			; ę
		DC.B    %00100
		DC.B    %01110
		DC.B    %10000
		DC.B    %10000
		DC.B    %10001
		DC.B    %01110
		DC.B    %00000

		DC.B    %00000			; ë
		DC.B    %00000
		DC.B    %01110
		DC.B    %10001
		DC.B    %11111
		DC.B    %10000
		DC.B    %01110
		DC.B    %00010

		DC.B    %11000			; î
		DC.B    %01000
		DC.B    %01100
		DC.B    %01000
		DC.B    %11000
		DC.B    %01000
		DC.B    %11100
		DC.B    %00000

		DC.B    %00010			; ď
		DC.B    %00100
		DC.B    %10110
		DC.B    %11001
		DC.B    %10001
		DC.B    %10001
		DC.B    %10001
		DC.B    %00000

		DC.B    %00010			; ó
		DC.B    %00100
		DC.B    %01110
		DC.B    %10001
		DC.B    %10001
		DC.B    %10001
		DC.B    %01110
		DC.B    %00000

		DC.B    %00010			; ô
		DC.B    %00100
		DC.B    %01110
		DC.B    %10000
		DC.B    %01110
		DC.B    %00001
		DC.B    %11110
		DC.B    %00000

		DC.B    %00000			; ű
		DC.B    %00000
		DC.B    %11111
		DC.B    %00010
		DC.B    %01110
		DC.B    %01000
		DC.B    %11111
		DC.B    %00000
			
		DC.B    %00110			; ú
		DC.B    %00000
		DC.B    %11111
		DC.B    %00010
		DC.B    %00100
		DC.B    %01000
		DC.B    %11111
		DC.B    %00000
		
         	DC.B    %01110			; Â
		DC.B    %10001
		DC.B    %10001
		DC.B    %10001
		DC.B    %11111
		DC.B    %10001
		DC.B    %10001
		DC.B    %00010

		DC.B    %00010			; Ę
		DC.B    %01111
		DC.B    %10101
		DC.B    %10000
		DC.B    %10000
		DC.B    %10001
		DC.B    %01110
		DC.B    %00000

		DC.B    %11111			; Ë
		DC.B    %10000
		DC.B    %10000
		DC.B    %11110
		DC.B    %10000
		DC.B    %10000
		DC.B    %11111
		DC.B    %00010

		DC.B    %10000			; Î
		DC.B    %10000
		DC.B    %10100
		DC.B    %11000
		DC.B    %10000
		DC.B    %10000
		DC.B    %11111
		DC.B    %00000

		DC.B    %10101			; Ď
		DC.B    %10001
		DC.B    %11001
		DC.B    %10101
		DC.B    %10011
		DC.B    %10001
		DC.B    %10001
		DC.B    %00000

		DC.B    %00010			; Ó
		DC.B    %01110
		DC.B    %10101
		DC.B    %10001
		DC.B    %10001
		DC.B    %10001
		DC.B    %01110
		DC.B    %00000

		DC.B    %00010			; Ô
		DC.B    %01110
		DC.B    %10101
		DC.B    %10000
		DC.B    %01110
		DC.B    %00001
		DC.B    %11110
		DC.B    %00000

		DC.B    %11111			; Ű
		DC.B    %00001
		DC.B    %00001
		DC.B    %00010
		DC.B    %01110
		DC.B    %01000
		DC.B    %11111
		DC.B    %00000
			
		DC.B    %00100			; Ú
		DC.B    %11111
		DC.B    %01001
		DC.B    %00010
		DC.B    %00100
		DC.B    %01000
		DC.B    %11111
		DC.B    %00000
		
		DC.B    %10000			; Poziom1
		DC.B    %10000
		DC.B    %10000
		DC.B    %10000
		DC.B    %10000
		DC.B    %10000
		DC.B    %10000
		DC.B    %10000
		
		DC.B    %11000			; Poziom2
		DC.B    %11000
		DC.B    %11000
		DC.B    %11000
		DC.B    %11000
		DC.B    %11000
		DC.B    %11000
		DC.B    %11000
		
		DC.B    %11100			; Poziom3
		DC.B    %11100
		DC.B    %11100
		DC.B    %11100
		DC.B    %11100
		DC.B    %11100
		DC.B    %11100
		DC.B    %11100
		
		DC.B    %11110			; Poziom4
		DC.B    %11110
		DC.B    %11110
		DC.B    %11110
		DC.B    %11110
		DC.B    %11110
		DC.B    %11110
		DC.B    %11110

		DC.B    %00010			; Sprzaîka Lewo
		DC.B    %00100
		DC.B    %01100
		DC.B    %11111
		DC.B    %01100
		DC.B    %00100
		DC.B    %00010
		DC.B    %00000

		DC.B    %01000			; Sprzaîka Prawo 
		DC.B    %00100
		DC.B    %00110
		DC.B    %11111
		DC.B    %00110
		DC.B    %00100
		DC.B    %01000
		DC.B    %00000

		DC.B    %01000			; Play 
		DC.B    %01100
		DC.B    %01110
		DC.B    %01111
		DC.B    %01110
		DC.B    %01100
		DC.B    %01000
		DC.B    %00000

		
;-----------------------------------------------
;Wysyîa dîugiesîowo jako osiem znaków HexASCII na LCD
;we: D0.l - sîowo do wyôwietlenia
;wy: --
;zm: --
; 
long_lcd:	movem.l	D0,-(A7)		;rejestry na stos
		movem.l	D0,-(A7)		;zapamiëtanie D0
		lsr.l	#8,D0			;wybranie starszego sîowa
		lsr.l	#8,D0			
		bsr	word_lcd		;na LCD
		movem.l	(A7)+,D0		;odtworzenie D0
		bsr	word_lcd		;Mîodsze sîowo na LCD
		movem.l	(A7)+,D0		;rejestry ze stosu
		rts

;-----------------------------------------------
;Wysyîa sîowo jako cztery znaki HexASCII na LCD
;we: D0.w - sîowo do wyôwietlenia
;wy: --
;zm: --
; 
word_lcd:	movem.l	D0,-(A7)		;rejestry na stos
		movem.w	D0,-(A7)		;zapamiëtanie D0
		lsr.w	#8,D0			;wybranie starszego bajtu
		bsr	hex_lcd			;na LCD
		movem.w	(A7)+,D0		;odtworzenie D0
		bsr	hex_lcd			;Mîodszy bajt na LCD
		movem.l	(A7)+,D0		;rejestry ze stosu
		rts

;-----------------------------------------------
;Wysyîa bajt jako dwa znaki w HexASCII na LCD
;we: D0.b - bajt do wyôwietlenia
;wy: --
;zm: --
; 
hex_lcd:	movem.l	D0,-(A7)		;rejestry na stos
		movem.w	D0,-(A7)		;zapamiëtanie D0
		lsr.b	#4,D0			;wybranie starszego nibla
		bsr	nible_lcd		;na LCD
		movem.w	(A7)+,D0		;odtworzenie D0
		bsr	nible_lcd		;mîodzy nible na LCD
		movem.l	(A7)+,D0		;rejestry ze stosu
		rts
;-----------------------------------------------
;Wysyîa nible w HexASCII na LCD
;we: D0.b - bajt do wyôwietlenia
;wy: --
;zm: --
; 
nible_lcd:	movem.l	D0/A6,-(A7)		;rejestry na stos
		lea	tab_hex,A6		;adres tablicy konwersji
		andi.w	#$0F,D0			;tylko mîodszy póîbajt
		move.b	0(A6,D0.w),D0		;pobranie z tabliwy
		bsr	print_lcd		;na LCD
		movem.l	(A7)+,D0/A6		;rejestry ze stosu
		rts

tab_hex:	DC.B	'0123456789ABCDEF'

;-----------------------------------------------
;Wysyîa tekst wskazywany przez A6 do pamiëci danych LCD
;we: A6.l - adres tekstu
;wy: --
;zm: A6
;
text_lcd:	movem.l	D0,-(a7)		;rejestry na stoso
text_lcd_l1:	move.b	(A6)+,D0		;Dana do D0
		beq	text_lcd_quit		;jeôli #0 to koniec
		bsr	print_lcd		;wyôlij znak na LCD
		bra	text_lcd_l1		;pëtla
text_lcd_quit:	movem.l	(a7)+,D0		;rejestry ze stosu
		rts

;-----------------------------------------------
;Drukuje spacjë na LCD
;we: --
;wy: --
;zm: --
;
spc_lcd:	movem.l	D0,-(A7)		;Rejestry na stos
		move.b	#" ",D0			;Kod SPACJI
		bsr	print_lcd		;Wyslanie do LCD
		movem.l	(A7)+,D0		;rejestry ze stosu
		rts	

;-----------------------------------------------
;Czyôci wyôwietlacz LCD
;we: --
;wy: --
;zm: --
;
cls_lcd:	movem.l	D0,-(A7)		;Rejestry na stos
		move.b	#%00000001,D0		;rozkaz dla LCD
		bsr	rozkaz_lcd		;wykonanie rozkazu
		bsr	clear_tab_lcd		;Czyôę tablicë znaków dynamicznych
		movem.l	(A7)+,D0		;rejestry ze stosu
		rts	

;-----------------------------------------------
;Wysyîa znak z rejestru D0 jako rozkaz do LCD
;we: D0.b - rozkaz do wysîania
;wy: --
;zm: --
;
rozkaz_lcd:	bsr	wait_busy_lcd		;Czeka aű LCD wolny
		move.b	D0,LCD_R
		rts

;-----------------------------------------------
;Ustawia kursor na pozycji wskazanej przez D0
;we: D0.b - pozycja znaku na LCD
;wy: --
;zm: D0
;
kursor_lcd:	or.b	#%10000000,d0
		bra	rozkaz_lcd

;-----------------------------------------------
;Czeka na zakoďczenie operacji przez strownik LCD
;we: --
;wy: --
;zm: --
;
wait_busy_lcd:	movem.l	D0,-(A7)		;rejestry na stos
		move.l	#CAL100us*100,D0	;licznik max czasu czekania (10ms)
						; czas prawdziwy dla 6MHz
wait_busy_lcd1:	dbf	D0,wait_busy_lcd2	; - jeôli koniec czasu to wyjdú
		bra	wait_busy_lcd3
wait_busy_lcd2:	btst.b	#7,LCD_R		;czy LCD wolny?
		bne	wait_busy_lcd1		; - nie toczekaj dalej
wait_busy_lcd3:	movem.l	(a7)+,D0		;rejestry ze stosu
		rts
			
;-----------------------------------------------
;Czeka czas zawarty w D1 razy 100µs (100µs...6,5s)
;we: D1.w - czas oczekiwania w us
;wy: --
;zm: D1
;				
delay_100us:	andi	#$ffff,d1
delay_100us_l1:	movem.l	d1,-(a7)		;rejestry na stos	
		move.l	#CAL100us,d1		;D1 - Pëtla opóúniajâca 100us
delay_100us_l2:	nop				;     czas prawdziwy dla 6MHz
		dbf	d1,delay_100us_l2
		movem.l	(a7)+,d1		;rejestry ze stosu
		dbf	d1,delay_100us_l1
		rts

;-----------------------------------------------
txt_pc:		DC.B	' PC=',0

txt_sr:		DC.B	' SR=',0

txt_asccess:	DC.B	' AC=',0

txt_fcode:	DC.B	' FC=',0

txt_Ax		DC.B	' Ax=',0

txt_Dx		DC.B	' Dx=',0

txt_bus_err:	DC.B	CLS,'Bus',0

txt_adress_err:	DC.B	CLS,'Adres',0

txt_command_err:DC.B	CLS,'Command',0

txt_division_err:
		DC.B	CLS,'Division0',0

txt_chk_err:	DC.B	CLS,'Chk',0

txt_trapv_err:	DC.B	CLS,'TrapV',0

txt_prioryty_err:
		DC.B	CLS,'Prioryty',0
		
txt_trap_err:	DC.B	CLS,'Trap',0

txt_emu1010_err:DC.B	CLS,'Emu1010',0

txt_emu1111_err:DC.B	CLS,'Emu1111',0

txt_init_int_err:
		DC.B	CLS,'InitInt',0

txt_false_int_err:
		DC.B	CLS,'FalseInt',0

txt_int1_err:	DC.B	CLS,'Int1',0

txt_int2_err:	DC.B	CLS,'Int2',0

txt_int3_err:	DC.B	CLS,'Int3',0

txt_int4_err:	DC.B	CLS,'Int4',0

txt_int5_err:	DC.B	CLS,'Int5',0

txt_int6_err:	DC.B	CLS,'Int6',0

txt_int7_err:	DC.B	CLS,'Int7',0

txt_trap0_err:	DC.B	CLS,'Trap0',0

txt_trap1_err:	DC.B	CLS,'Trap1',0

txt_trap2_err:	DC.B	CLS,'Trap2',0

txt_trap3_err:	DC.B	CLS,'Trap3',0

txt_trap4_err:	DC.B	CLS,'Trap4',0

txt_trap5_err:	DC.B	CLS,'Trap5',0

txt_trap6_err:	DC.B	CLS,'Trap6',0

txt_trap7_err:	DC.B	CLS,'Trap7',0

txt_trap8_err:	DC.B	CLS,'Trap8',0

txt_trap9_err:	DC.B	CLS,'Trap9',0

txt_trap10_err:	DC.B	CLS,'Trap10',0

txt_trap11_err:	DC.B	CLS,'Trap11',0

txt_trap12_err:	DC.B	CLS,'Trap12',0

txt_trap13_err:	DC.B	CLS,'Trap13',0

txt_trap14_err:	DC.B	CLS,'Trap14',0

txt_trap15_err:	DC.B	CLS,'Trap15',0

;-----------------------------------------------

tekst:		DC.B	CLS,'Ala ma kota, a kot ma chëę na ALË ',STRZALKA_L,STRZALKA_P,PLAY,0

;-----------------------------------------------

bo jakieś 20 lat minęło.

Edytowano przez InspektorGadzet
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...