PROGRAM1.ASM) najprej nastavi začetni naslov po resetu ter začetni naslov sklada (uporabljamo ga šele po
testu pomnilnika), inicializira vmesniški adapter PIA MC6821, tako da so PA0 - PA7 vhodne linije (na PA0 in PA1 sta
priključceni stikali S1 in S2) ter PB0 - PB7 izhodne linije (na njih so LED-diode).
Delovanje je navadno, prekinitve maskirane.
Sledi seveda nastavitev na periferni vmesnik.
Drugi del programa je test pomnilnika.
Na vse naslove v pomnilniku zapiše (in preveri zapisano) vrednost $FF ter jo nato spet pobriše.
Če pride pri tem do napake (razlike med pisano in brano vrednostjo), jo program sporoči z utripajočim signalom na lučkah, ki ga tvorita prva in osma LED-dioda.
Med utripom je uporabljena seveda zakasnitev (približno 350 ms) za razločen izgled.
Ob napaki se tukaj program zaključi v neskončni zanki.
Če je pomnilnik uspešno prestal test, sledi tretji del programa, to je test vmesnika PIA. V tem delu program že uporablja klice podprogramov (z uporabo sklada v pomnilniku), da je zato lahko krajši kot sicer. Prikaz štirih različnih vzorcev lučk se izpelje na podlagi trenutnega stanja stikal S1 in S2. Ob premiku stikala se spremeni tudi vzorec lučk. Trije vzorci uporabljajo logične ukaze za premik oziroma zamenjavo bitov, en vzorec pa je narejen z uporabo takojšnjega naslavljanja. Ves čas se uporabljata podprograma za preverjanje stanja na stikalih ter zakasnitvena zanka. Tretji del programa teče v neskončni zanki.
(PROGRAM2.ASM) zapišemo v dva EPROM-a, za vsak računalnik svojega.
Povežemo ju kot je prikazano na shemi:
Uporabimo štiri linije (PA4 - PA7) za prenos podatkov ter dve kontrolni (CA1 - CA2) za sporazumevanje med obema sistemoma.
Sistema nastavimo enega v oddajnik (master, stikali 11) in drugega v sprejemnik (slave, stikali 00).
Program sam med tekom preverja stanje stikal, tako da ve, ali je v oddajnem ali sprejemnem načinu.
STEVEC in PRENOS ter nastavitev začetnega naslova sklada.
Sledi skupni del inicializacije perifernega vmesniškega adapterja: PA0 - PA7 so vhodi, PB0 - PB7 so izhodi (na njih so LED-diode), maskiranje prekinitev, izbira zadnje fronte za aktivni prehod CA1.
V ločenem delu inicializacije pustimo samo še PA0 in PA1 vhoda (za stikali S1 in S2), ostale PA2 - PA7 pa na izhode (PA4 - PA7 je povezava s sprejemnikom).
Določimo navadno delovanje.
V glavnem delu programa oddajnik prikaže na lučkah vzorec osmih bitov, ki jih želi poslati sprejemniku, shrani vzorec v pomnilniku ter pošlje zgornjo polovico bitov. Pri tem še omogoči prekinitve na vratih A (PIA) in na procesorju (CPE), in pošlje zadnjo fronto na CA2. Potem skoči v čakalno zanko in čaka na prekinitev s sprejemnika.
Ko pride do prekinitve, se začne prekinitveni servisni program. Oddajnik prebere shranjeni vzorec in ga premakne v levo, da ima dostop do spodnje polovice bitov. Potem pošlje še spodnjo polovico bitov in aktivira zadnjo fronto na CA2. Prekinitev ne omogoči več, saj je zaključil z delom.
STEVEC na nič in omogočimo prekinitve še na procesorju.
Sprejemnik skoči potem v čakalno zanko in čaka na prekinitev z oddajnika.
Ko pride prvič do prekinitve, sprejemnik najprej odčita prispele štiri bite in ugotovi (preko spremenljivke STEVEC, da je to prva polovica bitov.
Shrani jo v spremenljivki PRENOS in poveča števec STEVEC za ena.
Po prekinitvi se vrne v čakalno zanko.
Ob branju prispelih bitov se zaradi usklajevalnega načina delovanja avtomatično pošlje signal po CA2, kar sproži na oddajniku prekinitev.
Ko pride drugič do prekinitve, sprejemnik zopet odčita prispele štiri bite in ugotovi (v spremenljivki STEVEC), da je to že druga polovica bitov.
Zamakne jo v desno in doda še prvo polovico iz spremenljivke
PRENOS.
Celotni prispeli vzorec sedaj prikaže na lučkah.
Pravilnost prenosa lahko preverimo s primerjavo vzorcev lučk na obeh računalnikih.
AVOCET SYSTEMS 6801/6301 ASSEMBLER - VERSION 2.20M SERIAL #00413
SOURCE FILE NAME: PROGRAM1.ASM
*
**********************************************************
* *
* Prvi testni program *
* *
* Program za vaje pri predmetu *
* Arhitektura racunalniskih sistemov II *
* *
* Mikroprocesorski sistem: *
* *
* * MC6802 CPU+RAM 0000-007F *
* * 2764 EPROM C000-DFFF *
* * MC6821 PIA 8000-8003 *
* *
* Avtor : Vladimir Bensa *
* Datum : 28.3.1995. *
* Opis programa : Program najprej inicializira vmesnik *
* PIA, potem pa testira pomnilnik RAM *
* (za pisanje in za branje) ter vmesnik *
* PIA (4 razlicni vzorci luck). *
* *
**********************************************************
*
007F STCKAD EQU $007F ; zacetni naslov sklada v RAM-u
*
* Prekinitveni vektorji (najvisjih 8 naslovov v EPROM-u)
*
DFFE ORG $DFFE
DFFE C000 FDB HWRES ; reset
*
* V/I naslovi
*
8000 PIAADR EQU $8000 ; zacetni naslov vmesnika PIA
8000 DRA EQU PIAADR ; podatkovni register A
8001 CRA EQU PIAADR+1 ; kontrolni register A
8002 DRB EQU PIAADR+2 ; podatkovni register B
8003 CRB EQU PIAADR+3 ; kontrolni register B
*
**********************************************************
* Program v EPROM-u *
**********************************************************
*
C000 ORG $C000 ; zacetni naslov programa (EPROM)
*
**********************************************************
* Inicializacija sistema po resetu *
**********************************************************
*
C000 8E007F HWRES LDS #STCKAD ; zacetni naslov sklada
*
**********************************************************
* Podprogram za inicializacijo vmesnika PIA *
**********************************************************
*
C003 7F8001 CLR CRA ; dostop do smernega registra A
C006 7F8000 CLR DRA ; PA so vhodi
C009 7F8003 CLR CRB ; dostop do smernega registra B
C00C 86FF LDAA #$FF ; PB so izhodi
C00E B78002 STAA DRB
C011 8634 LDAA #%00110100
C013 B78001 STAA CRA ; dostop do krmilnih registrov
C016 B78003 STAA CRB ; (nastavitev na periferni vmesnik)
*
**********************************************************
* Podprogram za test pomnilnika RAM *
**********************************************************
*
C019 CE0000 LDX #$0000
C01C 86FF RAMTST LDAA #$FF
C01E A700 STAA 0,X ; pise $FF
C020 A100 CMPA 0,X ; preveri
C022 260E BNE NAPAKA
C024 6F00 CLR 0,X ; brise
C026 6D00 TST 0,X ; preveri
C028 2608 BNE NAPAKA
C02A 08 INX
C02B 8C007F CPX #$007F ; konec pomnilnika RAM
C02E 2FEC BLE RAMTST
C030 2018 BRA PIATST ; konca z RAM-om, gre na PIA-o
*
* V primeru napake pri testiranju pomnilnika RAM
* signalizira s prvo in zadnjo lucko (10000001) !
*
C032 7F8002 NAPAKA CLR DRB ; izklop luck
C035 CEC350 LDX #50000
C038 01 ZANKA NOP ; zakasnitev 350 ms
C039 09 DEX
C03A 26FC BNE ZANKA
C03C 8681 LDAA #%10000001
C03E B78002 STAA DRB ; vklop luck
C041 CEC350 LDX #50000
C044 01 ZANKA1 NOP ; zakasnitev 350 ms
C045 09 DEX
C046 26FC BNE ZANKA1
C048 20E8 BRA NAPAKA
*
**********************************************************
* Glavni program = test vmesnika PIA *
* *
* Rezultat : S1 S2 LED diode (v gibanju) *
* *
* 0 0 10101010 izmenicno *
* 1 0 10000000 v desno *
* 0 1 00000001 v levo *
* 1 1 10000001 levo-desno *
* *
**********************************************************
*
C04A BDC058 PIATST JSR CITAJ ; glede na stanje stikal skoci
C04D 270F BEQ LUC00 ; na ustrezen podprogram
C04F 44 LSRA
C050 271C BEQ LUC01
C052 2430 BCC LUC10
C054 2544 BCS LUC11
C056 20F2 BRA PIATST
*
C058 B68000 CITAJ LDAA DRA ; odcita stanje stikal S1 in S2
C05B 8403 ANDA #%00000011
C05D 39 RTS
*
C05E C6AA LUC00 LDAB #%10101010
C060 F78002 NIC STAB DRB ; prizge lucke
C063 BDC0DF JSR PAVZA
C066 53 COMB
C067 BDC058 JSR CITAJ ; preveri spremembo na stikalih
C06A 27F4 BEQ NIC
C06C 20DC BRA PIATST
*
C06E C601 LUC01 LDAB #%00000001
C070 C100 ENA CMPB #0
C072 27FA BEQ LUC01
C074 F78002 STAB DRB ; prizge lucko
C077 BDC0DF JSR PAVZA
C07A 58 ASLB ; premakne lucko v levo
C07B BDC058 JSR CITAJ ; preveri spremembo na stikalih
C07E 8101 CMPA #1
C080 27EE BEQ ENA
C082 20C6 BRA PIATST
*
C084 C680 LUC10 LDAB #%10000000
C086 C100 DVA CMPB #0
C088 27FA BEQ LUC10
C08A F78002 STAB DRB ; prizge lucko
C08D BDC0DF JSR PAVZA
C090 54 LSRB ; premakne lucko v desno
C091 BDC058 JSR CITAJ ; preveri spremembo na stikalih
C094 8102 CMPA #2
C096 27EE BEQ DVA
C098 20B0 BRA PIATST
*
C09A C681 LUC11 LDAB #%10000001
C09C BDC0D5 JSR TRI
C09F 8103 CMPA #3
C0A1 26A7 BNE PIATST
C0A3 C642 LDAB #%01000010
C0A5 BDC0D5 JSR TRI
C0A8 8103 CMPA #3
C0AA 269E BNE PIATST
C0AC C624 LDAB #%00100100
C0AE BDC0D5 JSR TRI
C0B1 8103 CMPA #3
C0B3 2695 BNE PIATST
C0B5 C618 LDAB #%00011000
C0B7 BDC0D5 JSR TRI
C0BA 8103 CMPA #3
C0BC 268C BNE PIATST
C0BE C624 LDAB #%00100100
C0C0 BDC0D5 JSR TRI
C0C3 8103 CMPA #3
C0C5 2683 BNE PIATST
C0C7 C642 LDAB #%01000010
C0C9 BDC0D5 JSR TRI
C0CC 8103 CMPA #3
C0CE 2602 BNE PIAJMP
C0D0 20C8 BRA LUC11
*
C0D2 7EC04A PIAJMP JMP PIATST ; neposredno naslavljanje
*
C0D5 F78002 TRI STAB DRB ; prizge lucki
C0D8 BDC0DF JSR PAVZA
C0DB BDC058 JSR CITAJ ; preveri spremembo na stikalih
C0DE 39 RTS
*
C0DF CEC350 PAVZA LDX #50000 ; zakasnitev 350 ms
C0E2 01 ZANKA2 NOP
C0E3 09 DEX
C0E4 26FC BNE ZANKA2
C0E6 39 RTS
*
0000 END
---- SYMBOL TABLE ----
CITAJ C058 LUC00 C05E PIAJMP C0D2
CRA 8001 LUC01 C06E PIATST C04A
CRB 8003 LUC10 C084 RAMTST C01C
DRA 8000 LUC11 C09A STCKAD 007F
DRB 8002 NAPAKA C032 TRI C0D5
DVA C086 NIC C060 ZANKA C038
ENA C070 PAVZA C0DF ZANKA1 C044
HWRES C000 PIAADR 8000 ZANKA2 C0E2
***** NO ERRORS DETECTED *****
in drugega:
AVOCET SYSTEMS 6801/6301 ASSEMBLER - VERSION 2.20M SERIAL #00413
SOURCE FILE NAME: PROGRAM2.ASM
*
**********************************************************
* *
* Drugi testni program : komunikacija *
* *
* Program za vaje pri predmetu *
* Arhitektura racunalniskih sistemov II. *
* *
* Mikroprocesorski sistem: *
* *
* * MC6802 CPU+RAM 0000-007F *
* * 2764 EPROM C000-DFFF *
* * MC6821 PIA 8000-8003 *
* *
* Avtor : Vladimir Bensa *
* Datum : 10.5.1995. *
* Opis programa : Program prenese 8 bitov z enega *
* sistema na drugega. Oddajni sistem *
* (master) ima stikali v polozaju 11, *
* sprejemnik (slave) pa v polozaju 00. *
* Prenos je viden na luckah. *
* *
**********************************************************
*
007F STCKAD EQU $007F ; zacetni naslov sklada v RAM-u
*
* Prekinitveni vektorji (najvisjih 8 naslovov v EPROM-u)
*
DFF8 ORG $DFF8
DFF8 C050 FDB IRQSP ; maskirana prekinitev
DFFE ORG $DFFE
DFFE C000 FDB HWRES ; reset
*
* Spremenljivki v RAM-u
*
0000 ORG $0
0000 STEVEC RMB 1 ; stevec prekinitev (slave)
0001 PRENOS RMB 1 ; shrani vzorec
*
* V/I naslovi
*
8000 PIAADR EQU $8000 ; zacetni naslov vmesnika PIA
8000 DRA EQU PIAADR ; podatkovni register A
8001 CRA EQU PIAADR+1 ; kontrolni register A
8002 DRB EQU PIAADR+2 ; podatkovni register B
8003 CRB EQU PIAADR+3 ; kontrolni register B
*
**********************************************************
* Program v EPROM-u *
**********************************************************
*
C000 ORG $C000 ; zacetni naslov programa (EPROM)
*
**********************************************************
* Inicializacija sistema po resetu *
**********************************************************
*
C000 8E007F HWRES LDS #STCKAD ; zacetni naslov sklada
*
**********************************************************
* Skupni del inicializacije vmesnika PIA *
**********************************************************
*
C003 7F8001 CLR CRA ; dostop do smernega registra A
C006 7F8000 CLR DRA ; PA so vhodi
C009 7F8003 CLR CRB ; dostop do smernega registra B
C00C 86FF LDAA #$FF ; PB so izhodi
C00E B78002 STAA DRB
C011 86FC LDAA #%11111100
C013 B78003 STAA CRB ; dostop do krmilnih registrov
C016 B78001 STAA CRA
*
C019 BDC08D TEST JSR CITAJ ; preveri stanje stikal
C01C 2713 BEQ PIASLA
C01E C103 CMPB #3
C020 2702 BEQ PIAMAS
C022 20F5 BRA TEST
*
**********************************************************
* Locena dela inicializacije vmesnika PIA *
**********************************************************
*
C024 7F8001 PIAMAS CLR CRA ; dostop do smernega registra A
C027 86FC LDAA #%11111100
C029 B78000 STAA DRA ; stikali sta vhoda, ostalo izhodi
C02C B78001 STAA CRA ; navadno delovanje
C02F 200B BRA MASTER
*
C031 86ED PIASLA LDAA #%11101101 ; usklajevalno delovanje
C033 B78001 STAA CRA ; omogoci prekinitve na PIA (slave)
C036 7F0000 CLR STEVEC ; ni se nic preneseno
C039 0E CLI ; omogoci prekinitve na CPE (slave)
C03A 2010 BRA CAKAJ ; caka na prekinitev
*
**********************************************************
* Podprogram za oddajnik (master) *
**********************************************************
*
C03C C6DB MASTER LDAB #%11011011 ; VZOREC POSILJKE
C03E F78002 STAB DRB ; prizge lucke
C041 D701 STAB PRENOS ; zapomni si vzorec
C043 F78000 STAB DRA ; poslje zgornjo polovico bitov
C046 86F5 LDAA #%11110101
C048 B78001 STAA CRA ; zadnja fronta na CA2 (IRQ)
C04B 0E CLI ; omogoci prekinitve na CPE (master)
*
C04C 01 CAKAJ NOP
C04D 01 NOP
C04E 20FC BRA CAKAJ ; caka na prekinitev
*
**********************************************************
* Prekinitveni servisni program *
**********************************************************
*
C050 BDC08D IRQSP JSR CITAJ ; preveri stikali
C053 271A BEQ IRQSLA
C055 C103 CMPB #3
C057 2702 BEQ IRQMAS
C059 20F5 BRA IRQSP
*
C05B 86FC IRQMAS LDAA #%11111100
C05D B78001 STAA CRA ; onemogoci prekinitve
C060 D601 LDAB PRENOS ; odcita vzorec za prenos
C062 58 ASLB ; dostop do spodnje polovice bitov
C063 58 ASLB
C064 58 ASLB
C065 58 ASLB
C066 F78000 STAB DRA ; poslje spodnjo polovico bitov
C069 86F4 LDAA #%11110100
C06B B78001 STAA CRA ; zadnja fronta na CA2 (IRQ)
C06E 3B RTI
*
C06F F68000 IRQSLA LDAB DRA ; odcita prispele 4 bite
C072 C4F0 ANDB #%11110000
C074 7D0000 TST STEVEC
C077 2703 BEQ START ; to je prva polovica bitov
C079 2607 BNE KONEC ; ze ima polovico bitov
C07B 3B RTI
*
C07C D701 START STAB PRENOS ; shrani prvo polovico bitov
C07E 7C0000 INC STEVEC
C081 3B RTI
*
C082 54 KONEC LSRB ; premik polovice bitov
C083 54 LSRB
C084 54 LSRB
C085 54 LSRB
C086 9601 LDAA PRENOS ; prva polovica bitov
C088 1B ABA ; sedaj ima vse bite
C089 B78002 STAA DRB ; prikaz na luckah
C08C 3B RTI
*
C08D F68000 CITAJ LDAB DRA ; odcita stanje stikal S1 in S2
C090 C403 ANDB #%00000011
C092 39 RTS
*
0000 END
---- SYMBOL TABLE ----
CAKAJ C04C IRQMAS C05B PIASLA C031
CITAJ C08D IRQSLA C06F PRENOS 0001
CRA 8001 IRQSP C050 START C07C
CRB 8003 KONEC C082 STCKAD 007F
DRA 8000 MASTER C03C STEVEC 0000
DRB 8002 PIAADR 8000 TEST C019
HWRES C000 PIAMAS C024
***** NO ERRORS DETECTED *****