From d7f3c20324e436d766ccf9bedf0dfcd2fedd1276 Mon Sep 17 00:00:00 2001 From: iDunnoDev Date: Sat, 5 Nov 2022 11:21:06 +0000 Subject: [PATCH] Added comments to the source code for stage 1 Changed the parameters for the function to load into registers Changed all the data types to words instead of int in case ints are not allowed --- stage1/bootasm2.S | 187 ++++++++++++++++++++++++++------------------ stage1/bootasm2.o | Bin 3544 -> 3344 bytes stage1/bootblock2 | Bin 559 -> 516 bytes stage1/bootblock2.o | Bin 2696 -> 2696 bytes stage1/xv6.img | Bin 5120000 -> 5120000 bytes 5 files changed, 112 insertions(+), 75 deletions(-) diff --git a/stage1/bootasm2.S b/stage1/bootasm2.S index bac0b9c..b9922a5 100644 --- a/stage1/bootasm2.S +++ b/stage1/bootasm2.S @@ -38,6 +38,8 @@ cons_writeline: call cons_write_crlf ret +# Added Write Hex and Int functions to help with debugging + HexChars: .ascii "0123456789ABCDEF" cons_write_hex: @@ -84,72 +86,78 @@ getdigit: IntBuffer: .string " " cons_draw_line: - movw $0, err - movw x1, %cx - movw y1, %dx - sub x0, %cx + movw $0, err # Make sure that err starts at 0 + movw %ax, (x0) # Move the initial vars from the registers to static memory + movb %cl, (y0) + movw %bx, (x1) + movb %ch, (y1) + movb %dl, (color) + + movw x1, %cx # Load x1 and y1 into the registers + movw y1, %dx + sub x0, %cx # Remove x/y0 from x/y1 to get the delta values sub y0, %dx - movw %cx, (deltax) + movw %cx, (deltax) # Store the delta values movw %dx, (deltay) cons_line_check_x: - movw x0, %cx - movw $1, (sx) - cmp x1, %cx + movw x0, %cx # Load x0 into register cx so we can manipulate this value to plot each pixel + movw $1, (sx) # Preload x slope with 1 + cmp x1, %cx # Check if x1 is less than x0 and we can move to y jl cons_line_check_y - negw sx + negw sx # if x1 is greater than we need to flip the slope and the x delta values negw deltax cons_line_check_y: - movw y0, %dx - movw $1, (sy) - cmpw y1, %dx + movw y0, %dx # Load y0 into register dx so we can manipulate this value to plot each pixel + movw $1, (sy) # Preload y slope with 1 + cmpw y1, %dx # Check if y1 is less than y0 and we can start our plotting jl cons_line_prep_loop - negw sy + negw sy # if y1 is greater than we need to flip the slope y and delta y values negw deltay cons_line_prep_loop: - movw deltax, %ax + movw deltax, %ax # Calculate the err variable by subtracting delta y from delta x sub deltay, %ax - movw %ax, (err) + movw %ax, (err) cons_line_loop_start: - xor %ax, %ax + xor %ax, %ax # Clear ax and bx for use with the draw function xor %bx, %bx - movb $0x0c, %ah - movb $0, %bh - movb (color), %al - int $0x10 + movb $0x0c, %ah # Set the function byte to plot the pixel + movb $0, %bh # Set the video page number + movb (color), %al # Set the color of the pixel + int $0x10 # Call the int - cmpw x1, %cx + cmpw x1, %cx # Check if x0 and x1 are equal, if not then we are still plotting jne cons_line_loop_next_point - cmpw y1, %dx + cmpw y1, %dx # Check if y0 and y1 are equal, if not then we are still plotting jne cons_line_loop_next_point - jmp cons_line_loop_end + jmp cons_line_loop_end # if both x's and y's are equal then we can end the function cons_line_loop_next_point: - movw err, %ax - add %ax, %ax + movw err, %ax # Load err into ax so that we can multiply it + add %ax, %ax # e2 is 2 * err, so we can just add err to itself cons_line_loop_move_y_point: movw deltay, %bx - negw %bx - cmpw %bx, %ax + negw %bx # We need negative deltay to compare + cmpw %bx, %ax # Check if we need to apply the slope value to y jle cons_line_loop_move_x_point - negw %bx - subw %bx, err - addw sx, %cx + negw %bx # Change deltay back to normal + subw %bx, err # Remove the deltay from the err check + addw sx, %cx # Add the slope value to the current y value cons_line_loop_move_x_point: movw deltax, %bx - cmpw %bx, %ax + cmpw %bx, %ax # Check if we need to apply the x slope value jge cons_line_loop_start - addw %bx, err - addw sy, %dx - jmp cons_line_loop_start + addw %bx, err # Add the deltax to the err value + addw sy, %dx # Add the slope value to the current x value + jmp cons_line_loop_start # Go back to the start of the loop cons_line_loop_end: - ret + ret # Finish the loop and return to the call address real_start: movw $boot_message, %si # Display our boot message @@ -162,46 +170,75 @@ draw_start: int $0x10 xor %ax, %ax - movw $50, x0 - movw $50, y0 - movw $160, x1 - movw $55, y1 - movb $12, color + movw $50, %ax # Plot a line, ax = x0, bx = x1, cl = y0, ch = y1, dl = color + movb $50, %cl # the X values require a full register but the y's only require a byte since the max value is 200 + movw $160, %bx + movb $55, %ch + movb $12, %dl # The Color also only requires a byte call cons_draw_line - movw $150, x0 - movw $150, y0 - movw $50, x1 - movw $50, y1 - movb $10, color + # Draw the rest of the lines + movw $160, %ax + movb $55, %cl + movw $90, %bx + movb $150, %ch + movb $11, %dl call cons_draw_line - movw $150, x0 - movw $150, y0 - movw $160, x1 - movw $55, y1 - movb $11, color + movw $90, %ax + movb $150, %cl + movw $50, %bx + movb $50, %ch + movb $14, %dl call cons_draw_line - movw $10, x0 - movw $10, y0 - movw $310, x1 - movw $190, y1 - movb $9, color + movw $10, %ax + movb $10, %cl + movw $310, %bx + movb $10, %ch + movb $9, %dl call cons_draw_line - movw $310, x0 - movw $190, y0 - movw $10, x1 - movw $95, y1 - movb $8, color + movw $310, %ax + movb $10, %cl + movw $310, %bx + movb $190, %ch + movb $10, %dl call cons_draw_line - movw $10, x0 - movw $95, y0 - movw $10, x1 - movw $10, y1 - movb $7, color + movw $310, %ax + movb $190, %cl + movw $10, %bx + movb $190, %ch + movb $13, %dl + call cons_draw_line + + movw $10, %ax + movb $190, %cl + movw $10, %bx + movb $10, %ch + movb $15, %dl + call cons_draw_line + + movw $75, %ax + movb $150, %cl + movw $250, %bx + movb $110, %ch + movb $1, %dl + call cons_draw_line + + movw $210, %ax + movb $30, %cl + movw $300, %bx + movb $150, %ch + movb $6, %dl + call cons_draw_line + + movw $180, %ax + movb $180, %cl + movw $170, %bx + movb $20, %ch + movb $3, %dl call cons_draw_line endless_loop: # Loop forever more @@ -211,14 +248,14 @@ endless_loop: # Loop forever more boot_message: .string "Boot Loader Stage 2 loaded" -x0: .int 0 -y0: .int 0 -x1: .int 0 -y1: .int 0 -deltax: .int 0 -deltay: .int 0 -sx: .int 0 -sy: .int 0 -err: .int 0 -e2: .int 0 +x0: .word 0 +y0: .word 0 +x1: .word 0 +y1: .word 0 +deltax: .word 0 +deltay: .word 0 +sx: .word 0 +sy: .word 0 +err: .word 0 +e2: .word 0 color: .byte 0 \ No newline at end of file diff --git a/stage1/bootasm2.o b/stage1/bootasm2.o index 7c0db559b865600c31d44193f66a055f400c3864..26319b340d6ad6a442279a6c9b9cc220701493d0 100644 GIT binary patch delta 1390 zcmb7?Ur1zC7{I^p-to`e`O}0twwc4KsmYjk?(C*+G0Cz|+tkzIi_wFn=|k>>qmW?P zZb2>+?8c!jc7qfN!6n+cI(4^+QLr#7DNRt&ih_1;Y#?GXOy*4AxqDph%RcO3=KQ|j z_kH)A!?|~(>e9oPj{5r*u*Pv~eheN2AN&=3uXS{+fB;k5IPTrS3xQo6Z`s3fzbqxZ zyO{9rVbHscK|j^JS-jxSVS;?Acpnj-qK?thY+xU=fh_gzQ2v1D=_#H+pnMJ|vluMS z;Zy;&1#NTA{RK?O(z1^~JX}hxV>m3`4o(&j7ZTK--8`}JhLYWE3KUTG?qh~Ef`&pyqpe0 zDy)0WvVx&NQc1UBO3|IBqhPdRveWX6u9$my?wPa#sf_M1Z{~TorHcN5xt=$oe64>W zbyi37+q|&~$w0apX{TcIM&6i%YA zI&5dZyDHgFE}s=O7PZqi^f&Xk>!eX93%eVN9+d&w*bDADe4d?iH%cEl*^IjZ-()N9 kM*NWFDD{Jr)p{C=4C-uW&w1hxZ8-tnrL!Im+TI%f1Hs-hU;qFB delta 1524 zcmaKrU1(HS5Xa}tCO65s%Vk~LyXmG`VY+6*X>O=KG$%EJ;AtV~K%F@K3 zLG2blO2Z09j~_)8B7RiVU^KyxQbRy7VhEwFXiDmfzHC@fN(&K$=$yL~IUw}Fo!|WD zKXcA<@7b>KSXozvo3O!KpLlUD%zyw)lpe0#osJ?v#&Iy?1~KMX7;`0dIxcp)Va$*o zvLYzp3+mWiJQ<1LWW=RjN%cxyrzu^pqSTf-1BvGysjWc?aS=U_k5a9zuUmh{yU{NklqG5 zI#?_80R!F!CD}hcU)Lnnw6D8@*x>oa**;^w!SJQ$7iHB{ZfaR7wY_3>s3fi8A$J!KimL^caAE zOB5ZtDfuO!hmxS7dr4b{?jtP?eS@@X=sTpthQ3GoBt7{h;4wfNB1XesA+2778?zFDbE@D5aqKC zeUkDCL;phg{Ju{uSI8uEBw=R)Iuh!eqGsRLRIB=}=wf<5o%R8B{lq-T>|!2e{>(hZ z>}FnIUSaBQqW9}(-eL|g^*h)8gFNTMFc(Ide=wgipED;^c}Xa(->@FHn35S}y3CK6 zF=mpf-?*M%%>0tMin*4#j=6!^lxG^g<-&K&9n3wbqCi4#S zE_2vp8Nlycc*1WjkM3ef5aveh|VFwDE=qiq?6?PRamuib0 zEnMIOh^u3Em1tDA?P_e6>X{uCKdKUcwdht!e>EPJ>T7?raF99^>VUtk^qd6Hmt=a; H@!on1lIrAt56ov0IBKFm$f+b^yZY8CV6cp)C=-kC0(ap`)rGt{`T5wj}T-rPm`r1Gc zT4)!SQmEiwUU3i+30BPOi{p3hcg}st-eoht7G@evi2#E+w)6$I%_X+ZR@gGMj;k-x zHCAZpbF>U~(_?HKYjhRA=Qc>-LK%&GY;G_%W92SXzD;x0O7pGC*VvEI%B^uA(H_}T zzwiV-turpB<$7MJO{`~TR$n3+xk`_x)yXZ5rzfUFP2ZrarmK^iHTN?3!S%l5^w2Pk_+k15T)S1fxRgwN1?Lt&fPw|Vp#&5& zb&xKFe1VgU4jF{%{cn(fa6Inb@4a`o-h=0Up3L0wBnD%dl*m+oL~o7zeDw7q)kH|MI@+0GSu~bNS7xyvJJS|tPXSV2J)28ysr|8J7l4T4h z&rG^52fLezsLRtZ#(@lxnd!mq`pu!Yicr10uB(~;-mlnWXVXsef^(d)f(xq>3v&-} z!QOcfE#3bierGwUw5h--aiKf^xanX04IJyQJq-vuKq_(W&4TZ=O0cVuGc)j37?3d diff --git a/stage1/bootblock2.o b/stage1/bootblock2.o index 72cf732cbb0a0d2578f7646772af07d28cb29726..bd00f71d833c321f77e3b117bde6a610d4b24fa1 100644 GIT binary patch delta 1139 zcmb7^T}TvB6vxk1!i@6GO6(!saur;#wxEZV zCGa}nLm(*9iy*X8g z@?%SObMasXK= z%`4R7^ZWf5G*c8RqOg#CYv6b@zA=d+efv#Y$x4s?3TY=tgF&GNo=@0aXUBO^? zFxcDOHz0|@fv%oz3C^{3RGezB@YXjpADA8gaLe0#m0V;gBlU8vZoAvAdYjW-ZNiwF&TO!=YhX#Nz^s>gFr>m>WTA~98TkhqSgSW> z1bPni;FA(TFOm3%B0-cQr4We<1YZ<-m<;NnXhgL7oomD)q07#X^Z9DWjp+s(GyE)vys8Emf#aAMaTNmr zRty-J)ld%!9ajlGgu0(i8!W2&*@Fl(m(8vD@~1ErW9uHVc-SSP!%87K9bsfShw0*0 z+ve@8R@`b1M3_wvupG8-+r0IX2sT2j@chM6VIu#dG!HXX>mGA?RaIFFtg4z-bvA`_ zFFOja)EFzzANeKx`<5@NZl%0fg|FqS_W8Iz`?o<^{!2+T(5wcc>a3NB4VJ71?)*E; z7n+8e@I}hYdMw|SpOe=2NWNzI&O9#_O6}?NQ1Dzj+1ob|>>5g@_%S8Ow_UaTlHwzj z_bb81CwBaDpbSR?4swT7f~TgEcn{e0I=xY^a-jN#&nnT5gE#}LfJ1?CfSOY#t*4Zl zjaVoRClaojgqfg;vjXCYIEry`0*IJCHd3s`l$eR~gqXE^an zyojtyyo9Vtyn<{3W54j-mByzpP50Q5zo<%+^9bf^O{$USp zxbhEo+EIw}jQUnHA!EYLIAr4dva{EAJv}hD=sZvG3RbwoWR#okCh~}PV_oNW-A#@i Z{Nvc*kKJL%j7{|TfU|9!HSnMA+;2lS1>gVx diff --git a/stage1/xv6.img b/stage1/xv6.img index df182a2f14dc943df8ef839b27ab9d1595d1f1dc..2e6f2e00388473b79e18fc67f0a01efef026725e 100644 GIT binary patch delta 679 zcmW;F%}>-o7zXf}7T2XLWp%NjVpaUaBHF6EuBiC^g?jVCAK{G~3W*1o^z>rFc?ma8 zbg~WACYwz((F+%2BFSDnnMpVhLN?91+195Ve#t!VJoC;%BTyD#oh#h>q$qRq2{E?1 zLlu3O7R^1XOth$Cs7tQCN3PK#OWz^Oz?~k^qR}Q7`Fo~AoK2!JmyOI0MP`KVF6P~I zj#ufti+P(?BC;}VT207q*v(pQgH_d~&3yWJHjC;!%_`g0NHNTko}~Ic6rL z>K$^iy1e!78&9**rR^_Y>%U0KxW?8Cn|ZqtILvdxD)UPsC+#GtGOrZQFn?L}$;@~Iq%y69Jr;Pj@2Q}u^!Zqd(3RSLskm^UNa!?>W_rL+jz(L4DFKEyQ zIp_x+1|ScI;4lODd3{T)GJcH-(0;b_5yxNfJ K>){dlGxQ(ej50g` delta 699 zcmZY2&rTCj6vy$IsSM>(FLf$oDL87?Q5>ii5UBVc|NnahUcfCo6cQJN%!)(88sZC( zNP=-enn3J|MZ<=qFEB}$F1j!QzIPUe#Kq@i?)jZ_W~u(uS;Cg>*u^!+Sy&9kvSO_z z_C1NTE0M2cMfG>a>P~P%=7@nA5eRFZ;H6`(