- push ecx\r
- mov ecx, 100\r
- call delay\r
- pop ecx\r
- mov esi, bos_delay_str\r
- mov bl, 0x07\r
- call print\r
- loop .loop\r
- ret\r
-\r
-\r
- ;----------------;\r
- ; VGA test ;\r
- ;----------------;\r
- bos_vga_str db 13,10,'It works..! :-D', 0\r
- vga_test:\r
-\r
- mov ax, 1 ; clear the screen\r
- call set_mode_0x13 ; set mode 0x13\r
-\r
- mov cx, 256 ; loop out some pixels\r
- .l1:\r
- mov bx, cx ; x value\r
- mov al, cl\r
- push cx\r
- mov cx, 50 ; y value\r
- call put_0x13_pixel\r
- pop cx\r
- loop .l1\r
-\r
- ; draw mario and some ground\r
- mov esi, mario\r
- mov ax, 260 ; x\r
- mov bx, 168 ; y\r
- mov cx, 20 ; height\r
- mov dx, 18 ; width\r
- call put_0x13_sprite ; in vga.inc\r
- mov esi, grass_l\r
- mov ax, 250\r
- mov bx, 186\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, grass_f\r
- mov ax, 265\r
- mov bx, 186\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, grass_ul\r
- mov ax, 280\r
- mov bx, 186\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, g_lefts\r
- mov ax, 280\r
- mov bx, 172\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, grass_l\r
- mov ax, 280\r
- mov bx, 158\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, g_earth\r
- mov ax, 300\r
- mov bx, 186\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, g_earth\r
- mov ax, 300\r
- mov bx, 172\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, grass_f\r
- mov ax, 300\r
- mov bx, 158\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
-\r
- call wait_key\r
-\r
- mov ax, 1 ; clear the screen\r
- call set_mode_0x03 ; set mode 0x03\r
-\r
- mov esi, bos_vga_str ; print that it worked!\r
- mov bl, 1\r
- call print\r
- ret\r
-\r
-\r
-\r
-\r
- ;--------------------------;\r
- ; fdd test ;\r
- ;--------------------------;\r
- fdd_test:\r
- mov bl, 13\r
- mov bh, 7 ; make newline\r
- call print_char\r
-\r
- mov ecx, 512\r
- mov edi, 0x80000\r
- .loop511:\r
- mov dword [edi], 'shit' ; set DMA buffer to shit, as a test\r
- add edi, 4\r
- sub ecx, 4\r
- cmp ecx, 0\r
- jne .loop511\r
-\r
- mov dh, 0x00 ; side\r
- mov dl, 0x00 ; drive\r
- mov ch, 0x00 ; track\r
- mov cl, 0x01 ; sector\r
- mov bl, 0x00 ; 1 = write\r
- call fdd_read_write\r
- jc .error\r
-\r
- mov esi, 0x80000 ; dma buffer\r
- mov ecx, 512\r
- .print:\r
- lodsb\r
- mov bl, al\r
- mov bh, 7\r
- call print_char ; print it. is it still\r
- dec ecx ; "shit" ?\r
- cmp ecx, 0\r
- jne .print\r
- jmp .end\r
-\r
- .error:\r
- mov bl, 13\r
- call print_char\r
- mov bl, 10\r
- call print_char\r
- mov bh, 0x40\r
- mov bl, 'E' ; error sign... :'(\r
- call print_char\r
-\r
- call fdd_reset\r
- mov al, 1\r
- call fdd_recal_seek ; do somthing about the error.. :P\r
-\r
- .end:\r
- ret\r
-\r
-\r
-\r
-\r
-\r
- ;------------------------------;\r
- ; memory test ;\r
- ;------------------------------;\r
-\r
- bos_mem_str1 db 13,10,'Performing memory test. (debugging allocs assume 32mb RAM)', 0\r
- bos_mem_str2 db 13,10,'Total installed memory (in bytes): ',0\r
- bos_mem_str3 db 13,10,13,10,'Memory chunks:',0\r
- bos_mem_str4 db 13,10,'Address Size Type Previous Next',0\r
- bos_mem_str5 db 13,10,'-------------------------------------------------------',0\r
- bos_mem_str6 db '0x',0\r
- bos_mem_str7 db 'Free ',0\r
- bos_mem_str8 db 'Used ',0\r
- bos_mem_str9 db 'None ',0\r
- bos_mem_str0 db ' ',0\r
- bos_mem_crlf db 13,10,0\r
- current_mem_pos dd 0\r
- next_free dd 0\r
-\r
- ;---------DEBUG---------\r
- test1_or_2 db 1\r
- test_address dd 0\r
- test_size dd 0\r
- test_address2 dd 0\r
- test_size2 dd 0\r
- ;---------END DEBUG---------\r
-\r
- mem_test:\r
- push eax\r
- push ebx\r
- push ecx\r
- push edx\r
-\r
- ;---------DEBUG---------\r
- cmp [test1_or_2],0\r
- je .free_the_test_block\r
-\r
- mov ebx, 0x1000000 ;first test\r
- mov [test_size2], ebx\r
- call allocate_mem\r
- mov [test_address2], ebx\r
-\r
- mov ebx, 0xE00000 ; second test\r
- mov ecx, ebx\r
- call allocate_mem\r
- push ebx\r
- push ecx\r
-\r
- mov ebx, 0x10000 ; third test\r
- mov [test_size], ebx\r
- call allocate_mem\r
- mov [test_address], ebx ; test allocation\r
-\r
- pop ecx\r
- pop ebx\r
- call free_mem\r
-\r
- mov [test1_or_2], 0\r
- jmp .end_test\r
- .free_the_test_block:\r
- mov ebx, [test_address]\r
- mov ecx, [test_size] ; and freeing\r
- call free_mem\r
- mov ebx, [test_address2]\r
- mov ecx, [test_size2] ; and freeing\r
- call free_mem\r
- mov [test1_or_2], 1\r
- .end_test:\r
- ;---------END DEBUG---------\r
-\r
- mov esi, bos_mem_str1\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str2\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
- mov ebx, [ram_amount]\r
- mov cl, 0x04\r
- call print_hex32\r
-\r
- mov esi, bos_mem_str3\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str4\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str5\r
- mov bl, 0x07\r
- call print\r
-\r
- mov [current_mem_pos], 0\r
- mov eax, [first_free]\r
- mov [next_free], eax\r
-\r
- ;-------------------------;\r
- ; this is a used block ;\r
- ;-------------------------;\r
- .used:\r
- mov eax, [current_mem_pos]\r
- mov ebx, [next_free]\r
- cmp eax, [ram_amount] ; .free will always let us\r
- jae .end ; decide if we are to quit or not.\r
-\r
- cmp [next_free], 0\r
- jne .more_blocks\r
- mov ebx, [ram_amount] ; no next block, use ram size\r
- sub ebx, eax ; get size in ebx\r
- mov edi, 1\r
- call .print_mem_info\r
- jmp .end\r
-\r
- .more_blocks:\r
- sub ebx, eax\r
- mov edi, 1\r
- call .print_mem_info\r
-\r
- mov eax, [next_free]\r
- cmp eax, 0\r
- je .end\r
- mov ebx, [eax+8]\r
- mov [current_mem_pos], eax\r
- mov [next_free], ebx\r
-\r
- ;-------------------------;\r
- ; this is a free block ;\r
- ;-------------------------;\r
- .free:\r
- mov eax, [current_mem_pos] ; current pos. in eax\r
- mov ebx, [eax+4] ; current size in ebx\r
- mov ecx, [eax] ; prev pointer in ecx\r
- mov edx, [eax+8] ; next pointer in edx\r
- xor edi, edi\r
- call .print_mem_info\r
-\r
- add eax, ebx\r
- mov [current_mem_pos], eax\r
- jmp .used\r
-\r
- .end:\r
- pop eax\r
- pop ebx\r
- pop ecx\r
- pop edx\r
- ret\r
-\r
- ;-------------------------;\r
- ; print mem block info ;\r
- ;-------------------------;\r
- .print_mem_info:\r
- push eax ; current pos\r
- push ebx ; current size\r
- push ecx ; prev pointer\r
- push edx ; next pointer\r
- push edi ; 1 = used\r
-\r
- push ebx ; push size\r
- mov esi, bos_mem_crlf\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
-\r
- push ecx ; push prev\r
- mov ebx, eax\r
- mov cl, 0x04\r
- call print_hex32\r
-\r
- mov esi, bos_mem_str0\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
-\r
- pop ecx ; pop prev\r
- pop ebx ; pop size\r
- push ecx ; push prev\r
- mov cl, 0x04\r
- call print_hex32\r
- mov esi, bos_mem_str0\r
- mov bl, 0x07\r
- call print\r
-\r
- cmp edi, 1\r
- jne .print_free\r
- pop ecx ; pop prev\r
-\r
- mov esi, bos_mem_str8 ; it's used\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str9\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str9\r
- mov bl, 0x07\r
- call print\r
- jmp .print_end\r
-\r
- .print_free:\r
- mov esi, bos_mem_str7 ; it's free\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
-\r
- pop ebx ; pop the pushed ecx\r
- mov cl, 0x04 ; into ebx instead.. ;)\r
- call print_hex32\r
- mov esi, bos_mem_str0\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
- mov ebx, edx\r
- mov cl, 0x04\r
- call print_hex32\r
-\r
- .print_end:\r
- pop edi\r
- pop edx\r
- pop ecx\r
- pop ebx\r
- pop eax\r
- ret
\ No newline at end of file
+ push ecx\r
+ mov ecx, 100\r
+ call delay\r
+ pop ecx\r
+ mov esi, bos_delay_str\r
+ mov bl, 0x07\r
+ call print\r
+ loop .loop\r
+ ret\r
+\r
+\r
+ ;----------------;\r
+ ; VGA test ;\r
+ ;----------------;\r
+ bos_vga_str db 13,10,'It works..! :-D', 0\r
+ vga_test:\r
+\r
+ mov ax, 1 ; clear the screen\r
+ call set_mode_0x13 ; set mode 0x13\r
+\r
+ mov cx, 256 ; loop out some pixels\r
+ .l1:\r
+ mov bx, cx ; x value\r
+ mov al, cl\r
+ push cx\r
+ mov cx, 50 ; y value\r
+ call put_0x13_pixel\r
+ pop cx\r
+ loop .l1\r
+\r
+ ; draw mario and some ground\r
+ mov esi, mario\r
+ mov ax, 260 ; x\r
+ mov bx, 168 ; y\r
+ mov cx, 20 ; height\r
+ mov dx, 18 ; width\r
+ call put_0x13_sprite ; in vga.inc\r
+ mov esi, grass_l\r
+ mov ax, 250\r
+ mov bx, 186\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, grass_f\r
+ mov ax, 265\r
+ mov bx, 186\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, grass_ul\r
+ mov ax, 280\r
+ mov bx, 186\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, g_lefts\r
+ mov ax, 280\r
+ mov bx, 172\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, grass_l\r
+ mov ax, 280\r
+ mov bx, 158\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, g_earth\r
+ mov ax, 300\r
+ mov bx, 186\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, g_earth\r
+ mov ax, 300\r
+ mov bx, 172\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, grass_f\r
+ mov ax, 300\r
+ mov bx, 158\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+\r
+ call wait_key\r
+\r
+ mov ax, 1 ; clear the screen\r
+ call set_mode_0x03 ; set mode 0x03\r
+\r
+ mov esi, bos_vga_str ; print that it worked!\r
+ mov bl, 1\r
+ call print\r
+ ret\r
+\r
+\r
+\r
+\r
+ ;--------------------------;\r
+ ; fdd test ;\r
+ ;--------------------------;\r
+ fdd_test:\r
+ mov bl, 13\r
+ mov bh, 7 ; make newline\r
+ call print_char\r
+\r
+ mov ecx, 512\r
+ mov edi, 0x80000\r
+ .loop511:\r
+ mov dword [edi], 'shit' ; set DMA buffer to shit, as a test\r
+ add edi, 4\r
+ sub ecx, 4\r
+ cmp ecx, 0\r
+ jne .loop511\r
+\r
+ mov dh, 0x00 ; side\r
+ mov dl, 0x00 ; drive\r
+ mov ch, 0x00 ; track\r
+ mov cl, 0x01 ; sector\r
+ mov bl, 0x00 ; 1 = write\r
+ call fdd_read_write\r
+ jc .error\r
+\r
+ mov esi, 0x80000 ; dma buffer\r
+ mov ecx, 512\r
+ .print:\r
+ lodsb\r
+ mov bl, al\r
+ mov bh, 7\r
+ call print_char ; print it. is it still\r
+ dec ecx ; "shit" ?\r
+ cmp ecx, 0\r
+ jne .print\r
+ jmp .end\r
+\r
+ .error:\r
+ mov bl, 13\r
+ call print_char\r
+ mov bl, 10\r
+ call print_char\r
+ mov bh, 0x40\r
+ mov bl, 'E' ; error sign... :'(\r
+ call print_char\r
+\r
+ call fdd_reset\r
+ mov al, 1\r
+ call fdd_recal_seek ; do somthing about the error.. :P\r
+\r
+ .end:\r
+ ret\r
+\r
+\r
+\r
+\r
+\r
+ ;------------------------------;\r
+ ; memory test ;\r
+ ;------------------------------;\r
+\r
+ bos_mem_str1 db 13,10,'Performing memory test. (debugging allocs assume 32mb RAM)', 0\r
+ bos_mem_str2 db 13,10,'Total installed memory (in bytes): ',0\r
+ bos_mem_str3 db 13,10,13,10,'Memory chunks:',0\r
+ bos_mem_str4 db 13,10,'Address Size Type Previous Next',0\r
+ bos_mem_str5 db 13,10,'-------------------------------------------------------',0\r
+ bos_mem_str6 db '0x',0\r
+ bos_mem_str7 db 'Free ',0\r
+ bos_mem_str8 db 'Used ',0\r
+ bos_mem_str9 db 'None ',0\r
+ bos_mem_str0 db ' ',0\r
+ bos_mem_crlf db 13,10,0\r
+ current_mem_pos dd 0\r
+ next_free dd 0\r
+\r
+ ;---------DEBUG---------\r
+ test1_or_2 db 1\r
+ test_address dd 0\r
+ test_size dd 0\r
+ test_address2 dd 0\r
+ test_size2 dd 0\r
+ ;---------END DEBUG---------\r
+\r
+ mem_test:\r
+ push eax\r
+ push ebx\r
+ push ecx\r
+ push edx\r
+\r
+ ;---------DEBUG---------\r
+ cmp [test1_or_2],0\r
+ je .free_the_test_block\r
+\r
+ mov ebx, 0x1000000 ;first test\r
+ mov [test_size2], ebx\r
+ call allocate_mem\r
+ mov [test_address2], ebx\r
+\r
+ mov ebx, 0xE00000 ; second test\r
+ mov ecx, ebx\r
+ call allocate_mem\r
+ push ebx\r
+ push ecx\r
+\r
+ mov ebx, 0x10000 ; third test\r
+ mov [test_size], ebx\r
+ call allocate_mem\r
+ mov [test_address], ebx ; test allocation\r
+\r
+ pop ecx\r
+ pop ebx\r
+ call free_mem\r
+\r
+ mov [test1_or_2], 0\r
+ jmp .end_test\r
+ .free_the_test_block:\r
+ mov ebx, [test_address]\r
+ mov ecx, [test_size] ; and freeing\r
+ call free_mem\r
+ mov ebx, [test_address2]\r
+ mov ecx, [test_size2] ; and freeing\r
+ call free_mem\r
+ mov [test1_or_2], 1\r
+ .end_test:\r
+ ;---------END DEBUG---------\r
+\r
+ mov esi, bos_mem_str1\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str2\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+ mov ebx, [ram_amount]\r
+ mov cl, 0x04\r
+ call print_hex32\r
+\r
+ mov esi, bos_mem_str3\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str4\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str5\r
+ mov bl, 0x07\r
+ call print\r
+\r
+ mov [current_mem_pos], 0\r
+ mov eax, [first_free]\r
+ mov [next_free], eax\r
+\r
+ ;-------------------------;\r
+ ; this is a used block ;\r
+ ;-------------------------;\r
+ .used:\r
+ mov eax, [current_mem_pos]\r
+ mov ebx, [next_free]\r
+ cmp eax, [ram_amount] ; .free will always let us\r
+ jae .end ; decide if we are to quit or not.\r
+\r
+ cmp [next_free], 0\r
+ jne .more_blocks\r
+ mov ebx, [ram_amount] ; no next block, use ram size\r
+ sub ebx, eax ; get size in ebx\r
+ mov edi, 1\r
+ call .print_mem_info\r
+ jmp .end\r
+\r
+ .more_blocks:\r
+ sub ebx, eax\r
+ mov edi, 1\r
+ call .print_mem_info\r
+\r
+ mov eax, [next_free]\r
+ cmp eax, 0\r
+ je .end\r
+ mov ebx, [eax+8]\r
+ mov [current_mem_pos], eax\r
+ mov [next_free], ebx\r
+\r
+ ;-------------------------;\r
+ ; this is a free block ;\r
+ ;-------------------------;\r
+ .free:\r
+ mov eax, [current_mem_pos] ; current pos. in eax\r
+ mov ebx, [eax+4] ; current size in ebx\r
+ mov ecx, [eax] ; prev pointer in ecx\r
+ mov edx, [eax+8] ; next pointer in edx\r
+ xor edi, edi\r
+ call .print_mem_info\r
+\r
+ add eax, ebx\r
+ mov [current_mem_pos], eax\r
+ jmp .used\r
+\r
+ .end:\r
+ pop eax\r
+ pop ebx\r
+ pop ecx\r
+ pop edx\r
+ ret\r
+\r
+ ;-------------------------;\r
+ ; print mem block info ;\r
+ ;-------------------------;\r
+ .print_mem_info:\r
+ push eax ; current pos\r
+ push ebx ; current size\r
+ push ecx ; prev pointer\r
+ push edx ; next pointer\r
+ push edi ; 1 = used\r
+\r
+ push ebx ; push size\r
+ mov esi, bos_mem_crlf\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+\r
+ push ecx ; push prev\r
+ mov ebx, eax\r
+ mov cl, 0x04\r
+ call print_hex32\r
+\r
+ mov esi, bos_mem_str0\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+\r
+ pop ecx ; pop prev\r
+ pop ebx ; pop size\r
+ push ecx ; push prev\r
+ mov cl, 0x04\r
+ call print_hex32\r
+ mov esi, bos_mem_str0\r
+ mov bl, 0x07\r
+ call print\r
+\r
+ cmp edi, 1\r
+ jne .print_free\r
+ pop ecx ; pop prev\r
+\r
+ mov esi, bos_mem_str8 ; it's used\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str9\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str9\r
+ mov bl, 0x07\r
+ call print\r
+ jmp .print_end\r
+\r
+ .print_free:\r
+ mov esi, bos_mem_str7 ; it's free\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+\r
+ pop ebx ; pop the pushed ecx\r
+ mov cl, 0x04 ; into ebx instead.. ;)\r
+ call print_hex32\r
+ mov esi, bos_mem_str0\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+ mov ebx, edx\r
+ mov cl, 0x04\r
+ call print_hex32\r
+\r
+ .print_end:\r
+ pop edi\r
+ pop edx\r
+ pop ecx\r
+ pop ebx\r
+ pop eax\r
+ ret
\ No newline at end of file