I DAG Fo 4 Programutveckling i aembler Programtrukturer (Foku på Lab 2/3) Dokumentation 2-paaemblatorn MOP fo 5 PRINTER EQU $0800 PSTATUS EQU $080 PCONTROL EQU $0802 EOT EQU 4 Vår Printerport PrintFil LDX #Text Loop LDAA,X+ CMPA #EOT BEQ Stop LoopForReady: BRCLR PSTATUS,#4,LoopForReady STAA PRINTER BSET PCONTROL,#2 Sätt DAV LoopNotReady: BRSET PSTATUS,#4,LoopNotReady Stop BCLR BRA RTS PCONTROL,#2 Loop Text: FCS "Hej Du Kalle!" FCB EOT (Vår drivrutin) Struct Printer { char Data; char Statu; char Control; } #define EOT 4 PrintFil (&Text){ char tecken; while () { tecken = *Text++; if tecken == EOT return; while (Printer.Statu & 4 == 0); } } Printer.Data = tecken; Printer.Control = 2; while (Printer.Statu & 4!=0); Printer.Control = 0; 2 Programutveckling i aemblerpråk Varför programmera i ett makinorienterat pråk? ingen kompilator alla uppgifter kan inte löa i högnivåpråk tidkritika uppgifter MOP fo 5 3 DOKUMENTATION Innre Yttre PROGRAMSTRUKTUR Modul Subrutiner USE-direktivet MOP fo 5 4
Programmeringprojekt Avn 3 Start Programmeringprojekt init. Räknare om håller reda på tiden 2. Huvudprogram 3. Rutin om viar tiden 4. Hur lagra tiden, format? 5. Rutin om ändrar (ökar) tiden 6. Rutin om läer av tangentbordet 7. Koda tangentnumren (Start, top, nolltäll klockan) 8. Rutin om tartar klockan 9. Rutin om tannar klockan 0. Rutin om nolltäller klockan. mm MOP fo 5 5 Diplay IncClock CheckKbd tangent? Ja? Nej 2? Nej 3? Nej Nej Ja Ja Ja Ingen tangent nedtryckt Starta klockan StartClock Stanna klockan StopClock Nolltäll klockan ReetClock Start Adre Data Kommentar Clock $02 Timmar $05 Tio minuter $0 Minuter $03 Tio ekunder $07 Sekunder $04 Tiondelar Stopp MOP fo 5 6 STRUKTUR: Programtruktur (Foku Main x). Inkludera definitionfil 2. Initiera ytemet 3. Huvudprogram 4. Subrutinen COMMAND 5. Inkludera fil (filer) med ytterligare ubrutiner. 6. Plat för variabler MOP fo 5 7 * Definitioner USE IODEFS.S2 ORG Start 2 --- Initiera mikrodatorytem --- Initiera borrimulator ************************************ * Huvudprogram * Invänta vald operation Loop: JSR KEYB 3 NOP * Utför vald operation JSR COMMAND BRA Loop ************************************ 4 COMMAND--- Här följer rutinen COMMAND ---... och hopptabell ---... och Dummyubrutiner 5 USE KeyML5.S2 Lägg till KEYB * Placera alla variabler här 6 DCCopy RMB Kopia av tyrord START Init KEYB COMMAND MOP fo 5 8 2
Användning av USE-direktivet * Filen IODEFS.2 DSInput EQU $600 Dip Switch Input DCtrl EQU $000 Drill Control Output DStatu EQU $00 Drill Stau Input Ny_IO EQU xxxx Flera In o Ut-portar * Filen DTEST.2 USE IODEFS.2 ORG $2000 loop ldaa DSInput Lä trömbrytarna taa DCtrl Skriv till borrmakinen ldaa DStatu Lä taturegitretnop BRA Loop MOP fo 5 9 S 49 YTTRE Dokumentation ************************************************** *SUBRUTIN COMMAND *Bekrivning: Rutinen avgör vilken *kommandoubrutin om kall anropa och anropar *denna. *Anrop: JSR COMMAND *Indata: Kommandonummer [0,7] i reg A *Utdata: Inga *Reg-påverkan: Ingen *Anrop ubr: SUB0 - SUB7 ************************************************** MOP fo 5 0 MAX EQU 7 COMMAND PSHA PSHX COMEX para reg på tacken CMPA #MAX giltigt kommando / indata? BHI COMEX hoppa om högre LDX #JUMPTAB hopptabellen baadre ASLA offet är 2 byte per adre LDX A,X hämta ubrutinen tartadre JSR,X utför ubrutin PULX PULA RTS ********************************** * Tabell med ubrutinadreer JUMPTAB FDB SUB0,SUB,SUB2,SUB3,SUB4,SUB5,SUB6,SUB7 * INNRE Dokumentation S 57 DELAY PSHA PSHX TSTA Är fördröjningvärde noll? BEQ DExit ALOOP LDX #Kont cykler = 0,25μ * Snurra om tar 0 klockcykler XLOOP LEAX -,X 2 cykler NOP cykel CPX #0 2 cykler BNE XLOOP 3 cykler Max ant varv: X=FFFF DECA BNE ALOOP FFFF varv 0,082 Ytterligare fördröjning? DExit INNRE Dokumentation PULX PULA RTS S 55 2 3
YTTRE Dokumentation ********************************************* * *SUBRUTIN DELAY * Bekrivning: Skapar en fördröjning om * ANTAL x 500 m. * Anrop: LDA #6 Fördröj 6*500m = 3 * JSR DELAY * Indata: Antal intervall,om 500 m i A * * Utdata: Inga * Regiter-påverkan:Ingen * Anropad ubrutin: Ingen. Max 0,082 500/82 6 ggr Indata * 6 ********************************************* * MOP fo 5 3 S 55 START RefPo Borra Vrid3S Borra VridS Larm STOP Kopia av tyrordet S 53 * Ge Styrord till borrmakinen LDAA #StyrOrd STAA DCtrl DCCopy RMB Drill Control Copy LDAA DCCopy Lä kopian av tyrordet ANDA #Bitmönter Nolla en tyrbit STAA DCtrl Ge nytt tyrord STAA DCCopy Spara nya kopian MOP fo0 4 2-pa aemblatorn Aemblatorn fyra uppgifter källprogram i aemblerpråk Aemblator objektprogram i makinpråk Punkt. överätta de mnemonika intruktionbeteckningarna till makinkod. Punkt 2. arbeta med ymbolika beteckningar för adreer och datavärden. överätta ymbolika beteckningar till ina rätta värden. Pa : Skapa Symboltabell Pa 2: Lägg ut kod Punkt 3. beräkna via matematika uttryck Punkt 4. Generera litfil och laddfil MOP fo 5 5 MOP fo 5 6 4
Punkt. Överätta de mnemonika intruktionbeteckningarna till makinkod. Punkt 2. Arbeta med ymbolika beteckningar (namn) LDAA $C080 ANDA #%0000 LDAB $C08 STD $C082 JSR $CA00 *ubrutin om ger m fördröjning JMP $C000 *programavnittet börjar på adre C000H...i tället för: 86 C0 80 (LDAA varar mot 86) 84 0F (ANDA # varar mot 84) F6 C0 8 (LDAB varar mot F6) 7C C0 82 (STD varar mot 7C) 6 CA 00 (JSR varar mot 6) LOC LDAA ALFA ANDA #CONST LDAB ALFA2 STD ACOMB JSR DELAYm ubrutin om ger m fördröjning JMP LOC...i tället för: LDAA $C080 ANDA #%0000 LDAB $C08 STD $C082 JSR $CA00 ubrutin om ger m fördröjning 06 C0 00 (JMP varar MOP mot fo 06) 5 7 MOP fo 5 8 JMP $C000 programavnittet börjar på adre C000H Punkt 3. Beräkna aritmetika uttryck LOC LDAA ALFA ANDA #CONST LDAB ALfA+ STD ALfA+2*CONST JSR DELAYm JMP LOC 2-pa aemblatorn arbetätt 002000. ORG $2000 002000 B6 20 2 2. SNURRA LDAA ALFA 2 002003 80 0 3. SUBA # 3 002005 7A 20 2 4. STAA ALFA 4 002008 26 F6 5. BNE SNURRA 5 00200A 86 FF 6. LDAA #ETTOR 6 00200C 7A 20 3 7. STAA BETA 7 00200F 06 E2 00 8. JMP MSTART 8 00202 7 9. ALFA FCB 23 9 00203 0. BETA RMB 0 00FF. ETTOR EQU $FF E200 2. MSTART EQU $E200 2 Pa : Skapa ymboltabell Exempel MOP fo 5 9 MOP fo 5 20 5
Start info Ant byte Startadre för följande kod Kontrollumma Symboltabell: 2-pa aemblatorn arbetätt Namn Värde SNURRA $2000 ALFA $202 BETA $203 ETTOR $00FF MSTART $E200 Pa 2: Lägg ut kod MOP fo 5 2 Kod 2-pa aemblatorn arbetätt Adre Kod 2000 B6 SNURRA LDAA ALFA 200 20 2002 2 2003 80 SUBA # 2004 0 2005 7A STAA ALFA 2006 20 2007 2 2008 26 BNE SNURRA 2009 F6 200A 86 LDAA #ETTOR 200B FF 200C 7A STAA BETA 200D 20 200E 3 200F 06 JMP MSTART 200 E2 20 00 202 7 ALFA FCB 23 203 - BETA RMB MOP fo 5 22 Generera litfil Punkt 4. Generera laddfil Punkt 4. 002000. ORG $2000 002000 B6 20 2 2. SNURRA LDAA ALFA 002003 80 0 3. SUBA # 002005 7A 20 2 4. STAA ALFA 002008 26 F6 5. BNE SNURRA 00200A 86 FF 6. LDAA #ETTOR 00200C 7A 20 3 7. STAA BETA 00200F 06 E2 00 8. JMP MSTART 00202 7 9. ALFA FCB 23 00203 0. BETA RMB 00FF. ETTOR EQU $FF E200 2. MSTART EQU $E200 S72000B62028007A20226F686FF7A20306E20070066 S903204C8 Makinkod och data Adre Kont Kod Rad Källkod MOP fo 5 23 MOP fo 5 24 6
Aemblerdirektiv Exempel Förklaring ORG $00 Put the next and following byte beginning in location $00. L RMB 0 Make the label L have the value of the current location; increment the location counter by 0 0. L2 EQU $0 Make the ymbol L2 have the value 0 6. L3 FCB $20,$34 Make the ymbol L3 have the value of the current location; initialize the current location to the value 20 6 and the next location to 34 6. L4 FDB $234 Make the ymbol L4 have the value of the current location; initialize thi location to 2 6 and the next location to 34 6. Rep Kontruktion av en Printer-Port AVBROTT!!! Avbrottrutin Avbrottvektor I-flagga Avbrottvippa Avbrottdriven Printerport I dag eller Näta gång Övriga avbrott I DAG fo 5 L5 FCS "ABC" Make the ymbol L5 have the value of the current location; initialize the word at thi location to the ASCII letter "A", the next location MOP to the fo 5ASCII letter "B", and the next to "C 25 MOP fo 3 26 PrinterV3_0 Init Lä näta tecken J Tecken= EOT? N Lä Statu N READY=? J Överför Data till Skrivaren Sätt DAV Printerport v3 med READY o DAV Datorytem READY READY DAV Skrivar bu Skrivare 28 Hur bra blev det egentligen???? * HUVUDPROGRAM... Olika initieringar... Loop... Annat arbete om... proceorn utför... jr Print Skriv ut en fil... bra Loop Verkligt "arbete" Skriv en fil 30 Lä Statu READY=0? J Nolltäll DAV Stop N DAV Skrivar Bu Giltig bu Buen innehåller ej giltigt värde MOP fo 3 27 t DAV Proceorn väntar på DAV kall gå hög 250 00 m m 28 7
Pågår utkrift? Är krivaren Redo? Skriv näta tecken Nej Nej * HUVUDPROGRAM... Olika initieringar Loop...... Annat arbete om... proceorn utför tt PFlag Pågår utkriftrutin? beq NoPrint.. hoppa om NEJ brclr NoPrint... BRA PStatu,#Ready,NoPrint Lä Statu jr Printchar Skriv ut ett tecken Loop Pflag rmb Flagga:Pågår utkrift? MOP fo 3 29 Avbrottignal Poll MC2- ytem READY DAV Inför Avbrott Skrivarbu Huvudprogram Avbrott- Rutin om kriver ut ett tecken Skrivare Adr: TextP A H Pekare till A L näta tecken Text H e j MOP fo 2 30 D u ASCIIkoder K för texta träng l l e! EOT Slutmarkeing Avbrott fort. Hur jobbar proceorn? S3 Avbrott - fort Reetignal RESET FETCH EXECUTE HITILLS: Programmeraren (DU) betämmer när: JSR Printchar Skriv ett tecken Aktiv? Ja Avbrottignal Huvudprogram VID AVBROTT: Skrivaren betämmer när: Printchar Skriv ett tecken Nej Hämta Intruktion Utför Intruktion Utför Avbrottrutin Avbrottrutin VAD KRÄVS? para undan in PC tarta en rutin om kriver ut ett tecken till krivaren för att edan återtarta huvudprogrammet MOP fo 3 3 MOP fo 3 32 8
Avbrott fort. VAD KRÄVS?. para undan in PC 2. tarta en rutin om kriver ut ett tecken till krivaren för att 3. edan återtarta huvudprogrammet S Avbrott fort. VAD KRÄVS?. para undan in PC 2. tarta en rutin om kriver ut ett tecken till krivaren för att 3. edan återtarta huvudprogrammet S ) Spara undan itt PC (jfr JSR SubRut) 2) tarta upp en rutin om kriver ut ett tecken till krivaren (Startadre??) PC (high) PC (low) S i ubrutinen S före ubrutinanropet PC (high) PC (low) S i avbrottrutinen S före Avbrottignalen OP PC (high) PC (low) Adre $FFF2 $FFF3 Minnet Startadre för avbrottrutin MOP fo 3 33 34 Avbrott fort. VAD KRÄVS?. para undan in PC 2. tarta en rutin om kriver ut ett tecken till krivaren för att 3. edan återtarta huvudprogrammet RTS PC (high) PC (low) S i ubrutinen S före ubrutinanropet 3) edan återtarta huvudprogrammet RTI PC (high) PC (low) S före avbrott S Avbrottrutin Avbrottignal Avbrott fort. Via problem. S i avbrottrutinen Huvudprogram CLRA RTI --- ldaa BankSaldo adda Löneinättning taa BankSaldo --- --- CMPB BHI --- Variabel Larger MOP fo 3 35 MOP fo 3 36 9
Avbrottrutin Avbrottignal Avbrott fort. Via problem. S 3 Huvudprogram RTI Adre 0 Adre Max CC B A X (high) X (low) Y (high) Y (low) PC (high) PC (low) S i avbrottrutinen S efter före avbrott MOP fo 3 37 Vi ummerar händeleförloppet vid ett avbrott. ) Huvudprogrammet kör 2) Hopp till avbrottrutin Save tatu Hämta avbrottvektor 3) Starta o kör avbrottrutin 4) Återhopp till huvudprogram 5) Retore tatu 6) Huvudprogrammet fortätter Avbrott fort. Avbrott Huvudprogram 6 5 2 Avbrottrutin MOP fo 3 38 3 S Betjäna avbrottet 4 RTI Avbrott Aktiv? Hämta Intruktion Utför Intruktion Huvudprogram 6 5 2 Nej Ja Avbrottrutin 3 Utför Avbrottrutin Betjäna avbrottet 4 RTI Proceor Avbrott fort. Flera problem. Datorytem Avbrott (Redo) Här är data S32 Yttre enhet MOP fo 3 39 Avbrott fort.. FETCH EXECUTE Nej I-flagga = 0? Aktiv? Ja Nej Hämta Intruktion Utför Intruktion Ja MOP fo 3 40 S Utför Avbrottrutin 0
Avbrott fort.. Bild av tacken före, under o efter avbrott Adr 0 Adr max Proceorn Statu regiter TOS Före avbrottet Befintligt tackinnehåll Mak =Enable TOS Under avbrottet Efter avbrottet =Enable (CC) Statu och åter - hoppadre för avbrottrutin Befintligt tackinnehåll Mak =Off TOS Befintligt tackinnehåll Mak =Enable S Huvudprogram Avbrott 6 2 5 Avbrottrutin 3 4 RTI Huvud Progr Initiera för avbrott Öka Var Via Var Via Var2 Avbrottrutin Öka Var2 RTI Avbrott Upg 42 S 32 GÖR UPG 42 och tudera: Händeleförloppet när ni Kör Run Slow och Step Stacken generellt Återhoppadre I-flaggan i CC-reg och på tack Statuindikatorer i imulatorn MOP fo 3 4 MOP fo 3 42 Avbrott inför Avbrottvippa S33 Huvud Prog Avbrott Upg S33 Tryckknapp Pul vid nedtryckning av tryckknapp Proceor Initiera för avbrott "" D Q Öka Var R C Q Via Var Via Var2 A 5 A 4 A 3 A 2 A A 0 R/W & Write addre Pul då proceorn kriver Kvittera avbrott vid STAA IrqVippa MOP fo 3 43 Avbrottrutin Öka Var2 RTI LDAA $DC0 Lä tatu STAA $DC2 Nolla vippa STAA $DC3 Nolla vippa 2 MOP fo 3 44
Avbrott - Sammanfattning Begrepp: Avbrottingång på proceorn (Interrupt) I-flagga i CC-regitret (Makera avbrott, brandvägg) Avbrottvektor Save Statu Avbrottrutin Återhopp från avbrottrutin Retore Statu Avbrottvippa Kvittera avbrott (Startadre för avbrottrutin) (Placera alla reg på tacken) ( ubrutin avlutad med RTI) (RTI) (Återhämta alla reg från tack) (Nolltälla avbrottvippa) MOP fo 3 45 Avbrott - Sammanfattning. OM I-flaggan=0: Proceorn känner att är aktiverad och lutför utförandet av pågående intruktion. 2. Proceorn parar huvudprogrammet återhoppadre och övriga regiterinnehåll på tacken, ave tatu. Därefter läer proceorn tartadreen för avbrottrutinen från -vektorn (från adre $FFF2 och $FFF3). Denna tartadre placera i PC. I-flaggan ETT-täll 2 3. Avbrottrutinen tarta (med I-flaggan=). Kvittera avbrott. 5 4. Avbrottrutinen avluta med intruktionen RTI om får proceorn att utföra retore tatu, 6 dv regiterinnehållen återtäll från tacken (med gamla I=0). 5. Återhopp till huvudprogram. 6. Därmed återtarta huvudprogrammet där det blev avbrutet MOP fo 3 46 3 4 Huvudprogram Avbrott - PrinterPort S 34 Avbrottdriven Printerport Avbrottignal Avbrottrutin om kriver ut ett tecken Adr: TextP A H Pekare till A L näta tecken Text H e j Adre avkodning "" D C R Q Q READY MC2- ytem READY DAV Skrivarbu Skrivare D u ASCIIkoder K för texta träng l l e! EOT Slutmarkeing A A 0 R/W MC2- ytem READY DAV Skrivarbu Skrivare MOP fo 3 47 MOP fo 3 48 2
CS_Printer A A 0 R/W Proceorn databu Anlutning mot proceorn Avbrottdriven Printerport v5.0 Adre avkodning CS_Ctrl CP b 0 Regier () C "" D R C Q Q CS_Stat CS_Pri CP b Regier (8) C READY Skrivarbu DAV MOP fo 3 49 Printer Interface Anlutning mot krivaren Avbrottdriven Printerport * Initiering tart CLR count CLR TextP * Initiera avbrottvektor LDX #IrqRut STX $FFF2 CLI * Sätt om avbrottmaken * HUVUDPROGRAM - Simulera 'nyttigt arbete' Loop LDAB count ADDB # STAB count STAB OutPort NOP NOP BRA Loop S 35 MOP fo 3 50 Avbrottdriven Printerport * Avbrottrutin IrqRut LDX #Text Pekare LDAB TextP Räknare ABX (X+B->X) LDAA,X CMPA #EOT BEQ Stop Stop ADDB # Öka räknare STAB TextP STAA PRINTER LDAA #2 STAA PCONTROL ätt DAV CLR PCONTROL nolltäll DAV RTI Text FCS "Hej Du Kalle!" FCB EOT count RMB räknarvariabel MOP fo 3 5 S 35 CS_Printer A A 0 R/W Proceorn databu Anlutning mot proceorn Avbrottdriven Printerport v6.0 36 Adre avkodning CS_Ctrl CP b b 0 Regier () C "" D R C CS_Stat CS_Pri CP Q Q > b 2 Regier (8) C READY Skrivarbu DAV Anlutning mot krivaren MOP fo 3 52 3
I DAG fo 6 Mera avbrott Avbrott - En enhet Olika typer av avbrott Flera avbrottingångar Vektoravbrott Mjukvaruavbrott DMA Proceor adrebu I/O-interface Adre $Q $Q+ Minnet Startadre för avbrottrutin databu MOP fo 4 53 MOP fo 4 54 Avbrott - Fler enheter Avbrott - Fler enheter -Avbrotthanterare Adre $Q Minnet Startadre för Avbrottignal $Q+ avbrottrutin Källa Adre $Q Källa 2 Källa 3 2 3 Minnet Startadre för & Proceor avbrottingång, aktiv låg CPU Grännitt A mot eriell anlutning Proceorn Grännitt B mot parallell anlutning buar Grännitt C mot A/D anlutning Minne Avbrott hanterare från A? Nej från B? Nej Betjäna enhet C Ja Ja Avbrott rutin C Avbrott rutin A Betjäna enhet A Avbrott rutin B Betjäna enhet B $Q+ avbrottrutin MOP fo 4 55 RTE MOP fo 4 56 4
INTA In S Out YE Vektor nr In Databu Vektor- Avbrott S Out YE2 Vektor nr In S Out YE3 Vektor nr Vektor nr 0 (Adre i) Vektor nr (Adre i+p) Vektor nr max (Adre i+max) Avbrott Startadre för avbrottrutin 0 Startadre för avbrottrutin Startadre för avbrottrutin max MOP fo 4 57 VektorAvbrott Proceor INTA 4 7 PC Yttre enhet Minne Adre 2 INTA Startadre för Vektor Reg avbrottrutin p Vektor q Startadre för (Vektor q) 6 avbrottrutin q Databu 3 Startadre för avbrottrutin r 5 Adrebu MOP fo 4 58 Avbrott Flera Avbrottingångar Olika prioriteter 3 2 CPU Avbrottignaler Proceorn Adre X Adre Y Adre Z buar Seriell Parallell Analog anlutning anlutning anlutning A B C Startadre för avbrottrutin Startadre för avbrottrutin 2 2 Startadre för avbrottrutin 3 3 Minne MOP fo 4 59 3 2 CPU Huvudprogram 6 Avbrottignaler Avbrottrutin för Avbrottrutin för 2 Avbrottrutin för 3 2 2 3 3 5 RT E Proceorn RT E buar Seriell Parallell Analog anlutning anlutning anlutning A B C 4 Minne Avbrott Adr 0 Statu och återhoppadre för avbrottrutin 2 Statu och återhoppadre för avbrottrutin Statu och återhoppadre för huvudprogrammet RT E Adr max MOP fo 4 60 5
Avbrott Interna ignaler för detekterig av olika feltilltånd Externa avbrottignaler Avbrott med HC2 STYRENHET Intruktion Regiter Statu Regiter Avbrottlogik Styrbu RESET 0 avbrotthantering för RESET Adre i i+ Minnet Startadre för avbrottrutin Datadel D0..D7 ALU DATAVÄG Adredel A0..A7 och PC Adrebu X 0 I avbrotthantering för X avbrotthantering för i+2 i+3 i+4 i+5 Startadre för avbrottrutin Startadre för avbrottrutin Databu 0 MOP Proceorn fo 4 externa buar 6 etc MOP fo 4 62 Avbrott med HC2 S Avbrott med 6809 Adre (hex) FFFE FFFC FFFA FFF8 FFF6 FFF4 FFF2 FF00-FFF0 Funktion RESET, Startvektor Clock Monitor Fail, (ej impl i imulator) COP Watchdog Timeout, (ej impl i imulator) Illegal Op Code (ej impl i imulator) SWI X Enhetpecifika vektorer, kiljer ig något beroende på de olika varianterna Se Appendix D MOP fo 4 63 RESET(Reet) (Interrupt Requet) F (Fat Interrupt Requet) NMI (Non Makable Interrupt Requet) HALT (Halt) VSS 40 HALT NMI 2 39 XTAL 3 38 EXTAL F 4 37 RESET BS 5 36 MRDY BA 6 35 Q VCC 7 34 E A0 8 33 DMA/BREQ A 9 32 R/W A2 0 3 D0 MOP fo 4 64 6
NMI 0 Avbrott med MC6809 Minnet avbrotthantering för NMI Adre i Startadre för i+ avbrottrutin Avbrott MC68000 Exception Interna Bu Error RESET Avbrott TRAP F F 0 I avbrotthantering för F avbrotthantering för i+2 i+3 i+4 i+5 Startadre för avbrottrutin Startadre för avbrottrutin Feltilltånd Vektor avbrott Autovektor avbrott 0 Programmerade / externa händeler MOP fo 4 65 MOP fo 4 66 Avbrott MC68000 Vektor nr Adre 5 0 0 $0 High Word Stackpekare Low Word 2 $4 $8 High Word Low Word High Word Low Word Reetvektor Bu Error Avbrott MC68000 Externa avbrottingångar i ytemet yttre enheter 5 $4 High Word Low Word Diviion med noll NORMAL EXCEPT ION RESET HALTED 25 $64 High Word Low Word High Word Low Word 64 $00 High Word Low Word High Word Low Word Autovektor Avbrottnivå Autovektor Avbrottnivå 2 Vektoravbrott vektor 0 Vektoravbrott vektor IPL2 IPL IPL0 Avbrott nivå 0 0 0 7 0 0 6 0 0 5 0 4 0 0 3 0 2 0 Ingen avbrottbegäran 255 $3fc High Word Vektoravbrott vektor 9 MOP fo 4 Low Word 67 MOP fo 4 68 7
VID AVBROTT: Skrivaren betämmer när: Printchar SWI - Software Interrupt Skriv ett tecken DMA Direct Memory Acce Proceorn är BUS MASTER Adr Bu Proceor Datorytem Avbrott (Redo) Här är data Yttre enhet CPU2 DMAenhet ExVi DISK Minne VID Software Interrupt: Programmeraren (DU) betämmer med intruktionen SWI när rutinen Printchar kall anropa MOP fo 4 69 R/W Data Bu MOP fo 4 70 DMA Direct Memory Acce DMA:n är BUS MASTER I DAG fo 7 Adr Bu CPU2 DMAenhet ExVi DISK R/W Minne Parameteröverföring I regiter Global Variabel Via Stack Aktiveringpot / Rampekare Procebyte Data Bu MOP fo 4 7 MOP fo 7 72 8
SubRutin SubRutin Huvud Prog Huvud Prog SubRutin Huvud Prog INDATA Parameteröverföring SUBRUTIN om utför någon uppgift UTDATA Parameteröverföring kan ke på tre olika ätt: i regiter i globala variabler via tacken Div2 Parameteröverföring via regiter LDD AdrP P H A och P L B JSR Div2 STD AdrP PSH ASRA RORB PUL RTS Skifta P H Rotera P L S före ubrut MOP fo 7 73 MOP fo 7 74 Parameteröverföring via global variabel LDX AdrQ Q P STX AdrP JSR Div2 LDX AdrP P Q STX AdrQ Parameteröverföring via tacken LDX AdrP P X PSHX JSR Div2 PULX STX AdrP X P Div2 PSHD Spara regiter LDD AdrP Hämta Inparamertar Div2 PSHD LDAA 4,SP Hämta Inparamertar High Byte LDAB 5,SP Hämta Inparamertar Low Byte ASRA RORB Skifta D H Rotera D L STD AdrP Lämna utparamertar PULD Hämta tillbaka RTS S före ubrut MOP fo 7 75 ASRA RORB Skifta D H Rotera D L STD 4,SP Lämna utparamertar PULD RTS S före ubrut MOP fo 7 76 9
SubRutin SubRutin Huvud Prog Huvud Prog SubRutin SubRutin Huvud Prog Huvud Prog Parameteröverföring via tacken LDX AdrP P X PSHX JSR Div2 PULX STX AdrP X P Parameteröverföring med pekare (här överförd i regiter) LDX #AdrP Adreen till P JSR Div2 InPar EQU 4 UtPar EQU 4 Div2 PSHD LDD InPar,SP Hämta Inparamertar ASRA RORB Skifta D H Rotera D L STD UtPar,SP Lämna utparamertar PULD RTS S före ubrut MOP fo 7 77 Div2 PSHD LDD,X Hämta Inparamertar ASRA RORB Skifta D H Rotera D L STD,X Lämna utparamertar PULD RTS S före ubrut MOP fo 7 78 Div2 Parameteröverföring med pekare (här överförd via tack) LDD #AdrP Adreen till P PSHD JSR Div2 LEAS 2,SP Städa Stack PSHD LDD [4,SP] Hämta Inparamertar ASRA RORB Skifta D H Rotera D L STD [4,SP] Lämna utparamertar PULD RTS S före ubrut MOP fo 7 79 Parameteröverföring med pekare (här överförd i regiter) LDX #AdrP Adreen till P JSR Div2 Div2 ASR,X Skifta P H ROR,X Skifta P L RTS Adr P P H P L MOP fo 7 80 Variabel om kall dividera med 2 20
Funktioner parametrar och returvärden. Funktioner parametrar och returvärden. MOP fo 7 8 MOP fo 7 82 Variabler i en ubrutin Åtkomt av variabler Minnereitenta variabler (var rmb?? Def variabel i minnet) Dynamika variabler - på tacken ( lea -n,p Skapa plat på tacken) Aktiveringpot Rampekare Par equ??? Def of på tack Par2 equ??? Def of på tack LokV equ??? Def of på tack LokV2 equ??? Def of på tack Kont equ??? Def kont En typik ubrutin SubRut lea n,p Skapa plat för lokala variabler pha/b/x Spara undan nödvändiga regiter ldx Par,p Hämta inparametrar ldaa Par2,p clr LokV,p Initiera Lokala Variabler movw #Kont,LokV2,p --- LÖS UPPGIFTEN --- MOP fo 7 83 td Par,p Lämna utparametrar pula/b/x Återhämta regiter lea n,p Återtäll tacken rt MOP fo 7 84 2
Par equ??? Def of på tack Par2 equ??? etc En typik ubrutin med Rampekare SubRut phy Spara förra rampekare tfr p,y Sätt ny rampekare lea n,p Skapa plat för lokala variabler pha/b/x Spara undan nödvändiga regiter ldaa Par2,y ldx Par,y Hämta inparametrar clr LokV,y Initiera Lokala Variabler movw #Kont,LokV2,y --- --- LÖS UPPGIFTEN td Par,y Lämna utparametrar pula/b/x Återhämta regiter tfr y,p Återtäll tacken puly Hämta gamla rampekaren rt MOP fo 7 85 Stack för ubrutin med Rampekare Par equ 4 Def of In/Utparameter 6-bit Par2 equ 6 Def of Inparameter 8-bit LokV equ -3 Def of Lokal Var 8-bit LokV2 equ -2 Def of Lok Var 6-bit Rampekare för SubRut Aktiveringpot för SubRut Aktiveringpot för den rutin om anropade SubRut Reg S Reg Y -3,Y -2,Y -,Y,Y 2,Y 3,Y 4,Y 5,Y 6,Y A B X H X L LokV LokV2 H LokV2 L Y H Y L PC H PC L Par H Par L Par2 Sparade reg (PSH) Lokala Variabler (LEAS) Förra Rampekare (TFR S,Y) PC In/Utparametrar Till/från SubRut Y H MOP fo 7 Y L 86 Procebyte PROC 4 PROC 3 PROC 2 PROC INIT SWITCH T=0 En proceor flera program kör i turordning (peudoparallellt) En avbrottrutin (SWITCH) om växlar proce 2,5 m 2,5m 2,5m μ μ μ RUNNING RUNNING READY READY READY RUNNING RTI RTI RTI t MOP fo 7 87 Procebyte En proceor flera program kör i turordning (peudoparallellt) HDW krav: En avbrottkälla om ger regelbundna avbrott (Ex Timer) SW krav: Pulgenerator 400 Hz En avbrottrutin (SWITCH) om växlar proce CS vid krivning D C R Q' Adre $2000 $200 $2200 $2300 $2400 $2500 Init Variabler Kod P Data o tack P Kod P2 Data o Stack P2 Kod P3 Data o Stack P3 Kod P4 Data o Stack P4 Proce Proce 2 Proce 3 Proce 4 Ledigt Till proceorn $FFFF MOP fo 7 88 22
Adre $2000 $200 $2200 $2300 $2400 $2500 Init Variabler Kod P Data o tack P Kod P2 Data o Stack P2 Kod P3 Data o Stack P3 Kod P4 Data o Stack P4 Procebyte Proce Proce 2 Proce 3 Proce 4 Adre Proctab ProcNR P AH P AL P2 AH P2 AL P3 AH P3 AL P4 AH P4 AL [0,3] Stackpekare Proce Stackpekare Proce 2 Stackpekare Proce 3 Stackpekare Proce 4 Procenummer om kör NU Adre $2000 $200 $2200 $2300 $2400 $2500 Init Variabler Kod P Data o tack P Kod P2 Data o Stack P2 Kod P3 Data o Stack P3 Kod P4 Data o Stack P4 Procebyte Proce Proce 2 Proce 3 Proce 4 Adre SPProc SPProc2 SPProc3 SPProc4 ProcNR P AH P AL P2 AH P2 AL P3 AH P3 AL P4 AH P4 AL [0,3] Stackpekare Proce Stackpekare Proce 2 Stackpekare Proce 3 Stackpekare Proce 4 Procenummer om kör NU Ledigt Ledigt $FFFF MOP fo 7 89 $FFFF MOP fo 7 90 Adre $2000 Init Stack Proce Adre $2000 Init Stack Proce 3 $200 $2200 $2300 $2400 $2500 Variabler Kod P Data o tack P Kod P2 Data o Stack P2 Kod P3 Data o Stack P3 Kod P4 Data o Stack P4 Ledigt $2F7 $2200 C B A X H X L Y H Y L PC H PC L 0,X,X 2,X 3,X 5,X 7,X REG X $200 $2200 $2300 $2400 $2500 Variabler Main Data o tack P Main2 Data o Stack P2 Main3 Data o Stack P3 Main4 Data o Stack P4 Ledigt $23F7 $2400 C B A X H X L Y H Y L PC H PC L %000000???????????? Adr Main3 $FFFF MOP fo 7 9 $FFFF MOP fo 7 92 23
Lab 3 2 proceer Borr o Diplay Adr 0000 2000 2500 3000 4000 FFFF HC2 Reg IO-Portar INIT SWITCH BORR Dataarea B DISPLAY Dataarea D Ledigt RWM ROM (DBG2 Monitor) Avbrott -ignal BORR BORR SWITCH SWITCH DISPLAY DISPLA Y MOP fo 7 93 Avbrott -ignal Lab 3 2 proceer avbrottkälla BORR DISPLAY SWITCH Huvudprogram Avbrottrutin Avbrottignal Pulgenerator 400 Hz CS vid krivning D 2,5 m 2,5m 2,5m RTI C R MOP fo 7 94 Q' Till proceorn Adr Lab 3 0000 2 proceer 2 Stackar 2000 2 Stackpekare INIT CC B A X H X L Y H Y L PC H PC L 2500 3000 4000 FFFF HC2 Reg IO-Portar SWITCH BORR Dataarea B DISPLAY Dataarea D Ledigt RWM ROM (DBG2 Monitor) Reg S CC B A X H X L Y H Y L PC H PC L Lab 3 RTI- förta gången INIT BORR DISPLAY SWITCH t=0 2,5 m CC om DISPLAY läer in måte ha in I-flagga nolltälld för att kunna bli avbrutet av ett interrupt Återhoppadreen måte vara DISPLAY tartadre $???? BOS CC B A X H X L Y H Y L PC H PC L (Den ena tackpekaren) StackPek rmb 2 (Den andra tackpekaren) MOP fo 7 95 MOP fo 7 96 24