forked from KolibriOS/kolibrios
set cursor for out blue screen
git-svn-id: svn://kolibrios.org@816 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0c807b742c
commit
e3f6e939d2
@ -125,18 +125,18 @@ conv_abs_to_THS:
|
||||
pop bx
|
||||
retn
|
||||
; needed variables
|
||||
BPB_SecPerTrk dw 0 ; sectors per track
|
||||
BPB_NumHeads dw 0 ; number of heads
|
||||
BPB_FATSz16 dw 0 ; size of FAT
|
||||
BPB_RootEntCnt dw 0 ; count of root dir. entries
|
||||
BPB_BytsPerSec dw 0 ; bytes per sector
|
||||
BPB_RsvdSecCnt dw 0 ; number of reserved sectors
|
||||
BPB_TotSec16 dw 0 ; count of the sectors on the volume
|
||||
BPB_SecPerClus db 0 ; number of sectors per cluster
|
||||
BPB_NumFATs db 0 ; number of FAT tables
|
||||
abs_sector_adj dw 0 ; adjustment to make abs. sector number
|
||||
end_of_FAT dw 0 ; end of FAT table
|
||||
FirstDataSector dw 0 ; begin of data
|
||||
BPB_SecPerTrk dw 0 ; sectors per track
|
||||
BPB_NumHeads dw 0 ; number of heads
|
||||
BPB_FATSz16 dw 0 ; size of FAT
|
||||
BPB_RootEntCnt dw 0 ; count of root dir. entries
|
||||
BPB_BytsPerSec dw 0 ; bytes per sector
|
||||
BPB_RsvdSecCnt dw 0 ; number of reserved sectors
|
||||
BPB_TotSec16 dw 0 ; count of the sectors on the volume
|
||||
BPB_SecPerClus db 0 ; number of sectors per cluster
|
||||
BPB_NumFATs db 0 ; number of FAT tables
|
||||
abs_sector_adj dw 0 ; adjustment to make abs. sector number
|
||||
end_of_FAT dw 0 ; end of FAT table
|
||||
FirstDataSector dw 0 ; begin of data
|
||||
|
||||
;=========================================================================
|
||||
;
|
||||
@ -560,7 +560,7 @@ cfgmanager:
|
||||
.change_a:
|
||||
.loops:
|
||||
call draw_vmodes_table
|
||||
|
||||
_setcursor 25,0 ; out of screen
|
||||
xor ax,ax
|
||||
int 0x16
|
||||
; call clear_table_cursor ;clear current position of cursor
|
||||
@ -626,7 +626,7 @@ cfgmanager:
|
||||
pop word [x_save]
|
||||
push word [es:bp+2]
|
||||
pop word [y_save]
|
||||
push word [es:bp+6]
|
||||
push word [es:bp+6]
|
||||
pop word [number_vm]
|
||||
mov word [preboot_graph],bp ;save choose
|
||||
|
||||
@ -847,7 +847,7 @@ end if
|
||||
; ...
|
||||
; TODO: !!! then read flippy image track by track
|
||||
|
||||
mov cx, 0x0001 ; startcyl,startsector
|
||||
mov cx, 0x0001 ; startcyl,startsector
|
||||
.a1:
|
||||
push cx dx
|
||||
mov al, 18
|
||||
@ -890,66 +890,66 @@ end if
|
||||
; at first load boot sector and first FAT table
|
||||
|
||||
; read only first sector and fill variables
|
||||
mov cx, 0x0001 ; first logical sector
|
||||
xor dx, dx ; head = 0, drive = 0 (a:)
|
||||
mov al, 1 ; read one sector
|
||||
mov bx, 0xB000 ; es:bx -> data area
|
||||
call boot_read_floppy
|
||||
mov cx, 0x0001 ; first logical sector
|
||||
xor dx, dx ; head = 0, drive = 0 (a:)
|
||||
mov al, 1 ; read one sector
|
||||
mov bx, 0xB000 ; es:bx -> data area
|
||||
call boot_read_floppy
|
||||
; fill the necessary parameters to work with a floppy
|
||||
mov ax, word [es:bx+24]
|
||||
mov word [BPB_SecPerTrk], ax
|
||||
mov ax, word [es:bx+26]
|
||||
mov word [BPB_NumHeads], ax
|
||||
mov ax, word [es:bx+22]
|
||||
mov word [BPB_FATSz16], ax
|
||||
mov ax, word [es:bx+17]
|
||||
mov word [BPB_RootEntCnt], ax
|
||||
mov ax, word [es:bx+11]
|
||||
mov word [BPB_BytsPerSec], ax
|
||||
mov ax, word [es:bx+14]
|
||||
mov word [BPB_RsvdSecCnt], ax
|
||||
mov ax, word [es:bx+19]
|
||||
mov word [BPB_TotSec16], ax
|
||||
mov al, byte [es:bx+13]
|
||||
mov byte [BPB_SecPerClus], al
|
||||
mov al, byte [es:bx+16]
|
||||
mov byte [BPB_NumFATs], al
|
||||
mov ax, word [es:bx+24]
|
||||
mov word [BPB_SecPerTrk], ax
|
||||
mov ax, word [es:bx+26]
|
||||
mov word [BPB_NumHeads], ax
|
||||
mov ax, word [es:bx+22]
|
||||
mov word [BPB_FATSz16], ax
|
||||
mov ax, word [es:bx+17]
|
||||
mov word [BPB_RootEntCnt], ax
|
||||
mov ax, word [es:bx+11]
|
||||
mov word [BPB_BytsPerSec], ax
|
||||
mov ax, word [es:bx+14]
|
||||
mov word [BPB_RsvdSecCnt], ax
|
||||
mov ax, word [es:bx+19]
|
||||
mov word [BPB_TotSec16], ax
|
||||
mov al, byte [es:bx+13]
|
||||
mov byte [BPB_SecPerClus], al
|
||||
mov al, byte [es:bx+16]
|
||||
mov byte [BPB_NumFATs], al
|
||||
; count of clusters in FAT12 ((size_of_FAT*2)/3)
|
||||
mov ax, word [BPB_FATSz16]
|
||||
mov cx, word [BPB_BytsPerSec]
|
||||
xor dx, dx
|
||||
mul cx
|
||||
shl ax, 1
|
||||
mov cx, 3
|
||||
div cx ; now ax - number of clusters in FAT12
|
||||
mov word [end_of_FAT], ax
|
||||
mov ax, word [BPB_FATSz16]
|
||||
mov cx, word [BPB_BytsPerSec]
|
||||
xor dx, dx
|
||||
mul cx
|
||||
shl ax, 1
|
||||
mov cx, 3
|
||||
div cx ; now ax - number of clusters in FAT12
|
||||
mov word [end_of_FAT], ax
|
||||
|
||||
; load first FAT table
|
||||
mov cx, 0x0002 ; startcyl,startsector ; TODO!!!!!
|
||||
mov cx, 0x0002 ; startcyl,startsector ; TODO!!!!!
|
||||
xor dx, dx ; starthead,drive
|
||||
mov al, byte [BPB_FATSz16] ; no of sectors to read
|
||||
add bx, word [BPB_BytsPerSec] ; es:bx -> data area
|
||||
call boot_read_floppy
|
||||
mov bx, 0xB000
|
||||
mov bx, 0xB000
|
||||
|
||||
; and copy them to extended memory
|
||||
mov si, movedesc
|
||||
mov [si+8*2+3], bh ; from
|
||||
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
shr ax, 1 ; words per sector
|
||||
mov cx, word [BPB_RsvdSecCnt]
|
||||
add cx, word [BPB_FATSz16]
|
||||
mul cx
|
||||
push ax ; save to stack count of words in boot+FAT
|
||||
xchg ax, cx
|
||||
|
||||
mov [si+8*2+3], bh ; from
|
||||
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
shr ax, 1 ; words per sector
|
||||
mov cx, word [BPB_RsvdSecCnt]
|
||||
add cx, word [BPB_FATSz16]
|
||||
mul cx
|
||||
push ax ; save to stack count of words in boot+FAT
|
||||
xchg ax, cx
|
||||
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
mov ah, 0x87
|
||||
int 0x15
|
||||
pop es
|
||||
pop es
|
||||
test ah, ah
|
||||
jz @f
|
||||
sayerr_floppy:
|
||||
@ -959,21 +959,21 @@ sayerr_floppy:
|
||||
mov si, memmovefailed
|
||||
jmp sayerr_plain
|
||||
@@:
|
||||
pop ax ; restore from stack count of words in boot+FAT
|
||||
shl ax, 1 ; make bytes count from count of words
|
||||
and eax, 0ffffh
|
||||
pop ax ; restore from stack count of words in boot+FAT
|
||||
shl ax, 1 ; make bytes count from count of words
|
||||
and eax, 0ffffh
|
||||
add dword [si+8*3+2], eax
|
||||
|
||||
; copy first FAT to second copy
|
||||
; TODO: BPB_NumFATs !!!!!
|
||||
add bx, word [BPB_BytsPerSec] ; !!! TODO: may be need multiply by BPB_RsvdSecCnt !!!
|
||||
mov byte [si+8*2+3], bh ; bx - begin of FAT
|
||||
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
shr ax, 1 ; words per sector
|
||||
mov cx, word [BPB_FATSz16]
|
||||
mul cx
|
||||
mov cx, ax ; cx - count of words in FAT
|
||||
add bx, word [BPB_BytsPerSec] ; !!! TODO: may be need multiply by BPB_RsvdSecCnt !!!
|
||||
mov byte [si+8*2+3], bh ; bx - begin of FAT
|
||||
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
shr ax, 1 ; words per sector
|
||||
mov cx, word [BPB_FATSz16]
|
||||
mul cx
|
||||
mov cx, ax ; cx - count of words in FAT
|
||||
|
||||
push es
|
||||
push ds
|
||||
@ -983,129 +983,129 @@ sayerr_floppy:
|
||||
pop es
|
||||
test ah, ah
|
||||
jnz sayerr_floppy
|
||||
|
||||
mov ax, cx
|
||||
shl ax, 1
|
||||
and eax, 0ffffh ; ax - count of bytes in FAT
|
||||
|
||||
mov ax, cx
|
||||
shl ax, 1
|
||||
and eax, 0ffffh ; ax - count of bytes in FAT
|
||||
add dword [si+8*3+2], eax
|
||||
|
||||
|
||||
; reading RootDir
|
||||
; TODO: BPB_NumFATs
|
||||
add bx, ax
|
||||
add bx, 100h
|
||||
and bx, 0ff00h ; bx - place in buffer to write RootDir
|
||||
push bx
|
||||
add bx, ax
|
||||
add bx, 100h
|
||||
and bx, 0ff00h ; bx - place in buffer to write RootDir
|
||||
push bx
|
||||
|
||||
mov bx, word [BPB_BytsPerSec]
|
||||
shr bx, 5 ; divide bx by 32
|
||||
mov ax, word [BPB_RootEntCnt]
|
||||
xor dx, dx
|
||||
div bx
|
||||
push ax ; ax - count of RootDir sectors
|
||||
mov bx, word [BPB_BytsPerSec]
|
||||
shr bx, 5 ; divide bx by 32
|
||||
mov ax, word [BPB_RootEntCnt]
|
||||
xor dx, dx
|
||||
div bx
|
||||
push ax ; ax - count of RootDir sectors
|
||||
|
||||
mov ax, word [BPB_FATSz16]
|
||||
xor cx, cx
|
||||
mov cl, byte [BPB_NumFATs]
|
||||
mul cx
|
||||
add ax, word [BPB_RsvdSecCnt] ; ax - first sector of RootDir
|
||||
mov ax, word [BPB_FATSz16]
|
||||
xor cx, cx
|
||||
mov cl, byte [BPB_NumFATs]
|
||||
mul cx
|
||||
add ax, word [BPB_RsvdSecCnt] ; ax - first sector of RootDir
|
||||
|
||||
mov word [FirstDataSector], ax
|
||||
pop bx
|
||||
push bx
|
||||
add word [FirstDataSector], bx ; Begin of data region of floppy
|
||||
|
||||
mov word [FirstDataSector], ax
|
||||
pop bx
|
||||
push bx
|
||||
add word [FirstDataSector], bx ; Begin of data region of floppy
|
||||
|
||||
; read RootDir
|
||||
call conv_abs_to_THS
|
||||
pop ax
|
||||
pop bx ; place in buffer to write
|
||||
push ax
|
||||
call boot_read_floppy ; read RootDir into buffer
|
||||
call conv_abs_to_THS
|
||||
pop ax
|
||||
pop bx ; place in buffer to write
|
||||
push ax
|
||||
call boot_read_floppy ; read RootDir into buffer
|
||||
; copy RootDir
|
||||
mov byte [si+8*2+3], bh ; from buffer
|
||||
pop ax ; ax = count of RootDir sectors
|
||||
mov cx, word [BPB_BytsPerSec]
|
||||
mul cx
|
||||
shr ax, 1
|
||||
mov cx, ax ; count of words to copy
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
mov byte [si+8*2+3], bh ; from buffer
|
||||
pop ax ; ax = count of RootDir sectors
|
||||
mov cx, word [BPB_BytsPerSec]
|
||||
mul cx
|
||||
shr ax, 1
|
||||
mov cx, ax ; count of words to copy
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
mov ah, 0x87
|
||||
int 0x15
|
||||
pop es
|
||||
pop es
|
||||
|
||||
mov ax, cx
|
||||
shl ax, 1
|
||||
and eax, 0ffffh ; ax - count of bytes in RootDir
|
||||
add dword [si+8*3+2], eax ; add count of bytes copied
|
||||
mov ax, cx
|
||||
shl ax, 1
|
||||
and eax, 0ffffh ; ax - count of bytes in RootDir
|
||||
add dword [si+8*3+2], eax ; add count of bytes copied
|
||||
|
||||
; Reading data clusters from floppy
|
||||
mov byte [si+8*2+3], bh
|
||||
push bx
|
||||
mov byte [si+8*2+3], bh
|
||||
push bx
|
||||
|
||||
mov di, 2 ; First data cluster
|
||||
mov di, 2 ; First data cluster
|
||||
.read_loop:
|
||||
mov bx, di
|
||||
shr bx, 1 ; bx+di = di*1.5
|
||||
jnc .even
|
||||
test word [es:bx+di+0xB200], 0xFFF0 ; TODO: may not be 0xB200 !!!
|
||||
jmp @f
|
||||
mov bx, di
|
||||
shr bx, 1 ; bx+di = di*1.5
|
||||
jnc .even
|
||||
test word [es:bx+di+0xB200], 0xFFF0 ; TODO: may not be 0xB200 !!!
|
||||
jmp @f
|
||||
.even:
|
||||
test word [es:bx+di+0xB200], 0xFFF ; TODO: may not be 0xB200 !!!
|
||||
test word [es:bx+di+0xB200], 0xFFF ; TODO: may not be 0xB200 !!!
|
||||
|
||||
@@:
|
||||
jz .skip
|
||||
jz .skip
|
||||
; read cluster di
|
||||
;.read:
|
||||
;conv cluster di to abs. sector ax
|
||||
; ax = (N-2) * BPB_SecPerClus + FirstDataSector
|
||||
mov ax, di
|
||||
sub ax, 2
|
||||
xor bx, bx
|
||||
mov bl, byte [BPB_SecPerClus]
|
||||
mul bx
|
||||
add ax, word [FirstDataSector]
|
||||
call conv_abs_to_THS
|
||||
pop bx
|
||||
push bx
|
||||
mov al, byte [BPB_SecPerClus] ; number of sectors in cluster
|
||||
call boot_read_floppy
|
||||
;conv cluster di to abs. sector ax
|
||||
; ax = (N-2) * BPB_SecPerClus + FirstDataSector
|
||||
mov ax, di
|
||||
sub ax, 2
|
||||
xor bx, bx
|
||||
mov bl, byte [BPB_SecPerClus]
|
||||
mul bx
|
||||
add ax, word [FirstDataSector]
|
||||
call conv_abs_to_THS
|
||||
pop bx
|
||||
push bx
|
||||
mov al, byte [BPB_SecPerClus] ; number of sectors in cluster
|
||||
call boot_read_floppy
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
pusha
|
||||
;
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
xor cx, cx
|
||||
mov cl, byte [BPB_SecPerClus]
|
||||
mul cx
|
||||
shr ax, 1 ; ax = (BPB_BytsPerSec * BPB_SecPerClus)/2
|
||||
mov cx, ax ; number of words to copy (count words in cluster)
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
xor cx, cx
|
||||
mov cl, byte [BPB_SecPerClus]
|
||||
mul cx
|
||||
shr ax, 1 ; ax = (BPB_BytsPerSec * BPB_SecPerClus)/2
|
||||
mov cx, ax ; number of words to copy (count words in cluster)
|
||||
;
|
||||
mov ah, 0x87
|
||||
int 0x15 ; copy data
|
||||
mov ah, 0x87
|
||||
int 0x15 ; copy data
|
||||
test ah, ah
|
||||
popa
|
||||
pop es
|
||||
jnz sayerr_floppy
|
||||
; skip cluster di
|
||||
.skip:
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
xor cx, cx
|
||||
mov cl, byte [BPB_SecPerClus]
|
||||
mul cx
|
||||
and eax, 0ffffh ; ax - count of bytes in cluster
|
||||
add dword [si+8*3+2], eax
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
xor cx, cx
|
||||
mov cl, byte [BPB_SecPerClus]
|
||||
mul cx
|
||||
and eax, 0ffffh ; ax - count of bytes in cluster
|
||||
add dword [si+8*3+2], eax
|
||||
|
||||
mov ax, word [end_of_FAT] ; max cluster number
|
||||
mov ax, word [end_of_FAT] ; max cluster number
|
||||
pusha
|
||||
; draw percentage
|
||||
; total clusters: ax
|
||||
; read clusters: di
|
||||
xchg ax, di
|
||||
xchg ax, di
|
||||
mov cx, 100
|
||||
mul cx
|
||||
div di
|
||||
div di
|
||||
aam
|
||||
xchg al, ah
|
||||
add ax, '00'
|
||||
@ -1117,9 +1117,9 @@ sayerr_floppy:
|
||||
@@:
|
||||
popa
|
||||
inc di
|
||||
cmp di, word [end_of_FAT] ; max number of cluster
|
||||
cmp di, word [end_of_FAT] ; max number of cluster
|
||||
jnz .read_loop
|
||||
pop bx ; clear stack
|
||||
pop bx ; clear stack
|
||||
|
||||
ok_sys_on_floppy:
|
||||
mov si, backspace2
|
||||
|
Loading…
Reference in New Issue
Block a user