Transcript MOP-Adressavkodning
Slide 1
Maskinorienterad Programmering
EDA 480 – Maskinorienterad Programmering
2009/2010
Adressavkodning, ”Uppbyggnad.pdf”
”Skrivarporten”, Arbetsbok MC12, avsnitt 2
Ur innehållet:
Repetition FLEX adressavkodning
Fullständig/Ofullständig avkodning
Minnesavbildad/Direkt avkodning
Vi ansluter en skrivare
Adressavkodning - Skrivarport
1
Slide 2
Maskinorienterad Programmering
Adressavkodning FLEX
Adressavkodning - Skrivarport
2
Slide 3
Maskinorienterad Programmering
Adressavkodning FLEX
Adressavkodning - Skrivarport
3
Slide 4
Maskinorienterad Programmering
EXEMPEL: Adressavkodning
Varje minnesblock
(kapsel) tilldelas sin
unika del av
adressrummet
CPU
avkodnings-logik
Adressavkodning - Skrivarport
4
Slide 5
Maskinorienterad Programmering
CPU
Databuss, 8
signaler,
betecknas D0D7
D0
D1
D2
D3
D4
D5
D6
D7
Registren, med
8-bitars
ordbredd och
CE-ingång
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
R/W
Adressbuss,
16 signaler,
betecknas A0A15
Styrsignal
(Read/Write) del
av styrbussen.
Genereras av
centralenheten
”Flyktigt” läs/skriv-minne, RWM
Minnet har 8bitars ordbredd,
precis som
centralenheten
Read/Write är en insignal till
minneskapseln
D0
D1
D2
D3
D4
D5
D6
D7
R/W
CE (Chip Enable) är en
insignal till kapseln, denna
måste aktiveras för åtkomst
i detta minne
Adressavkodning - Skrivarport
CE
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
Minnet
innehåller
4 kBytes
(212)bytes
och har
därmed 12
adressledningar
Registren, med
8-bitars
ordbredd och
CE-ingång
D0
D1
D2
D3
D4
D5
D6
D7
CE
ut-port
D0
D1
D2
D3
D4
D5
D6
D7
CE
in-port
”Permanent” läs-minne, ROM
8-bitars ordbredd,
CE (Chip Enable)
D0
D1
D2
D3
D4
D5
D6
D7
CE
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
4 kBytes
(212)bytes
5
Slide 6
Maskinorienterad Programmering
Specifikation
RWM-minnet ska aktiveras om centralenheten genererar någon av
adresserna 0-0FFF.
ROM-minnet ska aktiveras om centralenheten genererar någon av
adresserna C000-CFFF.
Inporten ska aktiveras om centralenheten genererar adress A000.
Utporten ska aktiveras om centralenheten genererar adress 8000.
Kapsel
Minneskapsel RWM 4 kByte
Minneskapsel ROM 4 kByte
Register, 8 bitar som inport
Register, 8 bitar som utport
Adressavkodning - Skrivarport
Startadress
0000
C000
A000
8000
Slutadress
0FFF
CFFF
A000
8000
6
Slide 7
Maskinorienterad Programmering
Realisering med NAND-logik
Kapsel
RWM
ROM
inport
utport
A15
0
1
1
1
A14
0
1
0
0
A13
0
0
1
0
A12
0
0
0
0
A11
X
X
0
0
Adressbuss
A10 A9 A8
X
X
X
X
X
X
0
0
0
0
0
0
A7
X
X
0
0
Fullständig avkodning
A6
X
X
0
0
A5
X
X
0
0
A4
X
X
0
0
A3
X
X
0
0
A2
X
X
0
0
A1
X
X
0
0
A0
X
X
0
0
0000-0FFF
RWM:
ROM:
0xxx
Cxxx
utport: 8000
inport: A000
1000-1FFF
A15
A14
A13
A12
2000-2FFF
&
3000-3FFF
CERWM
4000-4FFF
5000-5FFF
6000-6FFF
7000-7FFF
A15
A14
A13
A12
8000-8FFF
9000-9FFF
&
CEROM
A000-AFFF
B000-BFFF
C000-CFFF
D000-DFFF
E000-EFFF
F000-FFFF
Adressavkodning - Skrivarport
7
Slide 8
Maskinorienterad Programmering
Ofullständig avkodning
Kapsel
RWM
ROM
inport
utport
RWM:
A15
0
1
1
1
0xxx
utport: 8xxx
inport: Axxx
ROM:
Cxxx
A14
0
1
0
0
A13
0
0
1
0
A12
0
0
0
0
A15
A14
A13
A12
A15
A14
A13
A12
A15
A14
A13
A12
A15
A14
A13
A12
Adressavkodning - Skrivarport
A11
X
X
X
X
&
Adressbuss
A10 A9 A8
X
X
X
X
X
X
X
X
X
X
X
X
A7
X
X
X
X
A6
X
X
X
X
A5
X
X
X
X
A4
X
X
X
X
A3
X
X
X
X
A2
X
X
X
X
A1
X
X
X
X
A0
X
X
X
X
CERWM
0000-0FFF
1000-1FFF
2000-2FFF
3000-3FFF
&
CEUT
4000-4FFF
5000-5FFF
6000-6FFF
7000-7FFF
8000-8FFF
9000-9FFF
&
CEIN
A000-AFFF
B000-BFFF
C000-CFFF
D000-DFFF
E000-EFFF
F000-FFFF
&
CEROM
8
Slide 9
Maskinorienterad Programmering
Adressavkodning - Skrivarport
9
Slide 10
Maskinorienterad Programmering
Minnesavbildad/Direkt avkodning
●
●
Vi har sett exempel på ”Minnesavbildad avkodning”
där speciell avkodningslogik används då
periferikretsar används.
Vid ”Direkt avkodning” används speciella
instruktioner för att ange åtkomst i periferikrets.
EXEMPEL: Intel 8086
IO-instruktioner:
IN
<16-bit konst>
OUT
<16-bit konst>
Adressavkodning - Skrivarport
10
Slide 11
Maskinorienterad Programmering
IN
OUT
Adressavkodning - Skrivarport
<16-bit konst>
<16-bit konst>
11
Slide 12
Maskinorienterad Programmering
Arbetsbok, kap. 2
Skrivarport
Konstruktion av en Printer-Port
Synkroniseringsproblem
Villkorlig / ovillkorlig överföring
”Busy Wait” och ”Polling”
Handskakningssignaler
Adressavkodning - Skrivarport
12
Slide 13
Maskinorienterad Programmering
MC12 adressrum
Beskrivande figur
över hur
minnesmoduler
och IO-portar är
placerade
i minnet
FFFF
4000
3FFF
1000
0FFF
0400
03FF
ROM,
Innehåller det
inbyggda
debuggerprogrammet
DBG12.
RWM,
används för program
och data.
I detta adressintervall
placeras gränssnitt mot
externa enheter
HCS12 interna
register
0000
Adressavkodning - Skrivarport
13
Slide 14
Maskinorienterad Programmering
Adressavkodning för skrivar-porten
Adressavkodning
FFFF
CS
CPU12
skrivare
minne
4000
3FFF
Med portdefinition
PRINTER
EQU
$0800
och instruktionerna
LDAA
#$30
STAA
PRINTER
överförs hexadecimala värdet 30 till
skrivaren
1000
0FFF
skrivarportens
dataregister
Det lilla fönstret visar
innehållet i dataregistret tolkat
som ASCII.
0800-0803
0400
03FF
”pappersyta”, här visas utskriften
0000
Adressavkodning - Skrivarport
14
Slide 15
Maskinorienterad Programmering
Förutsättningar
Vår skrivare är från början en "dum" skrivare:
Den kan endast arbeta med ett tecken i taget.
(hämtar ett tecken - skriv ut - hämta nästa)
Det finns inledningsvis inga handskaknings-signaler
Max utskriftshastighet: 4 tecken per sekund.
Adressavkodning - Skrivarport
15
Slide 16
Maskinorienterad Programmering
Första programexemplet
* Printer V1_0
ORG
$1000
LDX
#Text
Pekare till textsträng -> X
Loop
LDAA
1,X+
Tecken -> A, peka på nästa
STAA
PRINTER
Skriv ut till port
BRA
Loop
Fortsätt med nästa tecken
; så här kan du använda assemblerdirektiv för att
; skapa textsträngen på adresss 3000:
ORG
$3000
Text
FCS
”Hej Du Kalle!”
Adressavkodning - Skrivarport
Text ($3000)
H
e
j
D
u
K
a
l
l
e
!
16
Slide 17
Maskinorienterad Programmering
Inför specialtecken för
strängslut
P rin te rV 1 _ 1
Text ($3000)
H
e
j
In it
D
u
L ä s n ä sta te cke n
K
a
l
l
e
!
EOT
J
T e cke n =
EOT?
N
* Printer V1_1
PRINTER EQU
EOT
EQU
ORG
LDX
Loop:
LDAA
CMPA
BEQ
STAA
BRA
Stop:
NOP
BRA
ORG
Text:
FCS
FCB
$0800
4
$1000
#Text
1,X+
#EOT
Stop
PRINTER
Loop
Stop
$3000
"Hej Du Kalle!"
EOT
Ö ve rfö r D a ta
till S kriva re n
S to p
Adressavkodning - Skrivarport
17
Slide 18
Maskinorienterad Programmering
Synkronisera arbetstakterna …
Skrivare
Instruktioner/
sekund
Tecken/
sekund
4
Simulator
STEP
Simulator
RUN
Simulator
RUN
FAST
Hårdvara
?
10
1000
1 000 000
?
2
200
200 000
Lösningen blir villkorlig överföring vilket kräver ett
asynkront gränssnitt…
Adressavkodning - Skrivarport
18
Slide 19
Maskinorienterad Programmering
Villkorlig överföring
Mottagaren
Redo?
J
N
Mottagaren
Redo?
J
Sänd Data
till mottagaren
Sänd Data
till mottagaren
Busy Wait
Polling
Adressavkodning - Skrivarport
N
Statustest,
kräver
asynkront
gränssnitt…
19
Slide 20
Maskinorienterad Programmering
Gränssnitt, version 2
PrinterV2_0
READY
Init
datorsystem
Skrivarbuss
Skrivare
READY-signalen definieras enligt:
• READY = 1 (Hög nivå) indikerar att
skrivaren är klar att ta emot ett nytt
tecken.
• READY = 0 (Låg nivå) indikerar att
skrivaren är upptagen med att skriva
ut ett tecken.
Läs nästa tecken
J
Tecken=
EOT?
N
Läs Status
B it 7
2
1
0
READY=1?
N
J
READY
S tatusregister
Överför Data
till Skrivaren
PrinterV2_0
Adressavkodning - Skrivarport
20
Slide 21
Maskinorienterad Programmering
”Programmerarens bild”
PrinterV2_0
Init
READY = 1 (Hög nivå): skrivaren är REDO
READY = 0 (Låg nivå): skrivaren är UPPTAGEN
Läs nästa tecken
J
Tecken=
EOT?
N
B it 7
2
1
0
Läs Status
READY
S tatusregister
READY=1?
N
J
Överför Data
till Skrivaren
PrinterV2_0
Adressavkodning - Skrivarport
* Printer V2_0
PRINTER EQU
PSTATUS EQU
EOT
EQU
ORG
LDX
Loop:
LDAA
CMPA
BEQ
LoopForReady:
LDAB
ANDB
BEQ
STAA
BRA
Exit:
NOP
BRA
Text:
ORG
FCS
FCB
$0800
$0801
4
$1000
#Text
1,X+
#EOT
Exit
PSTATUS
#4
LoopForReady
PRINTER
Loop
Exit
$3000
"Hej Du Kalle!"
EOT
21
Slide 22
Maskinorienterad Programmering
Resultat
Klarar nu situationen att centralenheten arbetar
snabbare än skrivaren.
Fortfarande problem då centralenheten är
långsammare än skrivaren.
Fortfarande problem med att få skrivaren att
stoppa då sista tecknet skrivits ut.
Vi behöver ytterligare handskakningssignal ”Tecken finns”…
Adressavkodning - Skrivarport
22
Slide 23
Maskinorienterad Programmering
Gränssnitt, version 3
PrinterV3
Init
READY
Datorsystem
DAV
Skrivare
Skrivarbuss
DAV = 1 (Hög nivå) indikerar
för skrivaren att giltigt tecken
finns att hämta på skrivarbussen.
Läs nästa tecken
J
Tecken=
EOT?
N
DAV = 0 (Låg nivå) indikerar
för skrivaren att skrivarbussen
har ett ogiltigt värde.
Läs Status
N
READY=1?
J
Överför Data
till Skrivaren
B it 7
1
0
DAV=1
DAV
Läs Status
S tyrregister
READY=0?
N
J
DAV=0
Adressavkodning - Skrivarport
23
Slide 24
Maskinorienterad Programmering
* Printer V3
Händelser i
Datorsystemet
Inväntar READY=1
PrinterV3
Händelser i skrivaren
Init
Skrivaren är upptagen
med att skriva ut ett
tecken. READY=0.
Läs nästa tecken
Skrivaren är redo för
nästa tecken och sätter
READY=1
J
Inväntar DAV=1
Loop:
ORG
LDX
LDAA
CMPA
BEQ
$1000
#Text
1,X+
#EOT
Stop
N
READY=1?
Ready:
J
Ser att DAV=1. Läser
nytt
tecken
från
skrivarbussen.
Signalerar upptagen,
READY=0.
DAV=1
Läs Status
READY=0?
När
READY=0
nollställs DAV som
indikation på att det
inte finns giltigt
tecken
på
skrivarbussen
$0800
$0801
$0802
4
Läs Status
Överför Data
till Skrivaren
Inväntar READY=0
EQU
EQU
EQU
EQU
Tecken=
EOT?
N
När
READY=1
skrivs nästa tecken
till
skrivarens
dataregister. Sätter
DAV=1
PRINTER
PSTATUS
PCONTROL
EOT
J
Skrivaren är upptagen
med att skriva ut ett
tecken. READY=0.
Adressavkodning - Skrivarport
DAV=0
N
BRCLR
STAA
BSET
NotReady:
BRSET
BCLR
BRA
Stop:
NOP
BRA
Text:
ORG
FCS
FCB
PSTATUS,#4,Ready
PRINTER
PCONTROL,#2
PSTATUS,#4, NotReady
PCONTROL,#2
Loop
Stop
$3000
"Hej Du Kalle!"
EOT
24
Slide 25
Maskinorienterad Programmering
Resultat
Klarar nu situationen att centralenheten arbetar
snabbare än skrivaren.
Klarar nu situationen då centralenheten är
långsammare än skrivaren.
Klarar nu situationen med att få skrivaren att
stoppa då sista tecknet skrivits ut
Lösningen är dock hopplöst ineffektiv med tanke på hur vi
utnyttjar systemet…
Verkligt "arbete"
DAV
Processorn väntar på DAV skall gå hög
μs
Adressavkodning - Skrivarport
250 ms
μs
25
Slide 26
Maskinorienterad Programmering
Introduktion till ”Undantagshantering”
Interrupt ReQuest (IRQ), begäran om avbrott…
READY
DAV
Datorsystem
Skrivare
IRQ
Skrivarbuss
Datorsystem
READY
DAV
Skrivare
Skrivar buss
Huvudprogram
Avbrottssignal
IRQ
Avbrottsrutin som
skriver ut
ett tecken
Processorn utför annat viktigt arbete
ms
Adressavkodning - Skrivarport
Avbrottsrutinen utförs och ett
tecken skickas till skrivaren IRQ
100 ms
ms
26
Slide 27
Maskinorienterad Programmering
Avbrott
1) Huvudprogram exekveras när ett avbrott aktiveras
H u vu d p ro g ra m
2) Hopp till avbrottsrutin
1
A vb ro tts rutin
3
A vb ro tt
4) Avbrottsrutin avslutas med en speciell instruktion,
2
5
3) Avbrottsrutin startar
B e tjä n a
a vb ro tte t
return from interrupt (RTI)
5) Återhopp till huvudprogram
6) Huvudprogrammet fortsätter.
6
4
RTI
Minne
FFF2
FFF3
Adressavkodning - Skrivarport
Avbrottsrutinens
adress
”avbrottsvektor”
27
Slide 28
Maskinorienterad Programmering
EXEMPEL, Skrivarporten
”TextP”
”Text”
AH
AL
H
e
j
Minne
FFF2
FFF3
Printer_IRQ(H)
Printer_IRQ(L)
”avbrottsvektor”
D
u
K
a
l
l
e
!
EOT
Adressavkodning - Skrivarport
* Avbrottsrutin
Printer_IRQ:
LDX
TextP ;Läs pekare till nästa
LDAA 1,x+
;Skriv nästa tecken
STAA Printer
STX
TextP ;Spara nya pekare
RTI
28
Maskinorienterad Programmering
EDA 480 – Maskinorienterad Programmering
2009/2010
Adressavkodning, ”Uppbyggnad.pdf”
”Skrivarporten”, Arbetsbok MC12, avsnitt 2
Ur innehållet:
Repetition FLEX adressavkodning
Fullständig/Ofullständig avkodning
Minnesavbildad/Direkt avkodning
Vi ansluter en skrivare
Adressavkodning - Skrivarport
1
Slide 2
Maskinorienterad Programmering
Adressavkodning FLEX
Adressavkodning - Skrivarport
2
Slide 3
Maskinorienterad Programmering
Adressavkodning FLEX
Adressavkodning - Skrivarport
3
Slide 4
Maskinorienterad Programmering
EXEMPEL: Adressavkodning
Varje minnesblock
(kapsel) tilldelas sin
unika del av
adressrummet
CPU
avkodnings-logik
Adressavkodning - Skrivarport
4
Slide 5
Maskinorienterad Programmering
CPU
Databuss, 8
signaler,
betecknas D0D7
D0
D1
D2
D3
D4
D5
D6
D7
Registren, med
8-bitars
ordbredd och
CE-ingång
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
R/W
Adressbuss,
16 signaler,
betecknas A0A15
Styrsignal
(Read/Write) del
av styrbussen.
Genereras av
centralenheten
”Flyktigt” läs/skriv-minne, RWM
Minnet har 8bitars ordbredd,
precis som
centralenheten
Read/Write är en insignal till
minneskapseln
D0
D1
D2
D3
D4
D5
D6
D7
R/W
CE (Chip Enable) är en
insignal till kapseln, denna
måste aktiveras för åtkomst
i detta minne
Adressavkodning - Skrivarport
CE
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
Minnet
innehåller
4 kBytes
(212)bytes
och har
därmed 12
adressledningar
Registren, med
8-bitars
ordbredd och
CE-ingång
D0
D1
D2
D3
D4
D5
D6
D7
CE
ut-port
D0
D1
D2
D3
D4
D5
D6
D7
CE
in-port
”Permanent” läs-minne, ROM
8-bitars ordbredd,
CE (Chip Enable)
D0
D1
D2
D3
D4
D5
D6
D7
CE
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
4 kBytes
(212)bytes
5
Slide 6
Maskinorienterad Programmering
Specifikation
RWM-minnet ska aktiveras om centralenheten genererar någon av
adresserna 0-0FFF.
ROM-minnet ska aktiveras om centralenheten genererar någon av
adresserna C000-CFFF.
Inporten ska aktiveras om centralenheten genererar adress A000.
Utporten ska aktiveras om centralenheten genererar adress 8000.
Kapsel
Minneskapsel RWM 4 kByte
Minneskapsel ROM 4 kByte
Register, 8 bitar som inport
Register, 8 bitar som utport
Adressavkodning - Skrivarport
Startadress
0000
C000
A000
8000
Slutadress
0FFF
CFFF
A000
8000
6
Slide 7
Maskinorienterad Programmering
Realisering med NAND-logik
Kapsel
RWM
ROM
inport
utport
A15
0
1
1
1
A14
0
1
0
0
A13
0
0
1
0
A12
0
0
0
0
A11
X
X
0
0
Adressbuss
A10 A9 A8
X
X
X
X
X
X
0
0
0
0
0
0
A7
X
X
0
0
Fullständig avkodning
A6
X
X
0
0
A5
X
X
0
0
A4
X
X
0
0
A3
X
X
0
0
A2
X
X
0
0
A1
X
X
0
0
A0
X
X
0
0
0000-0FFF
RWM:
ROM:
0xxx
Cxxx
utport: 8000
inport: A000
1000-1FFF
A15
A14
A13
A12
2000-2FFF
&
3000-3FFF
CERWM
4000-4FFF
5000-5FFF
6000-6FFF
7000-7FFF
A15
A14
A13
A12
8000-8FFF
9000-9FFF
&
CEROM
A000-AFFF
B000-BFFF
C000-CFFF
D000-DFFF
E000-EFFF
F000-FFFF
Adressavkodning - Skrivarport
7
Slide 8
Maskinorienterad Programmering
Ofullständig avkodning
Kapsel
RWM
ROM
inport
utport
RWM:
A15
0
1
1
1
0xxx
utport: 8xxx
inport: Axxx
ROM:
Cxxx
A14
0
1
0
0
A13
0
0
1
0
A12
0
0
0
0
A15
A14
A13
A12
A15
A14
A13
A12
A15
A14
A13
A12
A15
A14
A13
A12
Adressavkodning - Skrivarport
A11
X
X
X
X
&
Adressbuss
A10 A9 A8
X
X
X
X
X
X
X
X
X
X
X
X
A7
X
X
X
X
A6
X
X
X
X
A5
X
X
X
X
A4
X
X
X
X
A3
X
X
X
X
A2
X
X
X
X
A1
X
X
X
X
A0
X
X
X
X
CERWM
0000-0FFF
1000-1FFF
2000-2FFF
3000-3FFF
&
CEUT
4000-4FFF
5000-5FFF
6000-6FFF
7000-7FFF
8000-8FFF
9000-9FFF
&
CEIN
A000-AFFF
B000-BFFF
C000-CFFF
D000-DFFF
E000-EFFF
F000-FFFF
&
CEROM
8
Slide 9
Maskinorienterad Programmering
Adressavkodning - Skrivarport
9
Slide 10
Maskinorienterad Programmering
Minnesavbildad/Direkt avkodning
●
●
Vi har sett exempel på ”Minnesavbildad avkodning”
där speciell avkodningslogik används då
periferikretsar används.
Vid ”Direkt avkodning” används speciella
instruktioner för att ange åtkomst i periferikrets.
EXEMPEL: Intel 8086
IO-instruktioner:
IN
<16-bit konst>
OUT
<16-bit konst>
Adressavkodning - Skrivarport
10
Slide 11
Maskinorienterad Programmering
IN
OUT
Adressavkodning - Skrivarport
<16-bit konst>
<16-bit konst>
11
Slide 12
Maskinorienterad Programmering
Arbetsbok, kap. 2
Skrivarport
Konstruktion av en Printer-Port
Synkroniseringsproblem
Villkorlig / ovillkorlig överföring
”Busy Wait” och ”Polling”
Handskakningssignaler
Adressavkodning - Skrivarport
12
Slide 13
Maskinorienterad Programmering
MC12 adressrum
Beskrivande figur
över hur
minnesmoduler
och IO-portar är
placerade
i minnet
FFFF
4000
3FFF
1000
0FFF
0400
03FF
ROM,
Innehåller det
inbyggda
debuggerprogrammet
DBG12.
RWM,
används för program
och data.
I detta adressintervall
placeras gränssnitt mot
externa enheter
HCS12 interna
register
0000
Adressavkodning - Skrivarport
13
Slide 14
Maskinorienterad Programmering
Adressavkodning för skrivar-porten
Adressavkodning
FFFF
CS
CPU12
skrivare
minne
4000
3FFF
Med portdefinition
PRINTER
EQU
$0800
och instruktionerna
LDAA
#$30
STAA
PRINTER
överförs hexadecimala värdet 30 till
skrivaren
1000
0FFF
skrivarportens
dataregister
Det lilla fönstret visar
innehållet i dataregistret tolkat
som ASCII.
0800-0803
0400
03FF
”pappersyta”, här visas utskriften
0000
Adressavkodning - Skrivarport
14
Slide 15
Maskinorienterad Programmering
Förutsättningar
Vår skrivare är från början en "dum" skrivare:
Den kan endast arbeta med ett tecken i taget.
(hämtar ett tecken - skriv ut - hämta nästa)
Det finns inledningsvis inga handskaknings-signaler
Max utskriftshastighet: 4 tecken per sekund.
Adressavkodning - Skrivarport
15
Slide 16
Maskinorienterad Programmering
Första programexemplet
* Printer V1_0
ORG
$1000
LDX
#Text
Pekare till textsträng -> X
Loop
LDAA
1,X+
Tecken -> A, peka på nästa
STAA
PRINTER
Skriv ut till port
BRA
Loop
Fortsätt med nästa tecken
; så här kan du använda assemblerdirektiv för att
; skapa textsträngen på adresss 3000:
ORG
$3000
Text
FCS
”Hej Du Kalle!”
Adressavkodning - Skrivarport
Text ($3000)
H
e
j
D
u
K
a
l
l
e
!
16
Slide 17
Maskinorienterad Programmering
Inför specialtecken för
strängslut
P rin te rV 1 _ 1
Text ($3000)
H
e
j
In it
D
u
L ä s n ä sta te cke n
K
a
l
l
e
!
EOT
J
T e cke n =
EOT?
N
* Printer V1_1
PRINTER EQU
EOT
EQU
ORG
LDX
Loop:
LDAA
CMPA
BEQ
STAA
BRA
Stop:
NOP
BRA
ORG
Text:
FCS
FCB
$0800
4
$1000
#Text
1,X+
#EOT
Stop
PRINTER
Loop
Stop
$3000
"Hej Du Kalle!"
EOT
Ö ve rfö r D a ta
till S kriva re n
S to p
Adressavkodning - Skrivarport
17
Slide 18
Maskinorienterad Programmering
Synkronisera arbetstakterna …
Skrivare
Instruktioner/
sekund
Tecken/
sekund
4
Simulator
STEP
Simulator
RUN
Simulator
RUN
FAST
Hårdvara
?
10
1000
1 000 000
?
2
200
200 000
Lösningen blir villkorlig överföring vilket kräver ett
asynkront gränssnitt…
Adressavkodning - Skrivarport
18
Slide 19
Maskinorienterad Programmering
Villkorlig överföring
Mottagaren
Redo?
J
N
Mottagaren
Redo?
J
Sänd Data
till mottagaren
Sänd Data
till mottagaren
Busy Wait
Polling
Adressavkodning - Skrivarport
N
Statustest,
kräver
asynkront
gränssnitt…
19
Slide 20
Maskinorienterad Programmering
Gränssnitt, version 2
PrinterV2_0
READY
Init
datorsystem
Skrivarbuss
Skrivare
READY-signalen definieras enligt:
• READY = 1 (Hög nivå) indikerar att
skrivaren är klar att ta emot ett nytt
tecken.
• READY = 0 (Låg nivå) indikerar att
skrivaren är upptagen med att skriva
ut ett tecken.
Läs nästa tecken
J
Tecken=
EOT?
N
Läs Status
B it 7
2
1
0
READY=1?
N
J
READY
S tatusregister
Överför Data
till Skrivaren
PrinterV2_0
Adressavkodning - Skrivarport
20
Slide 21
Maskinorienterad Programmering
”Programmerarens bild”
PrinterV2_0
Init
READY = 1 (Hög nivå): skrivaren är REDO
READY = 0 (Låg nivå): skrivaren är UPPTAGEN
Läs nästa tecken
J
Tecken=
EOT?
N
B it 7
2
1
0
Läs Status
READY
S tatusregister
READY=1?
N
J
Överför Data
till Skrivaren
PrinterV2_0
Adressavkodning - Skrivarport
* Printer V2_0
PRINTER EQU
PSTATUS EQU
EOT
EQU
ORG
LDX
Loop:
LDAA
CMPA
BEQ
LoopForReady:
LDAB
ANDB
BEQ
STAA
BRA
Exit:
NOP
BRA
Text:
ORG
FCS
FCB
$0800
$0801
4
$1000
#Text
1,X+
#EOT
Exit
PSTATUS
#4
LoopForReady
PRINTER
Loop
Exit
$3000
"Hej Du Kalle!"
EOT
21
Slide 22
Maskinorienterad Programmering
Resultat
Klarar nu situationen att centralenheten arbetar
snabbare än skrivaren.
Fortfarande problem då centralenheten är
långsammare än skrivaren.
Fortfarande problem med att få skrivaren att
stoppa då sista tecknet skrivits ut.
Vi behöver ytterligare handskakningssignal ”Tecken finns”…
Adressavkodning - Skrivarport
22
Slide 23
Maskinorienterad Programmering
Gränssnitt, version 3
PrinterV3
Init
READY
Datorsystem
DAV
Skrivare
Skrivarbuss
DAV = 1 (Hög nivå) indikerar
för skrivaren att giltigt tecken
finns att hämta på skrivarbussen.
Läs nästa tecken
J
Tecken=
EOT?
N
DAV = 0 (Låg nivå) indikerar
för skrivaren att skrivarbussen
har ett ogiltigt värde.
Läs Status
N
READY=1?
J
Överför Data
till Skrivaren
B it 7
1
0
DAV=1
DAV
Läs Status
S tyrregister
READY=0?
N
J
DAV=0
Adressavkodning - Skrivarport
23
Slide 24
Maskinorienterad Programmering
* Printer V3
Händelser i
Datorsystemet
Inväntar READY=1
PrinterV3
Händelser i skrivaren
Init
Skrivaren är upptagen
med att skriva ut ett
tecken. READY=0.
Läs nästa tecken
Skrivaren är redo för
nästa tecken och sätter
READY=1
J
Inväntar DAV=1
Loop:
ORG
LDX
LDAA
CMPA
BEQ
$1000
#Text
1,X+
#EOT
Stop
N
READY=1?
Ready:
J
Ser att DAV=1. Läser
nytt
tecken
från
skrivarbussen.
Signalerar upptagen,
READY=0.
DAV=1
Läs Status
READY=0?
När
READY=0
nollställs DAV som
indikation på att det
inte finns giltigt
tecken
på
skrivarbussen
$0800
$0801
$0802
4
Läs Status
Överför Data
till Skrivaren
Inväntar READY=0
EQU
EQU
EQU
EQU
Tecken=
EOT?
N
När
READY=1
skrivs nästa tecken
till
skrivarens
dataregister. Sätter
DAV=1
PRINTER
PSTATUS
PCONTROL
EOT
J
Skrivaren är upptagen
med att skriva ut ett
tecken. READY=0.
Adressavkodning - Skrivarport
DAV=0
N
BRCLR
STAA
BSET
NotReady:
BRSET
BCLR
BRA
Stop:
NOP
BRA
Text:
ORG
FCS
FCB
PSTATUS,#4,Ready
PRINTER
PCONTROL,#2
PSTATUS,#4, NotReady
PCONTROL,#2
Loop
Stop
$3000
"Hej Du Kalle!"
EOT
24
Slide 25
Maskinorienterad Programmering
Resultat
Klarar nu situationen att centralenheten arbetar
snabbare än skrivaren.
Klarar nu situationen då centralenheten är
långsammare än skrivaren.
Klarar nu situationen med att få skrivaren att
stoppa då sista tecknet skrivits ut
Lösningen är dock hopplöst ineffektiv med tanke på hur vi
utnyttjar systemet…
Verkligt "arbete"
DAV
Processorn väntar på DAV skall gå hög
μs
Adressavkodning - Skrivarport
250 ms
μs
25
Slide 26
Maskinorienterad Programmering
Introduktion till ”Undantagshantering”
Interrupt ReQuest (IRQ), begäran om avbrott…
READY
DAV
Datorsystem
Skrivare
IRQ
Skrivarbuss
Datorsystem
READY
DAV
Skrivare
Skrivar buss
Huvudprogram
Avbrottssignal
IRQ
Avbrottsrutin som
skriver ut
ett tecken
Processorn utför annat viktigt arbete
ms
Adressavkodning - Skrivarport
Avbrottsrutinen utförs och ett
tecken skickas till skrivaren IRQ
100 ms
ms
26
Slide 27
Maskinorienterad Programmering
Avbrott
1) Huvudprogram exekveras när ett avbrott aktiveras
H u vu d p ro g ra m
2) Hopp till avbrottsrutin
1
A vb ro tts rutin
3
A vb ro tt
4) Avbrottsrutin avslutas med en speciell instruktion,
2
5
3) Avbrottsrutin startar
B e tjä n a
a vb ro tte t
return from interrupt (RTI)
5) Återhopp till huvudprogram
6) Huvudprogrammet fortsätter.
6
4
RTI
Minne
FFF2
FFF3
Adressavkodning - Skrivarport
Avbrottsrutinens
adress
”avbrottsvektor”
27
Slide 28
Maskinorienterad Programmering
EXEMPEL, Skrivarporten
”TextP”
”Text”
AH
AL
H
e
j
Minne
FFF2
FFF3
Printer_IRQ(H)
Printer_IRQ(L)
”avbrottsvektor”
D
u
K
a
l
l
e
!
EOT
Adressavkodning - Skrivarport
* Avbrottsrutin
Printer_IRQ:
LDX
TextP ;Läs pekare till nästa
LDAA 1,x+
;Skriv nästa tecken
STAA Printer
STX
TextP ;Spara nya pekare
RTI
28