[0.3.1591] - Started work on first bootloader
This commit is contained in:
parent
f256b901a1
commit
d8dee243a1
24 changed files with 129 additions and 218 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
#-----------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------
|
||||||
set(PROJ_NAME DragonVM)
|
set(PROJ_NAME DragonVM)
|
||||||
set(MAJOR_VER 0)
|
set(MAJOR_VER 0)
|
||||||
set(MINOR_VER 2)
|
set(MINOR_VER 3)
|
||||||
#-----------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
#Setup
|
#Setup
|
||||||
|
|
|
||||||
2
build.nr
2
build.nr
|
|
@ -1 +1 @@
|
||||||
1590
|
1592
|
||||||
|
|
|
||||||
|
|
@ -14,15 +14,15 @@ rm dragon/disk1.dr
|
||||||
./dtools new-vdisk dragon/disk1.dr 1048576
|
./dtools new-vdisk dragon/disk1.dr 1048576
|
||||||
|
|
||||||
printf "\n${green}Compiling MBR Block...\n${clear}"
|
printf "\n${green}Compiling MBR Block...\n${clear}"
|
||||||
./dasm dss/mbr.dss -o dragon/mbr.bin --save-disassembly disassembly/mbr.dds --verbose
|
./dasm dss/drake.dss -o dragon/drake.bin --save-disassembly disassembly/drake.dds --verbose
|
||||||
|
|
||||||
printf "\n${green}Loading MBR Block...\n${clear}"
|
printf "\n${green}Loading MBR Block...\n${clear}"
|
||||||
./dtools load-binary dragon/disk1.dr dragon/mbr.bin 0x00000000
|
./dtools load-binary dragon/disk1.dr dragon/drake.bin 0x00000000
|
||||||
|
|
||||||
printf "${green}Compiling Test Program 1...\n"
|
printf "${green}Compiling Test Program 1...\n"
|
||||||
./dasm dss/test1.dss -o test1.bin --save-disassembly disassembly/test1.dds --verbose
|
./dasm dss/tests/test1.dss -o test1.bin --save-disassembly disassembly/test1.dds --verbose
|
||||||
printf "${green}Compiling Test Program 2...\n"
|
printf "${green}Compiling Test Program 2...\n"
|
||||||
./dasm dss/test2.dss -o test2.bin --save-disassembly disassembly/test2.dds --verbose
|
./dasm dss/tests/test2.dss -o test2.bin --save-disassembly disassembly/test2.dds --verbose
|
||||||
|
|
||||||
printf "${green}Creating Windows Release...\n"
|
printf "${green}Creating Windows Release...\n"
|
||||||
cd ..
|
cd ..
|
||||||
|
|
@ -36,7 +36,7 @@ cp ./bin/font.bmp ./win-release
|
||||||
|
|
||||||
cp -r ./bin/config ./win-release
|
cp -r ./bin/config ./win-release
|
||||||
cp -r ./bin/disassembly/bios.dds ./win-release/disassembly
|
cp -r ./bin/disassembly/bios.dds ./win-release/disassembly
|
||||||
cp -r ./bin/disassembly/mbr.dds ./win-release/disassembly
|
cp -r ./bin/disassembly/drake.dds ./win-release/disassembly
|
||||||
cp -r ./bin/disassembly/test1.dds ./win-release/disassembly
|
cp -r ./bin/disassembly/test1.dds ./win-release/disassembly
|
||||||
cp -r ./bin/disassembly/test2.dds ./win-release/disassembly
|
cp -r ./bin/disassembly/test2.dds ./win-release/disassembly
|
||||||
cp -r ./bin/dragon ./win-release
|
cp -r ./bin/dragon ./win-release
|
||||||
|
|
@ -47,9 +47,9 @@ rm ./bin/disassembly/test2.dds
|
||||||
mkdir ./win-release/dss4
|
mkdir ./win-release/dss4
|
||||||
mkdir ./win-release/dss/bios
|
mkdir ./win-release/dss/bios
|
||||||
cp ./bin/dss/bios/* ./win-release/dss/bios
|
cp ./bin/dss/bios/* ./win-release/dss/bios
|
||||||
cp ./bin/dss/mbr.dss ./win-release/dss
|
cp ./bin/dss/drake.dss ./win-release/dss
|
||||||
cp ./bin/dss/test1.dss ./win-release/dss
|
cp ./bin/dss/tests/test1.dss ./win-release/dss
|
||||||
cp ./bin/dss/test2.dss ./win-release/dss
|
cp ./bin/dss/tests/test2.dss ./win-release/dss
|
||||||
|
|
||||||
cp C:/msys64/ucrt64/bin/libgcc_s_seh-1.dll ./win-release
|
cp C:/msys64/ucrt64/bin/libgcc_s_seh-1.dll ./win-release
|
||||||
cp C:/msys64/ucrt64/bin/libstdc++-6.dll ./win-release
|
cp C:/msys64/ucrt64/bin/libstdc++-6.dll ./win-release
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ Disks = dragon/disk1.dr
|
||||||
Bios = dragon/bios.bin
|
Bios = dragon/bios.bin
|
||||||
CMOS = dragon/cmos.dr
|
CMOS = dragon/cmos.dr
|
||||||
cpuext = extmov, extalu
|
cpuext = extmov, extalu
|
||||||
fixed_clock = false
|
fixed_clock = true
|
||||||
clock_rate_sec = 512
|
clock_rate_sec = 644
|
||||||
|
|
||||||
SingleColor_foreground = #009900FF
|
SingleColor_foreground = #009900FF
|
||||||
SingleColor_background = #111111FF
|
SingleColor_background = #111111FF
|
||||||
|
|
@ -93,11 +93,13 @@
|
||||||
0x04: Text SIngle Color - Direct Print buffer & Flush Buffer
|
0x04: Text SIngle Color - Direct Print buffer & Flush Buffer
|
||||||
0x05: Text Single Color - Flush Buffer
|
0x05: Text Single Color - Flush Buffer
|
||||||
0x06: Text Single Color - Print Buffer Without Flushing
|
0x06: Text Single Color - Print Buffer Without Flushing
|
||||||
|
0x07: Text Single Color - Print Buffered String
|
||||||
|
|
||||||
0xE0: Refresh Screen
|
0xE0: Refresh Screen
|
||||||
0xE1: Clear Screen
|
0xE1: Clear Screen
|
||||||
0x04: Text Single Color Character (1 Byte)
|
0x04: Text Single Color Character (1 Byte)
|
||||||
0x05: Text Single Color Inverted colors (1 Byte)
|
0x05: Text Single Color Inverted colors (1 Byte)
|
||||||
|
0x06: (2 bytes) Text Single Color Buffered String Address
|
||||||
0x16FF
|
0x16FF
|
||||||
-------
|
-------
|
||||||
0x1700 GENERIC SERIAL INTERFACE (64 Bytes)
|
0x1700 GENERIC SERIAL INTERFACE (64 Bytes)
|
||||||
|
|
@ -144,4 +146,23 @@ MAX INTERRUPT 0xAA
|
||||||
0x80: Disk Interface Finished
|
0x80: Disk Interface Finished
|
||||||
0xA0: Keyboard Interface - Key Pressed
|
0xA0: Keyboard Interface - Key Pressed
|
||||||
0xA1: Keyboard Interface - Key Released
|
0xA1: Keyboard Interface - Key Released
|
||||||
0xA2: Keyboard Interface - Text Entered
|
0xA2: Keyboard Interface - Text Entered
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#==========================================================================================================================================
|
||||||
|
# DPT - Partition Table
|
||||||
|
#==========================================================================================================================================
|
||||||
|
|
||||||
|
Disk Address: 0x200 - 0x400 (512 bytes)
|
||||||
|
Header: (0x200 - 0x20B) (12 bytes)
|
||||||
|
0x000: (2 bytes) - 0xF1CA - This number identifies this block as a DPT partition table
|
||||||
|
0x002: (2 bytes) - DPT version
|
||||||
|
0x004: (1 byte) - Partition count (max 5)
|
||||||
|
0x005: (7 bytes) - Reserved
|
||||||
|
Partition Table: (0x20C - 0x3FF) (500 bytes)
|
||||||
|
Entry: (100 bytes) (x5)
|
||||||
|
0x00: (4 bytes) - Start Address
|
||||||
|
0x04: (4 bytes) - Size
|
||||||
|
0x08: (28 bytes) - Reserved
|
||||||
|
0x40: (64 bytes) - Partition label
|
||||||
Binary file not shown.
Binary file not shown.
21
extra/dss/activeTest.dss
Normal file
21
extra/dss/activeTest.dss
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
##=================================================================================================================================
|
||||||
|
## This is the test2 program for the Dragon Virtual Machine. This example simply demonstrates the Virtual Display in Text-Single-Color
|
||||||
|
## mode, by printing an increasing counter followed by whatever is in the $string variable. The program also clears the screen
|
||||||
|
## every 10 lines.
|
||||||
|
##=================================================================================================================================
|
||||||
|
|
||||||
|
.load 0x1740
|
||||||
|
|
||||||
|
.data
|
||||||
|
$string "Hello World!!"
|
||||||
|
|
||||||
|
.code
|
||||||
|
mov R10, 0x0C
|
||||||
|
mov R9, $string
|
||||||
|
int 0x30
|
||||||
|
|
||||||
|
end_loop:
|
||||||
|
jmp $end_loop
|
||||||
|
hlt
|
||||||
|
|
||||||
|
.fixed 512, 0x00
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
@guard _DATA_DSS_
|
@guard _DATA_DSS_
|
||||||
|
|
||||||
@export BIOS_API bios_api.dss
|
@export BIOS_API dss/bios_api.dss
|
||||||
|
|
||||||
## ============================= Memory Mapped Devices and Registers =============================
|
## ============================= Memory Mapped Devices and Registers =============================
|
||||||
|
@export_comment /BIOS_API "These are the base addresses of the memory map."
|
||||||
@group MemoryAddresses
|
@group MemoryAddresses
|
||||||
MBR 0x1380
|
MBR 0x1380
|
||||||
INT_VEC 0x1080
|
INT_VEC 0x1080
|
||||||
|
|
@ -11,6 +12,7 @@
|
||||||
CMOS 0x1000
|
CMOS 0x1000
|
||||||
VGA 0x1600
|
VGA 0x1600
|
||||||
@end
|
@end
|
||||||
|
@export_comment /BIOS_API "\n"
|
||||||
|
|
||||||
@group CMOS_Settings
|
@group CMOS_Settings
|
||||||
MEM_START { MemoryAddresses.CMOS + 0x0000 }
|
MEM_START { MemoryAddresses.CMOS + 0x0000 }
|
||||||
|
|
@ -38,6 +40,7 @@
|
||||||
SIGNAL { MemoryAddresses.VGA + 0x0003 }
|
SIGNAL { MemoryAddresses.VGA + 0x0003 }
|
||||||
TEXT_SINGLE_CHAR { MemoryAddresses.VGA + 0x0004 }
|
TEXT_SINGLE_CHAR { MemoryAddresses.VGA + 0x0004 }
|
||||||
TEXT_SIGNLE_INVERT { MemoryAddresses.VGA + 0x0005 }
|
TEXT_SIGNLE_INVERT { MemoryAddresses.VGA + 0x0005 }
|
||||||
|
TEXT_SIGNLE_STR { MemoryAddresses.VGA + 0x0006 }
|
||||||
|
|
||||||
BUFF_START { MemoryAddresses.VGA + 0x00E0 }
|
BUFF_START { MemoryAddresses.VGA + 0x00E0 }
|
||||||
@end
|
@end
|
||||||
|
|
@ -61,6 +64,7 @@
|
||||||
PRINT_FLUSH_BUFF 0x04
|
PRINT_FLUSH_BUFF 0x04
|
||||||
FLUSH_BUFF 0x05
|
FLUSH_BUFF 0x05
|
||||||
PRINT_BUFF 0x06
|
PRINT_BUFF 0x06
|
||||||
|
PRINT_STRING 0x07
|
||||||
|
|
||||||
REFRESH_SCREEN 0xE0
|
REFRESH_SCREEN 0xE0
|
||||||
CLEAR_SCREEN 0xE1
|
CLEAR_SCREEN 0xE1
|
||||||
|
|
@ -78,8 +82,8 @@
|
||||||
|
|
||||||
.data
|
.data
|
||||||
$_bios_version_number_maj 0x00, 0x00
|
$_bios_version_number_maj 0x00, 0x00
|
||||||
$_bios_version_number_min 0x00, 0x03
|
$_bios_version_number_min 0x00, 0x04
|
||||||
$_bios_name " DragonBIOS "
|
$_bios_name "DragonBIOS "
|
||||||
$_clock_str " Clock: "
|
$_clock_str " Clock: "
|
||||||
$_mem_str " Memory: "
|
$_mem_str " Memory: "
|
||||||
$_hz_str " Hz"
|
$_hz_str " Hz"
|
||||||
|
|
|
||||||
|
|
@ -1,109 +1,78 @@
|
||||||
@guard _LOGO_SCREEN_DSS_
|
@guard _DISPLAY_INFO_DSS_
|
||||||
|
|
||||||
_print_logo_screen:
|
|
||||||
|
|
||||||
|
_print_machine_info:
|
||||||
|
mov R9, $_bios_logo_2_line_1
|
||||||
|
mov R10, 0x0C
|
||||||
|
int 0x30 ## Print Next Logo Line
|
||||||
|
mov R10, 0x02
|
||||||
|
int 0x30 ## Print New Line
|
||||||
mov R9, $_bios_logo_2_line_2
|
mov R9, $_bios_logo_2_line_2
|
||||||
mov R10, 0x0A
|
mov R10, 0x0C
|
||||||
int 0x30
|
int 0x30 ## Print Next Logo Line
|
||||||
|
mov R10, 0x01
|
||||||
|
mov R9, 32
|
||||||
|
int 0x30 ## Print ' ' character
|
||||||
|
mov R10, 0x0B
|
||||||
mov R9, $_bios_logo_2_line_2
|
int 0x30 ## Invert colors
|
||||||
mov R10, 0x0A
|
mov R10, 0x0C
|
||||||
int 0x30
|
|
||||||
|
|
||||||
mov R10, 0x03
|
|
||||||
mov R9, $_bios_name
|
mov R9, $_bios_name
|
||||||
int 0x30 ## Print BIOS Name
|
int 0x30 ## Print BIOS Name
|
||||||
|
|
||||||
mov R10, 0x04
|
mov R10, 0x04
|
||||||
mov R9, [$_bios_version_number_maj]
|
mov R9, [$_bios_version_number_maj]
|
||||||
int 0x30 ## Print BIOS Version (Major)
|
int 0x30 ## Print BIOS Version (Major)
|
||||||
|
|
||||||
mov R10, 0x01
|
mov R10, 0x01
|
||||||
mov R9, 46
|
mov R9, 46
|
||||||
int 0x30 ## Print '.' character
|
int 0x30 ## Print '.' character
|
||||||
|
|
||||||
mov R10, 0x04
|
mov R10, 0x04
|
||||||
mov R9, [$_bios_version_number_min]
|
mov R9, [$_bios_version_number_min]
|
||||||
int 0x30 ## Print BIOS Version (Minor)
|
int 0x30 ## Print BIOS Version (Minor)
|
||||||
|
mov R10, 0x0B
|
||||||
|
int 0x30 ## Invert colors
|
||||||
mov R10, 0x02
|
mov R10, 0x02
|
||||||
int 0x30 ## Print New Line
|
int 0x30 ## Print New Line
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R9, $_bios_logo_2_line_3
|
mov R9, $_bios_logo_2_line_3
|
||||||
mov R10, 0x0A
|
mov R10, 0x0C
|
||||||
int 0x30
|
int 0x30 ## Print Next Logo Line
|
||||||
|
mov R10, 0x0C
|
||||||
mov R10, 0x03
|
|
||||||
mov R9, $_clock_str
|
mov R9, $_clock_str
|
||||||
int 0x30 ## Print Clock label
|
int 0x30 ## Print Clock label
|
||||||
|
|
||||||
mov R10, 0x04
|
mov R10, 0x04
|
||||||
mov R9, [CMOS_Settings.CLOCK_SPEED]
|
mov R9, [CMOS_Settings.CLOCK_SPEED]
|
||||||
int 0x30 ## Print Clock speed
|
int 0x30 ## Print Clock speed
|
||||||
|
mov R10, 0x0C
|
||||||
mov R10, 0x03
|
|
||||||
mov R9, $_hz_str
|
mov R9, $_hz_str
|
||||||
int 0x30 ## Print hz label
|
int 0x30 ## Print hz label
|
||||||
|
|
||||||
mov R10, 0x02
|
mov R10, 0x02
|
||||||
int 0x30 ## Print New Line
|
int 0x30 ## Print New Line
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R9, $_bios_logo_2_line_4
|
mov R9, $_bios_logo_2_line_4
|
||||||
mov R10, 0x0A
|
mov R10, 0x0C
|
||||||
int 0x30
|
int 0x30 ## Print Next Logo Line
|
||||||
|
mov R10, 0x0C
|
||||||
mov R10, 0x03
|
|
||||||
mov R9, $_mem_str
|
mov R9, $_mem_str
|
||||||
int 0x30 ## Print Memory label
|
int 0x30 ## Print Memory label
|
||||||
|
|
||||||
mov R10, 0x04
|
mov R10, 0x04
|
||||||
mov R9, [CMOS_Settings.MEM_START]
|
mov R9, [CMOS_Settings.MEM_START]
|
||||||
int 0x30 ## Print Memory start
|
int 0x30 ## Print Memory start
|
||||||
|
|
||||||
mov R10, 0x01
|
mov R10, 0x01
|
||||||
mov R9, 47
|
mov R9, 47
|
||||||
int 0x30 ## Print '/' character
|
int 0x30 ## Print '/' character
|
||||||
|
|
||||||
mov R10, 0x04
|
mov R10, 0x04
|
||||||
mov R9, [CMOS_Settings.MEM_SIZE]
|
mov R9, [CMOS_Settings.MEM_SIZE]
|
||||||
int 0x30 ## Print Memory size
|
int 0x30 ## Print Memory size
|
||||||
|
mov R10, 0x0C
|
||||||
mov R10, 0x03
|
|
||||||
mov R9, $_byte_str
|
mov R9, $_byte_str
|
||||||
int 0x30 ## Print bytes label
|
int 0x30 ## Print bytes label
|
||||||
|
|
||||||
mov R10, 0x02
|
mov R10, 0x02
|
||||||
int 0x30 ## Print New Line
|
int 0x30 ## Print New Line
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R9, $_bios_logo_2_line_5
|
mov R9, $_bios_logo_2_line_5
|
||||||
mov R7, 4
|
mov R7, 4
|
||||||
mov ACC, 19
|
mov ACC, 19
|
||||||
mov R10, 0x0B
|
|
||||||
int 0x30
|
|
||||||
_print_machine_info_logo_loop:
|
_print_machine_info_logo_loop:
|
||||||
inc R7
|
inc R7
|
||||||
mov R10, 0x0A
|
mov R10, 0x0C
|
||||||
int 0x30
|
int 0x30 ## Print Next Logo Line
|
||||||
addip R9, 54 ## 90 is the length of a line
|
addip R9, 54 ## 54 is the length of a line
|
||||||
mov R10, 0x08
|
|
||||||
int 0x30
|
|
||||||
mov R10, 0x02
|
mov R10, 0x02
|
||||||
int 0x30
|
int 0x30 ## Print New Line
|
||||||
debug_break
|
|
||||||
jls $_print_machine_info_logo_loop, R7
|
jls $_print_machine_info_logo_loop, R7
|
||||||
mov R10, 0x0B
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
@ -53,6 +53,7 @@ _int_30_handler:
|
||||||
jeq $_int_30_flush_buffer_text_single, 0x0009
|
jeq $_int_30_flush_buffer_text_single, 0x0009
|
||||||
jeq $_int_30_store_string_text_single, 0x000A
|
jeq $_int_30_store_string_text_single, 0x000A
|
||||||
jeq $_int_30_invert_colors_text_single, 0x000B
|
jeq $_int_30_invert_colors_text_single, 0x000B
|
||||||
|
jeq $_int_30_print_string_buffered, 0x000C
|
||||||
jeq $_int_30_clear_screen, 0x00E0
|
jeq $_int_30_clear_screen, 0x00E0
|
||||||
jeq $_int_30_refresh_screen, 0x00E1
|
jeq $_int_30_refresh_screen, 0x00E1
|
||||||
jmp $_int_30_end
|
jmp $_int_30_end
|
||||||
|
|
@ -114,6 +115,12 @@ _int_30_invert_colors_text_single:
|
||||||
_int_30_invert_colors_text_single_normal:
|
_int_30_invert_colors_text_single_normal:
|
||||||
movb [VGA_Registers.TEXT_SIGNLE_INVERT], 0
|
movb [VGA_Registers.TEXT_SIGNLE_INVERT], 0
|
||||||
jmp $_int_30_end
|
jmp $_int_30_end
|
||||||
|
_int_30_print_string_buffered:
|
||||||
|
mov [VGA_Registers.TEXT_SIGNLE_STR], R9
|
||||||
|
debug_break
|
||||||
|
movb [VGA_Registers.SIGNAL], Sig_VGA_Text_Single_Color.PRINT_STRING
|
||||||
|
jmp $_int_30_end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_int_30_clear_screen:
|
_int_30_clear_screen:
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
int 0x20 ## -Calling int 0x20 with 0x00 as parameter, to set new handler up
|
int 0x20 ## -Calling int 0x20 with 0x00 as parameter, to set new handler up
|
||||||
|
|
||||||
push 0
|
push 0
|
||||||
call $_print_machine_info
|
call $_print_machine_info ## Print BIOS logo and machine info
|
||||||
|
|
||||||
## MBR Loading
|
## MBR Loading
|
||||||
and FL, 0b1111111111111110 ## Disable interrupts
|
and FL, 0b1111111111111110 ## Disable interrupts
|
||||||
|
|
@ -32,136 +32,10 @@
|
||||||
## ========================================================================
|
## ========================================================================
|
||||||
|
|
||||||
@include <drivers.dss>
|
@include <drivers.dss>
|
||||||
|
@include <display_info.dss>
|
||||||
|
|
||||||
|
## This file contains the .data section, so it needs to be the last thing included
|
||||||
@include <utils.dss>
|
@include <utils.dss>
|
||||||
|
## ===============================================================================
|
||||||
|
|
||||||
_print_machine_info:
|
.fixed 4096, 0xFF ## BIOS Needs to be 4096 Bytes exactly
|
||||||
|
|
||||||
|
|
||||||
mov R9, $_bios_logo_2_line_1
|
|
||||||
mov R10, 0x0A
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
mov R10, 0x08 ## Print and flush buffer
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
mov R10, 0x02
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R9, $_bios_logo_2_line_2
|
|
||||||
mov R10, 0x0A
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
mov R10, 0x08 ## Print and flush buffer
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R10, 0x0A
|
|
||||||
mov R9, $_bios_name
|
|
||||||
int 0x30 ## Print BIOS Name
|
|
||||||
|
|
||||||
mov R10, 0x05
|
|
||||||
mov R9, [$_bios_version_number_maj]
|
|
||||||
int 0x30 ## Print BIOS Version (Major)
|
|
||||||
|
|
||||||
mov R10, 0x06
|
|
||||||
mov R9, 46
|
|
||||||
int 0x30 ## Print '.' character
|
|
||||||
|
|
||||||
mov R10, 0x05
|
|
||||||
mov R9, [$_bios_version_number_min]
|
|
||||||
int 0x30 ## Print BIOS Version (Minor)
|
|
||||||
|
|
||||||
mov R10, 0x02
|
|
||||||
int 0x30 ## Print New Line
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R9, $_bios_logo_2_line_3
|
|
||||||
mov R10, 0x0A
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
mov R10, 0x08 ## Print and flush buffer
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R10, 0x0A
|
|
||||||
mov R9, $_clock_str
|
|
||||||
int 0x30 ## Print Clock label
|
|
||||||
|
|
||||||
mov R10, 0x05
|
|
||||||
mov R9, [CMOS_Settings.CLOCK_SPEED]
|
|
||||||
int 0x30 ## Print Clock speed
|
|
||||||
|
|
||||||
mov R10, 0x0A
|
|
||||||
mov R9, $_hz_str
|
|
||||||
int 0x30 ## Print hz label
|
|
||||||
|
|
||||||
mov R10, 0x02
|
|
||||||
int 0x30 ## Print New Line
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R9, $_bios_logo_2_line_4
|
|
||||||
mov R10, 0x0A
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
mov R10, 0x08 ## Print and flush buffer
|
|
||||||
int 0x30
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R10, 0x0A
|
|
||||||
mov R9, $_mem_str
|
|
||||||
int 0x30 ## Print Memory label
|
|
||||||
|
|
||||||
mov R10, 0x05
|
|
||||||
mov R9, [CMOS_Settings.MEM_START]
|
|
||||||
int 0x30 ## Print Memory start
|
|
||||||
|
|
||||||
mov R10, 0x06
|
|
||||||
mov R9, 47
|
|
||||||
int 0x30 ## Print '/' character
|
|
||||||
|
|
||||||
mov R10, 0x05
|
|
||||||
mov R9, [CMOS_Settings.MEM_SIZE]
|
|
||||||
int 0x30 ## Print Memory size
|
|
||||||
|
|
||||||
mov R10, 0x0A
|
|
||||||
mov R9, $_byte_str
|
|
||||||
int 0x30 ## Print bytes label
|
|
||||||
|
|
||||||
mov R10, 0x02
|
|
||||||
int 0x30 ## Print New Line
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mov R9, $_bios_logo_2_line_5
|
|
||||||
mov R7, 4
|
|
||||||
mov ACC, 19
|
|
||||||
_print_machine_info_logo_loop:
|
|
||||||
inc R7
|
|
||||||
mov R10, 0x0A
|
|
||||||
int 0x30
|
|
||||||
addip R9, 54 ## 90 is the length of a line
|
|
||||||
mov R10, 0x08
|
|
||||||
int 0x30
|
|
||||||
mov R10, 0x02
|
|
||||||
int 0x30
|
|
||||||
jls $_print_machine_info_logo_loop, R7
|
|
||||||
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
.fixed 4096, 0x00 ## BIOS Needs to be 4096 Bytes exactly
|
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@ if [ $? -eq 0 ]; then
|
||||||
/bin/bash ./load_mbr
|
/bin/bash ./load_mbr
|
||||||
cd ..
|
cd ..
|
||||||
printf "${green}Compiling Test Program...\n"
|
printf "${green}Compiling Test Program...\n"
|
||||||
./dasm dss/newTest.dss -o newTest.bin --extmov --extalu --save-disassembly disassembly/newTest.dds --verbose
|
./dasm dss/activeTest.dss -o activeTest.bin --extmov --extalu --save-disassembly disassembly/activeTest.dds --verbose
|
||||||
printf "\n${green}Running Application...\n\n${clear}"
|
printf "\n${green}Running Application...\n\n${clear}"
|
||||||
./ddb config/testMachine.dvm --force-load newTest.bin 0x00 --verbose-load
|
./ddb config/testMachine.dvm --force-load activeTest.bin 0x00 --verbose-load
|
||||||
cp dragon/disk1.dr ../extra/dragon/disk1.dr
|
cp dragon/disk1.dr ../extra/dragon/disk1.dr
|
||||||
cp dragon/cmos.dr ../extra/dragon/cmos.dr
|
cp dragon/cmos.dr ../extra/dragon/cmos.dr
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@ if [ $? -eq 0 ]; then
|
||||||
/bin/bash ./load_mbr
|
/bin/bash ./load_mbr
|
||||||
cd ..
|
cd ..
|
||||||
printf "${green}Compiling Test Program...\n"
|
printf "${green}Compiling Test Program...\n"
|
||||||
./dasm dss/newTest.dss -o newTest.bin --extmov --extalu --save-disassembly disassembly/newTest.dds --verbose
|
./dasm dss/activeTest.dss -o activeTest.bin --extmov --extalu --save-disassembly disassembly/activeTest.dds --verbose
|
||||||
printf "\n${green}Running Application...\n\n${clear}"
|
printf "\n${green}Running Application...\n\n${clear}"
|
||||||
./dvm config/testMachine.dvm --force-load newTest.bin 0x00
|
./dvm config/testMachine.dvm --force-load activeTest.bin 0x00
|
||||||
cp dragon/disk1.dr ../extra/dragon/disk1.dr
|
cp dragon/disk1.dr ../extra/dragon/disk1.dr
|
||||||
cp dragon/cmos.dr ../extra/dragon/cmos.dr
|
cp dragon/cmos.dr ../extra/dragon/cmos.dr
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,9 @@ clear='\033[0m'
|
||||||
|
|
||||||
printf "\n${green}Reloading MBR Block...\n${clear}"
|
printf "\n${green}Reloading MBR Block...\n${clear}"
|
||||||
cd ..
|
cd ..
|
||||||
cp ../extra/dss/mbr.dss ./dss/mbr.dss
|
cp ../extra/dss/drake.dss ./dss/drake.dss
|
||||||
./dasm dss/mbr.dss -o dragon/mbr.bin --save-disassembly disassembly/mbr.dds --verbose
|
./dasm dss/drake.dss -o dragon/drake.bin --save-disassembly disassembly/drake.dds --verbose
|
||||||
./dtools load-binary dragon/disk1.dr dragon/mbr.bin 0x00000000
|
./dtools load-binary dragon/disk1.dr dragon/drake.bin 0x00000000
|
||||||
printf "\n"
|
printf "\n"
|
||||||
cp dragon/disk1.dr ../extra/dragon/disk1.dr
|
cp dragon/disk1.dr ../extra/dragon/disk1.dr
|
||||||
rm dragon/mbr.bin
|
rm dragon/drake.bin
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
dasm dss/test1.dss -o test1.bin --save-disassembly disassembly/test1.dds --verbose
|
dasm dss/tests/test1.dss -o test1.bin --save-disassembly disassembly/test1.dds --verbose
|
||||||
ddb config/testMachine.dvm --force-load test1.bin 0x00 --verbose-load --hide-vdisplay
|
ddb config/testMachine.dvm --force-load test1.bin 0x00 --verbose-load --hide-vdisplay
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
dasm dss/test2.dss -o test2.bin --save-disassembly disassembly/test2.dds --verbose
|
dasm dss/tests/test2.dss -o test2.bin --save-disassembly disassembly/test2.dds --verbose
|
||||||
ddb config/testMachine.dvm --force-load test2.bin 0x00 --verbose-load --hide-vdisplay
|
ddb config/testMachine.dvm --force-load test2.bin 0x00 --verbose-load --hide-vdisplay
|
||||||
|
|
@ -54,6 +54,19 @@ namespace dragon
|
||||||
char c = (char)mem.read8(vga_addr + tRegisters::TextSingleCharacter);
|
char c = (char)mem.read8(vga_addr + tRegisters::TextSingleCharacter);
|
||||||
single_text_add_char_to_line(c);
|
single_text_add_char_to_line(c);
|
||||||
}
|
}
|
||||||
|
else if (signal == tSignalValues::TextSingleColor_DirectPrintString)
|
||||||
|
{
|
||||||
|
uint16_t first_char_addr = mem.read16(vga_addr + tRegisters::TextSingleString);
|
||||||
|
char c = ' ';
|
||||||
|
int h = 0;
|
||||||
|
while (c != 0)
|
||||||
|
{
|
||||||
|
char c = (char)mem.read8(first_char_addr);
|
||||||
|
single_text_add_char_to_line(c);
|
||||||
|
first_char_addr++;
|
||||||
|
if (c == 0) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (signal == tSignalValues::TextSingleColor_StoreChar)
|
else if (signal == tSignalValues::TextSingleColor_StoreChar)
|
||||||
{
|
{
|
||||||
char c = (char)mem.read8(vga_addr + tRegisters::TextSingleCharacter);
|
char c = (char)mem.read8(vga_addr + tRegisters::TextSingleCharacter);
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ namespace dragon
|
||||||
inline static constexpr uint8_t Signal = 0x03;
|
inline static constexpr uint8_t Signal = 0x03;
|
||||||
inline static constexpr uint8_t TextSingleCharacter = 0x04;
|
inline static constexpr uint8_t TextSingleCharacter = 0x04;
|
||||||
inline static constexpr uint8_t TextSingleInvertColors = 0x05;
|
inline static constexpr uint8_t TextSingleInvertColors = 0x05;
|
||||||
|
inline static constexpr uint8_t TextSingleString = 0x06;
|
||||||
};
|
};
|
||||||
public: struct tVideoModeValues
|
public: struct tVideoModeValues
|
||||||
{
|
{
|
||||||
|
|
@ -29,6 +30,7 @@ namespace dragon
|
||||||
inline static constexpr uint8_t TextSingleColor_DirectPrintBuffAndFlush = 0x04;
|
inline static constexpr uint8_t TextSingleColor_DirectPrintBuffAndFlush = 0x04;
|
||||||
inline static constexpr uint8_t TextSingleColor_FlushBuffer = 0x05;
|
inline static constexpr uint8_t TextSingleColor_FlushBuffer = 0x05;
|
||||||
inline static constexpr uint8_t TextSingleColor_DirectPrintBuffNoFlush = 0x06;
|
inline static constexpr uint8_t TextSingleColor_DirectPrintBuffNoFlush = 0x06;
|
||||||
|
inline static constexpr uint8_t TextSingleColor_DirectPrintString = 0x07;
|
||||||
|
|
||||||
inline static constexpr uint8_t RefreshScreen = 0xE0;
|
inline static constexpr uint8_t RefreshScreen = 0xE0;
|
||||||
inline static constexpr uint8_t ClearSCreen = 0xE1;
|
inline static constexpr uint8_t ClearSCreen = 0xE1;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue