allocator + windows test
This commit is contained in:
parent
04298f8659
commit
78f1b17358
|
@ -0,0 +1,50 @@
|
||||||
|
# Op Code Structure
|
||||||
|
|
||||||
|
## Type 1 Register and Memory
|
||||||
|
|
||||||
|
Opcode | Register | Address Mask
|
||||||
|
-------|----------|---------
|
||||||
|
F | F | FFFFFF
|
||||||
|
|
||||||
|
## Type 2 Register and Register
|
||||||
|
|
||||||
|
Opcode | Register | Address Mask
|
||||||
|
-------|----------|---------
|
||||||
|
F | F | 00000F
|
||||||
|
|
||||||
|
## Type 3 Meta
|
||||||
|
|
||||||
|
Opcode | Register | Address Mask
|
||||||
|
-------|----------|---------
|
||||||
|
F | F | 000000
|
||||||
|
|
||||||
|
# Meta Instructions
|
||||||
|
|
||||||
|
Opcode | Type | Descriptions
|
||||||
|
-------|------|-------
|
||||||
|
0x00 | 3 |NOP
|
||||||
|
|
||||||
|
# 0x1 Store
|
||||||
|
|
||||||
|
Opcode | Type | Descriptions
|
||||||
|
-------|------|------------------
|
||||||
|
0x1N | 1 | Store word in Register N into Addr
|
||||||
|
|
||||||
|
# 0x2 Load
|
||||||
|
|
||||||
|
Opcode | Type | Descriptions
|
||||||
|
-------|------|------------------
|
||||||
|
0x2N | 1 | Load word @ Addr into Register
|
||||||
|
|
||||||
|
# 0x3 Load Immediate
|
||||||
|
|
||||||
|
Opcode | Type | Descriptions
|
||||||
|
-------|------|------------------
|
||||||
|
0x3N | 1 | Load Addr into Register N
|
||||||
|
|
||||||
|
|
||||||
|
# 0x9 Register Move (Transfer)
|
||||||
|
|
||||||
|
Opcode | Type | Descriptions
|
||||||
|
-------|------|------------------
|
||||||
|
0x7N00000R | 2 | Load word in Register `R` into Register `N`
|
48
kernel.asm
48
kernel.asm
|
@ -37,15 +37,18 @@ import charset.asm ; charset + hex strings
|
||||||
import strings.asm ; draw_char, draw_string
|
import strings.asm ; draw_char, draw_string
|
||||||
import util.asm ; print_addr
|
import util.asm ; print_addr
|
||||||
import graphics.asm; draw_vline, draw_hline, draw_rect
|
import graphics.asm; draw_vline, draw_hline, draw_rect
|
||||||
|
import windows.asm
|
||||||
|
|
||||||
; Common Strings
|
; Common Strings
|
||||||
|
data ascii TestWindow Test Window
|
||||||
|
data ascii TestWindow2 Test Window The Second
|
||||||
data ascii boo_os_version Boo OS v0.0.1
|
data ascii boo_os_version Boo OS v0.0.1
|
||||||
data ascii prompt [sarah@boo] >
|
data ascii prompt [sarah@boo] >
|
||||||
data ascii Welcome !@#$%^&*()_+=-0987654321
|
data ascii Welcome !@#$%^&*()_+=-0987654321
|
||||||
data ascii Introspection We Can Now Do Introspection:
|
data ascii Introspection We Can Now Do Introspection:
|
||||||
data ascii label_rax RAX:
|
data ascii label_rax RAX:
|
||||||
data ascii label_rip RIP:
|
data ascii label_rip RIP:
|
||||||
data ascii label_cycles Instruction Count:
|
data ascii label_cycles Allocated Memory:
|
||||||
data ascii label_keypress Current Key Pressed:
|
data ascii label_keypress Current Key Pressed:
|
||||||
data image boo_os.png booos.png
|
data image boo_os.png booos.png
|
||||||
data image boo_os_small.png booos-small.png
|
data image boo_os_small.png booos-small.png
|
||||||
|
@ -358,9 +361,39 @@ label handle_keypress:
|
||||||
bappend $4 command_line_input
|
bappend $4 command_line_input
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
label window_1:
|
||||||
|
nop
|
||||||
|
|
||||||
|
label window_2:
|
||||||
|
nop
|
||||||
|
|
||||||
|
label kernel_windows:
|
||||||
|
nop
|
||||||
|
|
||||||
; Kernel Begins
|
; Kernel Begins
|
||||||
@ $CB000:
|
@ $CB000:
|
||||||
|
|
||||||
|
loadi $4 2
|
||||||
|
call FFFFF0 ; Allocate First Linked List
|
||||||
|
store $4 kernel_windows
|
||||||
|
|
||||||
|
loadi $4 $30
|
||||||
|
loadi $5 $30
|
||||||
|
loadi $6 $A0
|
||||||
|
loadi $7 $A0
|
||||||
|
loadi $8 TestWindow
|
||||||
|
call make_window
|
||||||
|
store $4 window_1
|
||||||
|
|
||||||
|
loadi $4 $55
|
||||||
|
loadi $5 $70
|
||||||
|
loadi $6 $F0
|
||||||
|
loadi $7 $A0
|
||||||
|
loadi $8 TestWindow2
|
||||||
|
call make_window
|
||||||
|
store $4 window_2
|
||||||
|
|
||||||
|
label kernel_loop:
|
||||||
loadi $9 $0; 640-64
|
loadi $9 $0; 640-64
|
||||||
loadi $A $0; 480-64
|
loadi $A $0; 480-64
|
||||||
call set_pos
|
call set_pos
|
||||||
|
@ -374,6 +407,14 @@ label handle_keypress:
|
||||||
loadi $8 $222222
|
loadi $8 $222222
|
||||||
call draw_filled_rect
|
call draw_filled_rect
|
||||||
|
|
||||||
|
loadi $4 window_1
|
||||||
|
rload $4 $4
|
||||||
|
call draw_window
|
||||||
|
|
||||||
|
loadi $4 window_2
|
||||||
|
rload $4 $4
|
||||||
|
call draw_window
|
||||||
|
|
||||||
loadi $9 $5;
|
loadi $9 $5;
|
||||||
loadi $A $5;
|
loadi $A $5;
|
||||||
call set_pos
|
call set_pos
|
||||||
|
@ -465,10 +506,10 @@ label handle_keypress:
|
||||||
call draw_string;
|
call draw_string;
|
||||||
|
|
||||||
updsp
|
updsp
|
||||||
jmp $CB000;
|
jmp kernel_loop;
|
||||||
|
|
||||||
|
|
||||||
; Very Very Watermark Allocator
|
; Very Very Basic Watermark Memory Allocator
|
||||||
@ $FFFFF0:
|
@ $FFFFF0:
|
||||||
; $4 contains a length which corresponds to number of bytes
|
; $4 contains a length which corresponds to number of bytes
|
||||||
label allocator:
|
label allocator:
|
||||||
|
@ -478,5 +519,4 @@ label handle_keypress:
|
||||||
loadi $2 $FFFFF0
|
loadi $2 $FFFFF0
|
||||||
sub $2 $1 $2
|
sub $2 $1 $2
|
||||||
sub $2 $4 $4
|
sub $2 $4 $4
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -113,6 +113,7 @@ impl Machine {
|
||||||
if ptr > 0 {
|
if ptr > 0 {
|
||||||
self.memory[addr + 1] -= 1;
|
self.memory[addr + 1] -= 1;
|
||||||
self.memory[addr + 2 + ptr - 1] = 0x00;
|
self.memory[addr + 2 + ptr - 1] = 0x00;
|
||||||
|
self.memory[addr + 2 + ptr - 1] = 0x00;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
op => {
|
op => {
|
||||||
|
@ -156,7 +157,7 @@ impl Machine {
|
||||||
self.memory[addr] = self.memory[REGISTER_PAGE + input_reg];
|
self.memory[addr] = self.memory[REGISTER_PAGE + input_reg];
|
||||||
}
|
}
|
||||||
0x07 => {
|
0x07 => {
|
||||||
// LOAD R(X) = MEM(R(In))
|
// RLOAD R(X) = MEM(R(In))
|
||||||
let input_reg = ((instruction) >> 24 & 0x0F) as usize;
|
let input_reg = ((instruction) >> 24 & 0x0F) as usize;
|
||||||
let reg = (instruction & 0x000000FF) as usize;
|
let reg = (instruction & 0x000000FF) as usize;
|
||||||
self.memory[REGISTER_PAGE + reg] =
|
self.memory[REGISTER_PAGE + reg] =
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
; x,y, width, height; title
|
||||||
|
; returns the address of the window on the heap in $4
|
||||||
|
label make_window
|
||||||
|
tx $D $5
|
||||||
|
loadi $4 6
|
||||||
|
call $FFFFF0 ; allocate 6 bytes on the heap
|
||||||
|
|
||||||
|
rstore $D $4
|
||||||
|
inc $4
|
||||||
|
rstore $5 $4
|
||||||
|
inc $4
|
||||||
|
rstore $6 $4
|
||||||
|
inc $4
|
||||||
|
rstore $7 $4
|
||||||
|
inc $4
|
||||||
|
loadi $1 221122
|
||||||
|
rstore $1 $4
|
||||||
|
inc $4
|
||||||
|
rstore $8 $4
|
||||||
|
|
||||||
|
loadi $1 6
|
||||||
|
sub $4 $1 $4
|
||||||
|
ret
|
||||||
|
|
||||||
|
; 4 contains the address of the window
|
||||||
|
|
||||||
|
label _draw_window
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
label draw_window:
|
||||||
|
tx $C $4
|
||||||
|
inc $C
|
||||||
|
rload $C $4
|
||||||
|
store $4 _draw_window
|
||||||
|
inc $C
|
||||||
|
rload $C $5
|
||||||
|
store $5 _draw_window+1
|
||||||
|
inc $C
|
||||||
|
rload $C $6
|
||||||
|
store $6 _draw_window+2
|
||||||
|
inc $C
|
||||||
|
rload $C $7
|
||||||
|
store $7 _draw_window+3
|
||||||
|
inc $C
|
||||||
|
rload $C $8
|
||||||
|
call draw_filled_rect
|
||||||
|
inc $C ; now points to title buffer
|
||||||
|
|
||||||
|
load $4 _draw_window
|
||||||
|
load $5 _draw_window+1
|
||||||
|
load $6 _draw_window+2
|
||||||
|
load $7 _draw_window+3
|
||||||
|
loadi $8 020102
|
||||||
|
call draw_rect
|
||||||
|
|
||||||
|
load $4 _draw_window
|
||||||
|
load $5 _draw_window+1
|
||||||
|
loadi $1 2
|
||||||
|
add $4 $1 $4
|
||||||
|
loadi $1 2
|
||||||
|
add $5 $1 $5
|
||||||
|
load $6 _draw_window+2
|
||||||
|
loadi $1 4
|
||||||
|
sub $6 $1 $6
|
||||||
|
loadi $7 $A
|
||||||
|
loadi $8 554455
|
||||||
|
call draw_filled_rect
|
||||||
|
|
||||||
|
load $4 _draw_window
|
||||||
|
load $5 _draw_window+1
|
||||||
|
loadi $1 4
|
||||||
|
add $4 $1 $4
|
||||||
|
loadi $1 4
|
||||||
|
add $5 $1 $5
|
||||||
|
tx $9 $4
|
||||||
|
tx $A $5
|
||||||
|
call set_pos
|
||||||
|
|
||||||
|
rload $C $4
|
||||||
|
call draw_string
|
||||||
|
|
||||||
|
ret
|
Loading…
Reference in New Issue