more powerful load-sectors
This commit is contained in:
parent
96c217ab1c
commit
d771fb6bab
|
@ -0,0 +1,43 @@
|
||||||
|
fn load-sectors disk: (addr disk), lba: int, n: int, out: (addr stream byte) {
|
||||||
|
var curr-lba/ebx: int <- copy lba
|
||||||
|
var remaining/edx: int <- copy n
|
||||||
|
{
|
||||||
|
compare remaining, 0
|
||||||
|
break-if-<=
|
||||||
|
# sectors = min(remaining, 0x100)
|
||||||
|
var sectors/eax: int <- copy remaining
|
||||||
|
compare sectors, 0x100
|
||||||
|
{
|
||||||
|
break-if-<=
|
||||||
|
sectors <- copy 0x100
|
||||||
|
}
|
||||||
|
#
|
||||||
|
read-ata-disk disk, curr-lba, sectors, out
|
||||||
|
#
|
||||||
|
remaining <- subtract sectors
|
||||||
|
curr-lba <- add sectors
|
||||||
|
loop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn store-sectors disk: (addr disk), lba: int, n: int, in: (addr stream byte) {
|
||||||
|
var curr-lba/ebx: int <- copy lba
|
||||||
|
var remaining/edx: int <- copy n
|
||||||
|
{
|
||||||
|
compare remaining, 0
|
||||||
|
break-if-<=
|
||||||
|
# sectors = min(remaining, 0x100)
|
||||||
|
var sectors/eax: int <- copy remaining
|
||||||
|
compare sectors, 0x100
|
||||||
|
{
|
||||||
|
break-if-<=
|
||||||
|
sectors <- copy 0x100
|
||||||
|
}
|
||||||
|
#
|
||||||
|
write-ata-disk disk, curr-lba, sectors, in
|
||||||
|
#
|
||||||
|
remaining <- subtract sectors
|
||||||
|
curr-lba <- add sectors
|
||||||
|
loop
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,14 +18,14 @@
|
||||||
fn main screen: (addr screen), keyboard: (addr keyboard), data-disk: (addr disk) {
|
fn main screen: (addr screen), keyboard: (addr keyboard), data-disk: (addr disk) {
|
||||||
var text-storage: (stream byte 0x200)
|
var text-storage: (stream byte 0x200)
|
||||||
var text/esi: (addr stream byte) <- address text-storage
|
var text/esi: (addr stream byte) <- address text-storage
|
||||||
read-ata-disk data-disk, 0/lba, 1/num-sectors, text
|
load-sectors data-disk, 0/lba, 1/num-sectors, text
|
||||||
|
|
||||||
var word-count/eax: int <- word-count text
|
var word-count/eax: int <- word-count text
|
||||||
|
|
||||||
var result-storage: (stream byte 0x10)
|
var result-storage: (stream byte 0x10)
|
||||||
var result/edi: (addr stream byte) <- address result-storage
|
var result/edi: (addr stream byte) <- address result-storage
|
||||||
write-int32-decimal result, word-count
|
write-int32-decimal result, word-count
|
||||||
write-ata-disk data-disk, 0/lba, 1/num-sectors, result
|
store-sectors data-disk, 0/lba, 1/num-sectors, result
|
||||||
}
|
}
|
||||||
|
|
||||||
fn word-count in: (addr stream byte) -> _/eax: int {
|
fn word-count in: (addr stream byte) -> _/eax: int {
|
||||||
|
|
17
apps/img.mu
17
apps/img.mu
|
@ -36,22 +36,7 @@ fn load-image self: (addr image), data-disk: (addr disk) {
|
||||||
var s/ebx: (addr stream byte) <- address s-storage
|
var s/ebx: (addr stream byte) <- address s-storage
|
||||||
draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "loading sectors from data disk", 3/fg, 0/bg
|
draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "loading sectors from data disk", 3/fg, 0/bg
|
||||||
move-cursor-to-left-margin-of-next-line 0/screen
|
move-cursor-to-left-margin-of-next-line 0/screen
|
||||||
read-ata-disk data-disk, 0/lba, 0x100/sectors, s
|
load-sectors data-disk, 0/lba, 0x1000/sectors, s
|
||||||
read-ata-disk data-disk, 0x100/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0x200/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0x300/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0x400/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0x500/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0x600/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0x700/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0x800/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0x900/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0xa00/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0xb00/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0xc00/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0xd00/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0xe00/lba, 0x100/sectors, s
|
|
||||||
read-ata-disk data-disk, 0xf00/lba, 0x100/sectors, s
|
|
||||||
draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "parsing", 3/fg, 0/bg
|
draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, "parsing", 3/fg, 0/bg
|
||||||
move-cursor-to-left-margin-of-next-line 0/screen
|
move-cursor-to-left-margin-of-next-line 0/screen
|
||||||
initialize-image self, s
|
initialize-image self, s
|
||||||
|
|
Loading…
Reference in New Issue