From 5b308be891304cb9ed5a1f67836ed2c7adeb08e7 Mon Sep 17 00:00:00 2001 From: acheronfail Date: Tue, 16 Oct 2018 00:06:43 +1000 Subject: [PATCH] add screenshots and gif of hardware timer --- .../posts/08-hardware-interrupts/index.md | 8 ++++---- .../qemu-hardware-timer-dots.gif | Bin 0 -> 10563 bytes .../qemu-hardware-timer-double-fault.png | Bin 0 -> 5906 bytes .../qemu-single-dot-printed.png | Bin 0 -> 3014 bytes src/main.rs | 1 - 5 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-dots.gif create mode 100644 blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-double-fault.png create mode 100644 blog/content/second-edition/posts/08-hardware-interrupts/qemu-single-dot-printed.png diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/index.md b/blog/content/second-edition/posts/08-hardware-interrupts/index.md index 69007908..08d4f1a7 100644 --- a/blog/content/second-edition/posts/08-hardware-interrupts/index.md +++ b/blog/content/second-edition/posts/08-hardware-interrupts/index.md @@ -102,7 +102,7 @@ pub mod interrupts; // in src/interrupts.rs -use pic8259::ChainedPics; +use pic8259_simple::ChainedPics; use spin; pub const PIC_1_OFFSET: u8 = 32; @@ -165,7 +165,7 @@ pub extern "C" fn _start() -> ! { The `interrupts::enable` function of the `x86_64` crate executes the special `sti` instruction (“set interrupts”) to enable external interrupts. When we try `bootimage run` now, we see that a double fault occurs: -TODO screenshot +![QEMU printing `EXCEPTION: DOUBLE FAULT` because of hardware timer](qemu-hardware-timer-double-fault.png) The reason for this double fault is that the hardware timer (the [Intel 8253] to be exact) is enabled by default, so we start receiving timer interrupts as soon as we enable interrupts. Since we didn't define a handler function for it yet, our double fault handler is invoked. @@ -208,7 +208,7 @@ We introduce a `TIMER_INTERRUPT_ID` constant to keep things organized. Our `time In our timer interrupt handler, we print a dot to the screen. As the timer interrupt happens periodically, we would expect to see a dot appearing on each timer tick. However, when we run it we see that only a single dot is printed: -TODO screenshot +![QEMU printing only a single dot for hardware timer](qemu-single-dot-printed.png) ### End of Interrupt @@ -233,7 +233,7 @@ We need to be careful to use the correct interrupt vector number, otherwise we c When we now execute `bootimage run` we see dots periodically appearing on the screen: -TODO screenshot gif +![QEMU printing consequtive dots showing the hardware timer](qemu-hardware-timer-dots.gif) ### Configuring The Timer diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-dots.gif b/blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-dots.gif new file mode 100644 index 0000000000000000000000000000000000000000..8ea34202ac9bc0b1408fe6c147ce527610529e3e GIT binary patch literal 10563 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 ay0CYHz`C$^gTT75cY~Nf6JD6zAZq|nBMj33 literal 0 HcmV?d00001 diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-double-fault.png b/blog/content/second-edition/posts/08-hardware-interrupts/qemu-hardware-timer-double-fault.png new file mode 100644 index 0000000000000000000000000000000000000000..7d02b13ad15e0be4bac18f680a4d26f57819c290 GIT binary patch literal 5906 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 literal 0 HcmV?d00001 diff --git a/blog/content/second-edition/posts/08-hardware-interrupts/qemu-single-dot-printed.png b/blog/content/second-edition/posts/08-hardware-interrupts/qemu-single-dot-printed.png new file mode 100644 index 0000000000000000000000000000000000000000..cfdc06cc9812fc6138920a04487bc163111392c0 GIT binary patch literal 3014 zcmeAS@N?(olHy`uVBq!ia0y~yV7kD-z_^uziGhJ3{z=Gw1_lP^VkgfK4i1jn5B(o7 zFfa&|xJHx&=ckpFCl;kL1ZR|%l%y6VH(lUlVBk*jba4!+xb^mKWzUqSvg{wy)A*+y zzT0|W(FUiVh(m45vi%f(eSC+NoB>hF8>SU*;C?_YHspHL+91y?MpT)2Hw9Q;2J36`ihkyMNzE#Xwt?#ckWd9`ITPXws&{= z^XE^WmS}2NEM2jq-1GjeTg<$@y^Giw3T7sxA*t&uMU6D%+B{@&b9p}V&?-z7#1k22zAb>(3y9C>48)ch6T+ofm7z+ zSC#8NeuatQg~i4S8@Z+fj0`0OPYP^V8D0bgic}sDXSnc?g^$7E0Rw~8{utGU$zgSI z_e{gMZeLVZ$$8*x__3nSUczkmHoM};sk6QBY7G1vL+AUxG?x(nj zJPY50B>^!pTYfxbeVUqj_3BmmHGem3so(E?Jk}`f%nHlm=X-y@|Gy;c_V)b$`|s77 zo9--o`|HZ{Zas<5NAl<0+Etoe^y$@VwN+XQ1q|&oe(gQ^G&R+`?*H-S(`@E?s3dK? zu{2qK=jU&d<^K|nnNH4Mv3j-lx@~JWeVSMOKKtKS+v;y$UR+Fm)S@l_`=`D$M>?OJ z$)hFEVUTYTK}@ztmA_v-7<-Kn%Lf5)XLA}V%ncJ=uWiO$DsN^{zDB@Q#H zFOIXV?vpn!JABO7|KGRrP8X#X0oRM&`ug=hr;0A0TlQ+kMdjN$3wNdco}IsTXU?A; zhYkfhafHX47QVl?S37*~vTX%Uzn)w^>wMm>`r~2luI}!x?k>5=9SJ`+ER5FDGRi+F z$!8%sbt-Sq(WLzSpU>4U2u#zf zE<3YgVt7p5%~e;|_eJqlfmj8C23o_DwE z_!~%IT??N5BX zj59p$;{N*o0*5xG&;NbwX?%FJg<@!E=>4+aYf_$ZDCVqQGpF!4f3Wio7QO|kC!+)X z-bPQFWn6JV^6&4dZh=ZI0kN@@XZ=69eD?a;MakX0E`eK0ZpOcxSNnWvvVPpotkTrb zs|US>J6+=LDgHnFRy?>0Vp{%hB-UAumj)!vohvyjZaw@0%nR7dDXXU#&H^Y5@m2o8AZR?fXwmIvo^zHID9EyKlo^_`?so5& z`FZR0`g%DLK3S7r2XB>nPq(cuux7W{c$45g@898{&ugDfo4u@0y87e0yVd(lQVOoG zi=AKp@TgjNT!UZYhXuxFdA};Iz1clU-E{f+Ia@y*WM`}081sPPR>0=k-&5Y-ulc+6 zzN}%*jSUN(x98vgcpwn6#yfRZaVIKkw$x33blbtv=-Y`D-Qf=}})$qK+ zzb4(cR{vDnnytL~#t)yew;#T9Gx*7UJnW^twtUy|`uaI_+|kjqxRh4%GdLV)<6~&> zd9p12&J&A&9wE6^9-Zg;Pqxm##zfktVpHt? zsdXK0S^ErS7$)qzBj(Q|Gr#@!&E9J{*MG6KFgdWZ^(kLXl;57h!C7S+KFgrSqkFK1TK}m4gbYve6z>od@^t5dc)2PhLWs}X4czutoEqM7PRGV z`?>bZeo>X6^{+HE^l=I-0F^yI0N z-w&wnpIX_>aN*^VsSA`hd3^pXmiejW`gtaWf`TcRJgbe}vlZDGtjZr)1o9u*e0%-j z^~VnCrcAV)BhI+MST ! { blog_os::gdt::init(); init_idt(); - unsafe { PICS.lock().initialize() }; x86_64::instructions::interrupts::enable();