From b90cc537efab0f5eb2c5776d4655b0e0aacd7a63 Mon Sep 17 00:00:00 2001 From: OmniaX-Dev Date: Mon, 16 Sep 2024 04:25:53 +0200 Subject: [PATCH] Refactoring in bios/drake --- build.nr | 2 +- extra/config/testMachine.dvm | 2 +- extra/dragon/bios.bin | Bin 4096 -> 4096 bytes extra/dragon/cmos.dr | Bin 128 -> 128 bytes extra/dragon/disk1.dr | Bin 4194304 -> 4194304 bytes extra/dss/bios/data.dss | 63 +++++++++++++++ .../bios/{display_info.dss => display.dss} | 53 ++++++++++++- extra/dss/bios/drivers.dss | 19 ++++- extra/dss/bios/entry.dss | 4 +- extra/dss/bios/utils.dss | 53 ++++++++----- extra/dss/bios_api.dss | 54 ++++++++++++- extra/dss/drake/bootsector.dss | 75 +++++++----------- extra/dss/drake/disk.dss | 72 ----------------- extra/dss/drake/loader.dss | 7 +- 14 files changed, 250 insertions(+), 154 deletions(-) rename extra/dss/bios/{display_info.dss => display.dss} (57%) delete mode 100644 extra/dss/drake/disk.dss diff --git a/build.nr b/build.nr index 9851ace..f800fc8 100644 --- a/build.nr +++ b/build.nr @@ -1 +1 @@ -1614 +1617 diff --git a/extra/config/testMachine.dvm b/extra/config/testMachine.dvm index ecf8ba2..1c6dff5 100644 --- a/extra/config/testMachine.dvm +++ b/extra/config/testMachine.dvm @@ -7,7 +7,7 @@ fixed_clock = false clock_rate_sec = 5000 memory_extension_pages = 16 -screen_redraw_rate_per_second = 10 +screen_redraw_rate_per_second = 20 SingleColor_foreground = #009900FF SingleColor_background = #111111FF diff --git a/extra/dragon/bios.bin b/extra/dragon/bios.bin index 2662e755b6ecd23da4a97da11015cec21d54a838..7a15e061eeaec0dae64e5d77861ef27d144e28b2 100644 GIT binary patch delta 682 zcmYjPF^CgE6n(oh^VgeIGrKVxEe1k}6;ZJa zc7j4I#7->jY(=buE3=1SsbJwXm-sh(L5rFH-sjKzZ~n|U9>*g07Vkw*Ue9!^@jxfM zKjgjHc%+M#hTCjBUV$eo@Jz>zF>WvBDo|9X#`B>Z0C(Y(Je_RH3(o7wO}W1NF3=() zE58A4y~yQWTO-k@HKmz0KF}dUw%Bwqhg0ktxs^Q`U2OgJqW9QL0YwdvUCz;=?pwe>o{iV zEY>Vtgtl}QzNH&DZs`tMmY$+*=>=w%UZTip+8sqQj3ePPjw7iV3WgmWb}Qy4VTZyY z_XFpR2e&dyUn?s9qkN>)Dg`(YFIhpw;h&_aB-tNJZcNWpq=v*}i6iAK>s8q*jHndz z7*4jRJ({j2LvNNvqO{KiGY*HD&itU}pR4f`6s;OW$J7$DQ8T8FRuKC09>30z-U6x7 zKt@B_2T!(_=$sBL9RNj>po>7Dw!=!Np7zM|y lv2in7oHB*{!`)y)bZCGV_T;^p*uJwjlKcHzdu92c zaAwY8UjQSw?d;2uL+vg*o_Pn%d0|h129w%#_Dt*%w5tnwXy6EAP64V9SGG zvVz?r{xq9Ap95odwG;adsPoQ#DNH^qcqqj1LPscMpKbv{$4EMA`an0Ajf%Et%LeJx zN;E39L3Eox%Wsefy+bPW5k}}Utk74G&=0WCFJwX+41_KAgmXCIYsiJ~U|;wcSA`#A zCHxfYj-SQeRWPZ_Dp*&Ar7^0~03!f-=>rA; literal 128 ScmWf4`2SzHgNtE+03!f(B?9~a diff --git a/extra/dragon/disk1.dr b/extra/dragon/disk1.dr index f7e074ecdfbad5ea7e3cf54ef57f4afa1f627cde..ac3c3c0192da697e1f8e3d14962abf6e36e91fa1 100644 GIT binary patch delta 415 zcmX|*$x0ky7)Ag79jdKvO$}OXt#=McMZNkgN=c^b0PW+ zK7joIE`5&d-1rJ=VTm8y%Yg%zuhnYVR+ipocwye}vOe7B1>rw0G{IBSjJBWKe&>DR z)>`Xa|2}CnPLp;4&tApdn`deCCyn+~WB206WY82cN?&^~K1$*Po5Y7%YEBZ@O*UBd z{Akw;;{B)j%og9Q$*hxG{^s_%?$%3w*{!-}JFkjs%>Pl>*otf4A&*F<16XRk+Oo}P-RZNQ+F)QZ8H!&|3#G+Ud%VI^WiZ!t=HpF+aDSn8b J;@1sZ4=(@=TKWJ0 delta 546 zcmbu5KTi}<6vgj6+*zD;nOSDXciyTnBch8U;(ru{B{T$yzPP(1rG-+F$Oj-{gm8>8 z76w0qz0%v+S=(9A`2naIXA1BGc$53fxw*+bIXBBPl@*No>Sd9peo|tk#8XwkmUymvRxg(c%;$dUrL~4%8~2O193;LBv;)5rjQK$j zO41mv9Zk1gZ=OG+afuiwE)!RXHZeh5C9V;Z#C2kdxIs)4 hH;G%sZQ>4bm$*mVCuWET#6x11ctkuV=DuM5&tDovddvU- diff --git a/extra/dss/bios/data.dss b/extra/dss/bios/data.dss index 568aef6..b5b6df9 100644 --- a/extra/dss/bios/data.dss +++ b/extra/dss/bios/data.dss @@ -184,6 +184,69 @@ @end @raw_export_end @export_comment BIOS_API " --\n" + + +@export_comment BIOS_API " Disk driver modes." +@raw_export_start BIOS_API +@group DiskMode + READ 0x00 + WRITE 0x01 +@end +@raw_export_end +@export_comment BIOS_API " --\n" + +@export_comment BIOS_API " Disk driver signals." +@raw_export_start BIOS_API +@group DiskSignals + START 0x00 + CANCEL 0x01 + IGNORE 0xFF +@end +@raw_export_end +@export_comment BIOS_API " --\n" + +@export_comment BIOS_API " Disk driver status." +@raw_export_start BIOS_API +@group DiskStatus + FREE 0x00 + WRITING 0x01 + READING 0x02 +@end +@raw_export_end +@export_comment BIOS_API " --\n" + +@export_comment BIOS_API " Disk driver registers." +@raw_export_start BIOS_API +@group DiskRegisters + SIGNAL 0x00 + MODE_SELECTOR 0x01 + DISK_SELECTOR 0x02 + SECTOR_SELECTOR 0x03 + ADDRESS_SELECTOR 0x05 + DATA_SIZE 0x07 + MEMORY_ADDRESS 0x09 + RO_STATUS 0x0B + RO_CURRENT_DISK 0x0C + RO_CURRENT_SECTOR 0x0D + RO_CURRENT_ADDRESS 0x0F + RO_REST_DATA_SIZE 0x11 + RO_MEMORY_ADDRESS 0x13 +@end +@raw_export_end +@export_comment BIOS_API " --\n" + +@export_comment BIOS_API " Disk driver data structure." +@raw_export_start BIOS_API +@struct DiskDriverData + Mode:1 > 0x00 + Disk:1 > 0x00 + Sector:2 > 0x00, 0x00 + Address:2 > 0x00, 0x00 + DataSize:2 > 0x00, 0x00 + MemoryAddress:2 > 0x00, 0x00 +@end +@raw_export_end +@export_comment BIOS_API " --\n" ## =============================================================================================== .data diff --git a/extra/dss/bios/display_info.dss b/extra/dss/bios/display.dss similarity index 57% rename from extra/dss/bios/display_info.dss rename to extra/dss/bios/display.dss index 447b0bd..baf88f1 100644 --- a/extra/dss/bios/display_info.dss +++ b/extra/dss/bios/display.dss @@ -2,7 +2,54 @@ .code -_print_machine_info: +_print_string_text16: ## _print_string(String* str, Text16VModeCell* cell) + arg R1 ## @Param: String addr + arg R2 ## @Param: Cell addr +_print_string_text16_loop: + mov R6, R2 ## Restore Cell addr + movb *R6, *R1 ## Move next character into cell + inc R1 ## Point address to next character + addip R6, 3 ## Offset to X coord of cell + movb R7, *R6 ## Store X coord in R7 + inc R7 ## Increment X coord + movb *R6, R7 ## Store new X coord in cell + mov R10, 0x21 ## int 0x30 parameter for print_char_text16 + mov R9, R2 ## int 0x30 parameter for text_cell address + int 0x30 ## bios_video_int + movb ACC, *R1 ## Copy current character in ACC + jne $_print_string_text16_loop, 0 ## Jump if current character is not 0 (NULL_TERM) + ret + + + + +_print_integer_signle_color: + mov R1, 0 + arg ACC + jne $_print_integer_signle_color_loop, 0 + push 48 ## '0' ASCII is 48 + inc R1 + jmp $_print_integer_signle_color_loop_end +_print_integer_signle_color_loop: + jeq $_print_integer_signle_color_loop_end, 0 + divipu ACC, 10 + addipu RV, 48 + push RV + inc R1 + jmp $_print_integer_signle_color_loop +_print_integer_signle_color_loop_end: + pop R9 + dec R1 + movb [VGA_Registers.TEXT_SINGLE_CHAR], R9 + movb [VGA_Registers.SIGNAL], reg(S_REG_1) + mov ACC, R1 + jne $_print_integer_signle_color_loop_end, 0 + ret + + + + +_print_machine_info_signle_color: mov R9, $_bios_logo_2_line_1 mov R10, 0x0C int 0x30 ## Print Next Logo Line @@ -69,12 +116,12 @@ _print_machine_info: mov R9, $_bios_logo_2_line_5 mov R7, 4 mov ACC, 19 -_print_machine_info_logo_loop: +_print_machine_info_logo_signle_color_loop: inc R7 mov R10, 0x0C int 0x30 ## Print Next Logo Line addip R9, 54 ## 54 is the length of a line mov R10, 0x02 int 0x30 ## Print New Line - jls $_print_machine_info_logo_loop, R7 + jls $_print_machine_info_logo_signle_color_loop, R7 ret \ No newline at end of file diff --git a/extra/dss/bios/drivers.dss b/extra/dss/bios/drivers.dss index 910a7e4..0218e36 100644 --- a/extra/dss/bios/drivers.dss +++ b/extra/dss/bios/drivers.dss @@ -6,7 +6,8 @@ _int_20_handler: mov ACC, R10 jeq $_int_20_disk_interface, 0x0010 - jeq $_int_20_disk_interface_get_disk_list, 0x0011 + jeq $_int_20_disk_interface_get_disk_list, 0x0011 ## TODO: Implement + jeq $_int_20_disk_interface_load_from_ddd_blocking, 0x0012 jeq $_int_20_set_new_interrupt_handler, 0x0000 jeq $_int_20_clear_interrupt, 0x0001 jmp $_int_20_end @@ -29,6 +30,11 @@ _int_20_disk_interface: jmp $_int_20_end _int_20_disk_interface_get_disk_list: jmp $_int_20_end +_int_20_disk_interface_load_from_ddd_blocking: + push R9 ## DDD Address + push 1 + call $_disk_load_from_ddd_blocking + jmp $_int_20_end _int_20_set_new_interrupt_handler: push R8 ## Interrupt Code push R9 ## Handler Address @@ -61,6 +67,7 @@ _int_30_handler: jeq $_int_30_print_string_buffered, 0x000C jeq $_int_30_write_vram_text16, 0x0021 + jeq $_int_30_print_string_text16, 0x0022 jeq $_int_30_clear_screen, 0x00E0 jeq $_int_30_refresh_screen, 0x00E1 @@ -87,13 +94,13 @@ _int_30_direct_print_integer_text_single: mov reg(S_REG_1), Sig_VGA_Text_Single_Color.PRINT_CHAR push R9 push 1 - call $_print_integer + call $_print_integer_signle_color jmp $_int_30_end _int_30_store_integer_text_single: mov reg(S_REG_1), Sig_VGA_Text_Single_Color.STORE_CHAR push R9 push 1 - call $_print_integer + call $_print_integer_signle_color jmp $_int_30_end _int_30_store_char_text_single: movb [VGA_Registers.TEXT_SINGLE_CHAR], R9 @@ -140,6 +147,12 @@ _int_30_write_vram_text16: movb [VGA_Registers.MEMORY_CONTROLLER_Y_BYTE], *R9 movb [VGA_Registers.SIGNAL], Sig_VGA_Text_16_Color.WRITE_VRAM jmp $_int_30_end +_int_30_print_string_text16: + push R8 ## String addr + push R9 ## TextCell16 addr + push 2 + call $_print_string_text16 + jmp $_int_30_end _int_30_clear_screen: movb [VGA_Registers.SIGNAL], Sig_VGA_Text_Single_Color.CLEAR_SCREEN diff --git a/extra/dss/bios/entry.dss b/extra/dss/bios/entry.dss index 5738ba8..feac823 100644 --- a/extra/dss/bios/entry.dss +++ b/extra/dss/bios/entry.dss @@ -4,7 +4,7 @@ @include @include @include -@include +@include ## ============================= BIOS Program ============================= .code @@ -21,7 +21,7 @@ _bios_entry_point: int 0x20 ## -Calling int 0x20 with 0x00 as parameter, to set new handler up push 0 - call $_print_machine_info ## Print BIOS logo and machine info + call $_print_machine_info_signle_color ## Print BIOS logo and machine info ## MBR Loading and FL, 0b1111111111111110 ## Disable interrupts diff --git a/extra/dss/bios/utils.dss b/extra/dss/bios/utils.dss index 94c0ef2..aa73eba 100644 --- a/extra/dss/bios/utils.dss +++ b/extra/dss/bios/utils.dss @@ -2,6 +2,34 @@ .code +_disk_load_from_ddd_blocking: ## _disk_load_from_ddd_blocking(DiskDriverData* ddd) + arg R1 ## @Param: ddd + movb [{MemoryAddresses.DISK_INTERFACE + DiskRegisters.MODE_SELECTOR}], *R1 + inc R1 + movb [{MemoryAddresses.DISK_INTERFACE + DiskRegisters.DISK_SELECTOR}], *R1 + inc R1 + mov [{MemoryAddresses.DISK_INTERFACE + DiskRegisters.SECTOR_SELECTOR}], *R1 + addip R1, 2 + mov [{MemoryAddresses.DISK_INTERFACE + DiskRegisters.ADDRESS_SELECTOR}], *R1 + addip R1, 2 + mov [{MemoryAddresses.DISK_INTERFACE + DiskRegisters.DATA_SIZE}], *R1 + addip R1, 2 + mov [{MemoryAddresses.DISK_INTERFACE + DiskRegisters.MEMORY_ADDRESS}], *R1 + movb [{MemoryAddresses.DISK_INTERFACE + DiskRegisters.SIGNAL}], DiskSignals.START + and FL, 0b1111111111111110 ## Disable interrupts + mov FL, ACC +_disk_load_from_ddd_blocking_wait_loop: + ## debug_profile_start 0xE0, DBGProfilerTime.MILLIS + mov ACC, [{MemoryAddresses.DISK_INTERFACE + DiskRegisters.RO_STATUS}] + ## debug_profile_stop + jne $_disk_load_from_ddd_blocking_wait_loop, DiskStatus.FREE + or FL, 0b0000000000000001 ## Enable interrupts + mov FL, ACC + ret + + + + _load_mbr_data_block: movb [{MemoryAddresses.DISK_INTERFACE + 0x1}], 0x00 ## Mode = Read movb R1, [CMOS_Settings.BOOT_DISK] @@ -24,6 +52,9 @@ _calc_interrupt_vector_address: mov RV, ACC ret + + + _set_interrupt_vector_entry: arg R1 push R1 @@ -42,28 +73,6 @@ _set_interrupt_vector_entry_end: ret -_print_integer: - mov R1, 0 - arg ACC - jne $_print_integer_loop, 0 - push 48 ## '0' ASCII is 48 - inc R1 - jmp $_print_integer_loop_end -_print_integer_loop: - jeq $_print_integer_loop_end, 0 - divipu ACC, 10 - addipu RV, 48 - push RV - inc R1 - jmp $_print_integer_loop -_print_integer_loop_end: - pop R9 - dec R1 - movb [VGA_Registers.TEXT_SINGLE_CHAR], R9 - movb [VGA_Registers.SIGNAL], reg(S_REG_1) - mov ACC, R1 - jne $_print_integer_loop_end, 0 - ret _strlen: diff --git a/extra/dss/bios_api.dss b/extra/dss/bios_api.dss index bce2b96..f90afce 100644 --- a/extra/dss/bios_api.dss +++ b/extra/dss/bios_api.dss @@ -1,5 +1,5 @@ ## -- -## -- This file is automatically generated by the DragonAssembler (version 0.4.1613) +## -- This file is automatically generated by the DragonAssembler (version 0.4.1616) ## -- Please do not modify this file in any way. ## -- @@ -117,3 +117,55 @@ @end ## -- +## Disk driver modes. +@group DiskMode + READ 0x00 + WRITE 0x01 +@end +## -- + +## Disk driver signals. +@group DiskSignals + START 0x00 + CANCEL 0x01 + IGNORE 0xFF +@end +## -- + +## Disk driver status. +@group DiskStatus + FREE 0x00 + WRITING 0x01 + READING 0x02 +@end +## -- + +## Disk driver registers. +@group DiskRegisters + SIGNAL 0x00 + MODE_SELECTOR 0x01 + DISK_SELECTOR 0x02 + SECTOR_SELECTOR 0x03 + ADDRESS_SELECTOR 0x05 + DATA_SIZE 0x07 + MEMORY_ADDRESS 0x09 + RO_STATUS 0x0B + RO_CURRENT_DISK 0x0C + RO_CURRENT_SECTOR 0x0D + RO_CURRENT_ADDRESS 0x0F + RO_REST_DATA_SIZE 0x11 + RO_MEMORY_ADDRESS 0x13 +@end +## -- + +## Disk driver data structure. +@struct DiskDriverData + Mode:1 > 0x00 + Disk:1 > 0x00 + Sector:2 > 0x00, 0x00 + Address:2 > 0x00, 0x00 + DataSize:2 > 0x00, 0x00 + MemoryAddress:2 > 0x00, 0x00 +@end +## -- + diff --git a/extra/dss/drake/bootsector.dss b/extra/dss/drake/bootsector.dss index e2bd6dc..c22f868 100644 --- a/extra/dss/drake/bootsector.dss +++ b/extra/dss/drake/bootsector.dss @@ -3,7 +3,6 @@ @include <../bios_api.dss> @include -@include @@ -14,13 +13,15 @@ $textCell - .code _drake_bootsector_entry_point: - push 0 + push $ddd + push $dpt_block + push 2 call $_load_dpt_block + movb [VGA_Registers.VIDEO_MODE], VGA_VideoModes.TEXT_16_COLORS push 2 @@ -35,12 +36,10 @@ _drake_bootsector_entry_point: movb [$textCell.Foreground], DefaultPalette.Orange movb [$textCell.Background], DefaultPalette.Black - push $string - push $textCell - push 2 - call $_print_string - - + mov R10, 0x22 + mov R8, $string + mov R9, $textCell + int 0x30 movb [$textCell.CoordX], 8 @@ -48,10 +47,10 @@ _drake_bootsector_entry_point: movb [$textCell.Foreground], DefaultPalette.Black movb [$textCell.Background], DefaultPalette.Orange - push { $dpt_block + DPTStructure.ENTRIES_START + (2 * DPTStructure.ENTRY_SIZE_B) + DPTStructure.ENTRY_PART_LBL } - push $textCell - push 2 - call $_print_string + mov R10, 0x22 + mov R8, { $dpt_block + DPTStructure.ENTRIES_START + (2 * DPTStructure.ENTRY_SIZE_B) + DPTStructure.ENTRY_PART_LBL } + mov R9, $textCell + int 0x30 @@ -59,39 +58,25 @@ _drake_bootsector_entry_point: -_load_dpt_block: - mov [$ddd.Mode], DiskMode.READ - mov [$ddd.Disk], 0x00 - mov [$ddd.Sector], 0x0000 - mov [$ddd.Address], 0x0200 - mov [$ddd.DataSize], 512 - mov [$ddd.MemoryAddress], $dpt_block - push $ddd - push 1 - call $_disk_load_from_ddd_blocking +_load_dpt_block: ## _load_dpt_block(DiskDriverData* ddd, DPTBlock* dpt_block) + arg R1 ## @Param: ddd + arg R2 ## @Param: dpt_block + mov R3, R1 ## Copy $ddd address into R3 + movb *R1, DiskMode.READ ## $ddd.Mode + inc R1 + movb *R1, 0x00 ## $ddd.Disk + inc R1 + mov *R1, 0x0000 ## $ddd.Sector + addip R1, 2 + mov *R1, 0x0200 ## $ddd.Address + addip R1, 2 + mov *R1, 512 ## $ddd.DataSize + addip R1, 2 + mov *R1, R2 ## $ddd.MemoryAddress + mov R9, R3 ## Move original $ddd address into R9 (for int 0x20) + mov R10, 0x12 ## int 0x20 parameter for load_from_ddd_blocking + int 0x20 ## Bios interrupt ret - - - -_print_string: ## _print_string(String* str, Text16VModeCell* cell) - arg R1 ## @Param: String addr - arg R2 ## @Param: Cell addr -_print_string_loop: - mov R6, R2 ## Restore Cell addr - movb *R6, *R1 ## Move next character into cell - inc R1 ## Point address to next character - addip R6, 3 ## Offset to X coord of cell - movb R7, *R6 ## Store X coord in R7 - inc R7 ## Increment X coord - movb *R6, R7 ## Store new X coord in cell - mov R10, 0x21 ## int 0x30 parameter for print_char_text16 - mov R9, R2 ## int 0x30 parameter for text_cell address - int 0x30 ## bios_video_int - movb ACC, *R1 ## Copy current character in ACC - jne $_print_string_loop, 0 ## Jump if current character is not 0 (NULL_TERM) - ret - - .fixed 5120, 0xFF diff --git a/extra/dss/drake/disk.dss b/extra/dss/drake/disk.dss deleted file mode 100644 index 2df07a0..0000000 --- a/extra/dss/drake/disk.dss +++ /dev/null @@ -1,72 +0,0 @@ -@guard _DISK_DSS_ - -@define DISK_INTERFACE_ADDR 0x1580 - -@group DiskMode - READ 0x00 - WRITE 0x01 -@end - -@group DiskSignals - START 0x00 - CANCEL 0x01 - IGNORE 0xFF -@end - -@group DiskStatus - FREE 0x00 - WRITING 0x01 - READING 0x02 -@end - -@group DiskRegisters - SIGNAL 0x00 - MODE_SELECTOR 0x01 - DISK_SELECTOR 0x02 - SECTOR_SELECTOR 0x03 - ADDRESS_SELECTOR 0x05 - DATA_SIZE 0x07 - MEMORY_ADDRESS 0x09 - RO_STATUS 0x0B - RO_CURRENT_DISK 0x0C - RO_CURRENT_SECTOR 0x0D - RO_CURRENT_ADDRESS 0x0F - RO_REST_DATA_SIZE 0x11 - RO_MEMORY_ADDRESS 0x13 -@end - -@struct DiskDriverData - Mode:1 > 0x00 - Disk:1 > 0x00 - Sector:2 > 0x00, 0x00 - Address:2 > 0x00, 0x00 - DataSize:2 > 0x00, 0x00 - MemoryAddress:2 > 0x00, 0x00 -@end - -.code - -_disk_load_from_ddd_blocking: - arg R1 - movb [{DISK_INTERFACE_ADDR + DiskRegisters.MODE_SELECTOR}], *R1 - inc R1 - movb [{DISK_INTERFACE_ADDR + DiskRegisters.DISK_SELECTOR}], *R1 - inc R1 - mov [{DISK_INTERFACE_ADDR + DiskRegisters.SECTOR_SELECTOR}], *R1 - addip R1, 2 - mov [{DISK_INTERFACE_ADDR + DiskRegisters.ADDRESS_SELECTOR}], *R1 - addip R1, 2 - mov [{DISK_INTERFACE_ADDR + DiskRegisters.DATA_SIZE}], *R1 - addip R1, 2 - mov [{DISK_INTERFACE_ADDR + DiskRegisters.MEMORY_ADDRESS}], *R1 - movb [{DISK_INTERFACE_ADDR + DiskRegisters.SIGNAL}], DiskSignals.START - and FL, 0b1111111111111110 ## Disable interrupts - mov FL, ACC -_disk_load_from_ddd_blocking_wait_loop: - ## debug_profile_start 0xE0, DBGProfilerTime.MILLIS - mov ACC, [{DISK_INTERFACE_ADDR + DiskRegisters.RO_STATUS}] - ## debug_profile_stop - jne $_disk_load_from_ddd_blocking_wait_loop, DiskStatus.FREE - or FL, 0b0000000000000001 ## Enable interrupts - mov FL, ACC - ret \ No newline at end of file diff --git a/extra/dss/drake/loader.dss b/extra/dss/drake/loader.dss index 8fcf779..b40672a 100644 --- a/extra/dss/drake/loader.dss +++ b/extra/dss/drake/loader.dss @@ -2,7 +2,6 @@ .entry _drake_loader_entry_point @include <../bios_api.dss> -@include .data ## $_drake_logo_line_1 " ___ ___ ___ __ ______" @@ -28,9 +27,9 @@ _drake_loader_entry_point: mov [$ddd.DataSize], 5120 mov [$ddd.MemoryAddress], MemoryAddresses.RAM - push $ddd - push 1 - call $_disk_load_from_ddd_blocking + mov R9, $ddd + mov R10, 0x12 + int 0x20 jmp MemoryAddresses.RAM hlt