Final changes and tweaks before submission

This commit is contained in:
iDunnoDev
2022-11-25 11:19:26 +00:00
committed by iDunnoDev
parent 4d5dd089f6
commit 75183113f4
25 changed files with 100 additions and 220 deletions

View File

@ -38,52 +38,6 @@ cons_writeline:
call cons_write_crlf call cons_write_crlf
ret ret
# Added Write Hex and Int functions to help with debugging
HexChars: .ascii "0123456789ABCDEF"
cons_write_hex:
movw $4, %cx
movb $0x0E, %ah
hexloop:
rol $4, %bx
movw %bx, %si
and $0x000F, %si
movb HexChars(%si), %al
int $0x10
loop hexloop
ret
cons_write_int:
movw $IntBuffer + 4, %si
movw %bx, %ax
cmpw $0, %ax
jge getdigit
xor %ax, %ax # Added to handle signed numbers, it adds the minus and then neg's the number
movb $0x0E, %ah
movb $0x2D, %al
int $0x10
movw %bx, %ax
negw %ax
getdigit:
xor %dx, %dx
movw $10, %cx
idiv %cx
addb $48, %dl
movb %dl, (%si)
dec %si
cmp $0, %ax
jne getdigit
inc %si
call cons_write
ret
IntBuffer: .string " "
# Draw Line function # Draw Line function
cons_draw_line: cons_draw_line:
movw $0, err # Make sure that err starts at 0 movw $0, err # Make sure that err starts at 0
@ -249,7 +203,7 @@ endless_loop: # Loop forever more
boot_message: boot_message:
.string "Boot Loader Stage 2 loaded" .string "Boot Loader Stage 2 loaded"
x0: .word 0 x0: .word 0 # Setup the static memory to hold our variables
y0: .word 0 y0: .word 0
x1: .word 0 x1: .word 0
y1: .word 0 y1: .word 0

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
stage1/xv6.img (Stored with Git LFS)

Binary file not shown.

View File

@ -38,53 +38,7 @@ cons_writeline:
call cons_write_crlf call cons_write_crlf
ret ret
# Added Write Hex and Int functions to help with debugging # Draw Line function DrawLine(int x0 (4), int y0 (6), int x1 (8), int y1 (10), short color (12))
HexChars: .ascii "0123456789ABCDEF"
cons_write_hex:
movw $4, %cx
movb $0x0E, %ah
hexloop:
rol $4, %bx
movw %bx, %si
and $0x000F, %si
movb HexChars(%si), %al
int $0x10
loop hexloop
ret
cons_write_int:
movw $IntBuffer + 4, %si
movw %bx, %ax
cmpw $0, %ax
jge getdigit
xor %ax, %ax # Added to handle signed numbers, it adds the minus and then neg's the number
movb $0x0E, %ah
movb $0x2D, %al
int $0x10
movw %bx, %ax
negw %ax
getdigit:
xor %dx, %dx
movw $10, %cx
idiv %cx
addb $48, %dl
movb %dl, (%si)
dec %si
cmp $0, %ax
jne getdigit
inc %si
call cons_write
ret
IntBuffer: .string " "
# Draw Line function DrawLine(x0 (4), y0 (6), x1 (8), y1 (10), color (12))
# Define parameter address positions in stack # Define parameter address positions in stack
#define color 12 #define color 12
#define y1 10 #define y1 10
@ -275,6 +229,43 @@ draw_start:
pushw $180 # x0 pushw $180 # x0
call cons_draw_line call cons_draw_line
#---------------------------
pushw $13 # Color
pushw $160 # y1
pushw $30 # x1
pushw $160 # y0
pushw $20 # x0
call cons_draw_line
pushw $13 # Color
pushw $170 # y1
pushw $30 # x1
pushw $160 # y0
pushw $30 # x0
call cons_draw_line
pushw $13 # Color
pushw $170 # y1
pushw $30 # x1
pushw $170 # y0
pushw $20 # x0
call cons_draw_line
pushw $13 # Color
pushw $180 # y1
pushw $20 # x1
pushw $170 # y0
pushw $20 # x0
call cons_draw_line
pushw $13 # Color
pushw $180 # y1
pushw $30 # x1
pushw $180 # y0
pushw $20 # x0
call cons_draw_line
endless_loop: # Loop forever more endless_loop: # Loop forever more
jmp endless_loop jmp endless_loop

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
stage2/xv6.img (Stored with Git LFS)

Binary file not shown.

View File

@ -38,52 +38,6 @@ cons_writeline:
call cons_write_crlf call cons_write_crlf
ret ret
# Added Write Hex and Int functions to help with debugging
HexChars: .ascii "0123456789ABCDEF"
cons_write_hex:
movw $4, %cx
movb $0x0E, %ah
hexloop:
rol $4, %bx
movw %bx, %si
and $0x000F, %si
movb HexChars(%si), %al
int $0x10
loop hexloop
ret
cons_write_int:
movw $IntBuffer + 4, %si
movw %bx, %ax
cmpw $0, %ax
jge getdigit
xor %ax, %ax # Added to handle signed numbers, it adds the minus and then neg's the number
movb $0x0E, %ah
movb $0x2D, %al
int $0x10
movw %bx, %ax
negw %ax
getdigit:
xor %dx, %dx
movw $10, %cx
idiv %cx
addb $48, %dl
movb %dl, (%si)
dec %si
cmp $0, %ax
jne getdigit
inc %si
call cons_write
ret
IntBuffer: .string " "
# Draw Line function DrawLine(x0 (4), y0 (6), x1 (8), y1 (10), color (12)) # Draw Line function DrawLine(x0 (4), y0 (6), x1 (8), y1 (10), color (12))
# Define parameter address positions in stack # Define parameter address positions in stack
#define color 12 #define color 12
@ -230,9 +184,6 @@ cons_plot_pixel:
mul %dx # does the (y * 320) part of our math mul %dx # does the (y * 320) part of our math
add %cx, %ax # Add the value of x to register ax add %cx, %ax # Add the value of x to register ax
movw %ax, %si # Move the value of ax into the si counter movw %ax, %si # Move the value of ax into the si counter
movw $0xA000, %bx # Set the start of the video memory location
movw %bx, %es # Move that address into the "extra segment" es register
movw pixelcolor(%bp), %bx # Load the color into a register movw pixelcolor(%bp), %bx # Load the color into a register
movb %bl, %es:(%si) # Load the lower half of the color (since they should only be from 0 to 255) movb %bl, %es:(%si) # Load the lower half of the color (since they should only be from 0 to 255)
# and place it at the given byte in the segment # and place it at the given byte in the segment
@ -253,6 +204,9 @@ real_start:
movw $boot_message, %si # Display our boot message movw $boot_message, %si # Display our boot message
call cons_writeline call cons_writeline
movw $0xA000, %bx # Set the start of the video memory location
movw %bx, %es # Move that address into the "extra segment" es register
draw_start: draw_start:
# Set the Video mode to VGA 320 x 200 x 256 # Set the Video mode to VGA 320 x 200 x 256
movb $0, %ah movb $0, %ah
@ -332,6 +286,36 @@ draw_start:
pushw $180 # x0 pushw $180 # x0
call cons_draw_line call cons_draw_line
#---------------------------
pushw $11 # Color
pushw $160 # y1
pushw $30 # x1
pushw $160 # y0
pushw $20 # x0
call cons_draw_line
pushw $11 # Color
pushw $180 # y1
pushw $30 # x1
pushw $160 # y0
pushw $30 # x0
call cons_draw_line
pushw $11 # Color
pushw $170 # y1
pushw $30 # x1
pushw $170 # y0
pushw $20 # x0
call cons_draw_line
pushw $11 # Color
pushw $180 # y1
pushw $30 # x1
pushw $180 # y0
pushw $20 # x0
call cons_draw_line
endless_loop: # Loop forever more endless_loop: # Loop forever more
jmp endless_loop jmp endless_loop
@ -339,7 +323,7 @@ endless_loop: # Loop forever more
boot_message: boot_message:
.string "Boot Loader Stage 2 loaded" .string "Boot Loader Stage 2 loaded"
screen_width: screen_width: # Global variables for the screen height and width
.word 320 .word 320
screen_height: screen_height:
.Word 200 .Word 200

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
stage3/xv6.img (Stored with Git LFS)

Binary file not shown.

View File

@ -38,53 +38,7 @@ cons_writeline:
call cons_write_crlf call cons_write_crlf
ret ret
# Added Write Hex and Int functions to help with debugging # Draw Line function DrawLine(int x0 (4), int y0 (6), int x1 (8), int y1 (10), short color (12))
HexChars: .ascii "0123456789ABCDEF"
cons_write_hex:
movw $4, %cx
movb $0x0E, %ah
hexloop:
rol $4, %bx
movw %bx, %si
and $0x000F, %si
movb HexChars(%si), %al
int $0x10
loop hexloop
ret
cons_write_int:
movw $IntBuffer + 4, %si
movw %bx, %ax
cmpw $0, %ax
jge getdigit
xor %ax, %ax # Added to handle signed numbers, it adds the minus and then neg's the number
movb $0x0E, %ah
movb $0x2D, %al
int $0x10
movw %bx, %ax
negw %ax
getdigit:
xor %dx, %dx
movw $10, %cx
idiv %cx
addb $48, %dl
movb %dl, (%si)
dec %si
cmp $0, %ax
jne getdigit
inc %si
call cons_write
ret
IntBuffer: .string " "
# Draw Line function DrawLine(x0 (4), y0 (6), x1 (8), y1 (10), color (12))
# Define parameter address positions in stack # Define parameter address positions in stack
#define color 12 #define color 12
#define y1 10 #define y1 10
@ -190,7 +144,7 @@ cons_line_loop_end:
# we also tell it to free the 10 bytes in the stack for the paramters # we also tell it to free the 10 bytes in the stack for the paramters
# 5 x Word (2 bytes) # 5 x Word (2 bytes)
# Function PlotPixel(pixelx (4), pixely (6), pixelColor (8)) # Function PlotPixel(int pixelx (4), int pixely (6), short pixelColor (8))
#define pixelcolor 8 #define pixelcolor 8
#define pixely 6 #define pixely 6
#define pixelx 4 #define pixelx 4
@ -230,9 +184,6 @@ cons_plot_pixel:
mul %dx # does the (y * 320) part of our math mul %dx # does the (y * 320) part of our math
add %cx, %ax # Add the value of x to register ax add %cx, %ax # Add the value of x to register ax
movw %ax, %si # Move the value of ax into the si counter movw %ax, %si # Move the value of ax into the si counter
movw $0xA000, %bx # Set the start of the video memory location
movw %bx, %es # Move that address into the "extra segment" es register
movw pixelcolor(%bp), %bx # Load the color into a register movw pixelcolor(%bp), %bx # Load the color into a register
movb %bl, %es:(%si) # Load the lower half of the color (since they should only be from 0 to 255) movb %bl, %es:(%si) # Load the lower half of the color (since they should only be from 0 to 255)
# and place it at the given byte in the segment # and place it at the given byte in the segment
@ -249,7 +200,7 @@ cons_plot_pixel_end:
popw %bp popw %bp
ret $6 # Finish the loop and return to the call address ret $6 # Finish the loop and return to the call address
# Draw Line function DrawFilledRect(rectx (4), recty (6), rectWidth (8), rectHeight (10), rectColor (12)) # Draw Line function DrawFilledRect(int rectx (4), int recty (6), int rectWidth (8), int rectHeight (10), int rectColor (12))
# Define parameter address positions in stack # Define parameter address positions in stack
#define rectcolor 12 #define rectcolor 12
#define rectheight 10 #define rectheight 10
@ -260,8 +211,7 @@ cons_plot_pixel_end:
cons_draw_filled_rect: cons_draw_filled_rect:
pushw %bp pushw %bp
movw %sp, %bp movw %sp, %bp
#subw $4, %sp # Make room for our local variables in the stack
# Store existing register values to the stack so we can restore later # Store existing register values to the stack so we can restore later
pushw %ax pushw %ax
pushw %bx pushw %bx
@ -336,10 +286,7 @@ cons_filled_rect_check_empty:
cmpw $0, rectheight(%bp) cmpw $0, rectheight(%bp)
jle cons_filled_rect_loop_end jle cons_filled_rect_loop_end
cons_filled_rect_setup: cons_filled_rect_setup:
movw $0xA000, %bx # Set the start of the video memory location
movw %bx, %es # Move that address into the "extra segment" es register
movw recty(%bp), %dx movw recty(%bp), %dx
movw (screen_width), %ax # Set ax to 320 so that we can multiply this by y movw (screen_width), %ax # Set ax to 320 so that we can multiply this by y
mul %dx # does the (y * 320) part of our math mul %dx # does the (y * 320) part of our math
@ -537,6 +484,9 @@ real_start:
movw $boot_message, %si # Display our boot message movw $boot_message, %si # Display our boot message
call cons_writeline call cons_writeline
movw $0xA000, %bx # Set the start of the video memory location
movw %bx, %es # Move that address into the "extra segment" es register
draw_start: draw_start:
# Set the Video mode to VGA 320 x 200 x 256 # Set the Video mode to VGA 320 x 200 x 256
movb $0, %ah movb $0, %ah
@ -685,7 +635,7 @@ endless_loop: # Loop forever more
boot_message: boot_message:
.string "Boot Loader Stage 2 loaded" .string "Boot Loader Stage 2 loaded"
screen_width: screen_width: # Global variables for the screen width and height
.word 320 .word 320
screen_height: screen_height:
.word 200 .word 200

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
stage4/xv6.img (Stored with Git LFS)

Binary file not shown.

View File

@ -124,7 +124,7 @@ getdigit:
IntBuffer: .string " " IntBuffer: .string " "
# Draw Line function DrawLine(x0 (4), y0 (6), x1 (8), y1 (10), color (12)) # Draw Line function DrawLine(int x0 (4), int y0 (6), int x1 (8), int y1 (10), short color (12))
# Define parameter address positions in stack # Define parameter address positions in stack
#define color 12 #define color 12
#define y1 10 #define y1 10
@ -230,7 +230,7 @@ cons_line_loop_end:
# we also tell it to free the 10 bytes in the stack for the paramters # we also tell it to free the 10 bytes in the stack for the paramters
# 5 x Word (2 bytes) # 5 x Word (2 bytes)
# Function PlotPixel(pixelx (4), pixely (6), pixelColor (8)) # Function PlotPixel(int pixelx (4), int pixely (6), short pixelColor (8))
#define pixelcolor 8 #define pixelcolor 8
#define pixely 6 #define pixely 6
#define pixelx 4 #define pixelx 4
@ -287,7 +287,7 @@ cons_plot_pixel_end:
popw %bp popw %bp
ret $6 # Finish the loop and return to the call address ret $6 # Finish the loop and return to the call address
# Draw Line function DrawFilledRect(rectx (4), recty (6), rectWidth (8), rectHeight (10), rectColor (12)) # Draw Line function DrawFilledRect(int rectx (4), int recty (6), int rectWidth (8), int rectHeight (10), short rectColor (12))
# Define parameter address positions in stack # Define parameter address positions in stack
#define rectcolor 12 #define rectcolor 12
#define rectheight 10 #define rectheight 10
@ -410,7 +410,7 @@ cons_filled_rect_loop_end:
# we also tell it to free the 10 bytes in the stack for the paramters # we also tell it to free the 10 bytes in the stack for the paramters
# 5 x Word (2 bytes) # 5 x Word (2 bytes)
# Draw Line function DrawCircle(circlex (4), circley (6), circleRadius (8), circleColor (10)) # Draw Line function DrawCircle(int circlex (4), int circley (6), int circleRadius (8), short circleColor (10))
# This follows the bresenham circle drawing algorithm so that we can stick to integer values # This follows the bresenham circle drawing algorithm so that we can stick to integer values
# Define parameter address positions in stack # Define parameter address positions in stack
#define circlecolor 10 #define circlecolor 10
@ -664,6 +664,7 @@ arr_dump_end:
# This function fills the array with FF bytes (FF being a value i can use in a loop to end it and not effect the x/y positions) # This function fills the array with FF bytes (FF being a value i can use in a loop to end it and not effect the x/y positions)
#define clearsize 6 #define clearsize 6
#define clearptr 4 #define clearptr 4
arr_clear: arr_clear:
pushw %bp pushw %bp
movw %sp, %bp movw %sp, %bp
@ -686,12 +687,12 @@ arr_clear_setup:
addw $2, %si # to make sure a correct address was given addw $2, %si # to make sure a correct address was given
arr_clear_loop_start: arr_clear_loop_start:
movb %al, (%si) movb %al, (%si) # Loop the array and add the bit pattern given as filler
inc %si inc %si
loop arr_clear_loop_start loop arr_clear_loop_start
arr_clear_add_end_bytes: arr_clear_add_end_bytes:
movw $0x7fff, (%si) movw $0x7fff, (%si) # End the array with the ending word
arr_clear_loop_end: arr_clear_loop_end:
# Return all the original values to each register before we return back # Return all the original values to each register before we return back
@ -851,9 +852,9 @@ setup_polygon_arrays:
call arr_clear call arr_clear
# Map points for the star polygon array # Map points for the star polygon array
pushw (screen_height) pushw (screen_height) # y
pushw $0 pushw $0 # x
pushw $0x1000 pushw $0x1000 # Array ptr
call arr_add_point call arr_add_point
pushw $140 pushw $140
pushw $40 pushw $40
@ -894,9 +895,9 @@ setup_polygon_arrays:
call arr_clear call arr_clear
# Array for the moon polygon # Array for the moon polygon
pushw $0 pushw $0 # y
pushw $0 pushw $0 # x
pushw $0x1050 pushw $0x1050 # Array ptr
call arr_add_point call arr_add_point
pushw $5 pushw $5
pushw $8 pushw $8

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
stage5/xv6.img (Stored with Git LFS)

Binary file not shown.