Subversion Repositories Kolibri OS

Rev

Rev 129 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 129 Rev 134
Line 150... Line 150...
150
    stosd
150
    stosd
151
    add    eax, 1000h
151
    add    eax, 1000h
152
    loop    @b
152
    loop    @b
153
    ret
153
    ret
Line -... Line 154...
-
 
154
 
-
 
155
boot_read_floppy:
-
 
156
        push    si
-
 
157
        xor     si, si
-
 
158
        mov     ah, 2   ; read
-
 
159
@@:
-
 
160
        push    ax
-
 
161
        int     0x13
-
 
162
        pop     ax
-
 
163
        jnc     @f
-
 
164
        inc     si
-
 
165
        cmp     si, 10
-
 
166
        jb      @b
-
 
167
        mov     si, badsect-0x10000
-
 
168
sayerr_plain:
-
 
169
        call    printplain
-
 
170
        jmp     $
-
 
171
@@:
-
 
172
        pop     si
-
 
173
        ret
154
 
174
 
Line 155... Line 175...
155
		org $+0x10000
175
		org $+0x10000
156
 
176
 
157
; table for move to extended memory (int 15h, ah=87h)
177
; table for move to extended memory (int 15h, ah=87h)
Line 822... Line 842...
822
        mov     si,diskload-0x10000
842
        mov     si,diskload-0x10000
823
        call    print
843
        call    print
824
        xor    ax, ax            ; reset drive
844
        xor    ax, ax            ; reset drive
825
        xor    dx, dx
845
        xor    dx, dx
826
        int     0x13
846
        int     0x13
-
 
847
; now load floppy image to memory
-
 
848
; at first load boot sector and first FAT table
827
        mov     cx,0x0001               ; startcyl,startsector
849
        mov     cx, 0x0001      ; startcyl,startsector
828
        xor    dx, dx            ; starthead,drive
850
        xor     dx, dx          ; starthead,drive
829
        push    word 80*2               ; read no of sect
851
        mov     al, 1+9         ; no of sectors to read
830
       reads:
-
 
831
        pusha
-
 
832
        xor     si,si
-
 
833
       newread:
-
 
834
        mov     bx,0xa000               ; es:bx -> data area
852
        mov     bx, 0xB000      ; es:bx -> data area
835
        mov     ax,0x0200+18            ; read, no of sectors to read
-
 
836
        int     0x13
-
 
837
        test    ah, ah
-
 
838
        jz      goodread
853
        call    boot_read_floppy
839
        inc    si
-
 
840
        cmp     si,10
-
 
841
        jnz     newread
-
 
842
        mov     si,badsect-0x10000
854
; and copy them to extended memory
843
sayerr_plain:
-
 
844
        call    printplain
-
 
845
        jmp     $
-
 
846
       goodread:
-
 
847
        ; move -> 1mb
-
 
848
        mov     si,movedesc-0x10000
855
        mov     si, movedesc-0x10000
-
 
856
        mov     [si+8*2+3], bh
849
        push    es
857
        push    es
850
        push    ds
858
        push    ds
851
        pop     es
859
        pop     es
852
        mov     cx,256*18
860
        mov     cx, 256*10
853
        mov     ah,0x87
861
        mov     ah, 0x87
854
        int     0x15
862
        int     0x15
855
        pop    es
863
        test    ah, ah
856
 
-
 
857
        test    ah,ah                  ; was the move successfull ?
-
 
858
        je      goodmove
864
        jz      @f
-
 
865
sayerr_floppy:
859
        mov     dx,0x3f2              ; floppy motor off
866
        mov     dx, 0x3f2
860
        mov     al,0
867
        mov     al, 0
861
        out     dx,al
868
        out     dx, al
862
        mov     si,memmovefailed-0x10000
869
        mov     si, memmovefailed-0x10000
863
        jmp    sayerr_plain
870
        jmp     sayerr_plain
-
 
871
@@:
-
 
872
        add     dword [si+8*3+2], 512*10
-
 
873
; copy FAT to second copy
-
 
874
        mov     byte [si+8*2+3], 0xB2
-
 
875
        mov     cx, 256*9
-
 
876
        mov     ah, 0x87
-
 
877
        int     0x15
864
      goodmove:
878
        pop     es
-
 
879
        test    ah, ah
-
 
880
        jnz     sayerr_floppy
-
 
881
        add     dword [si+8*3+2], 512*9
-
 
882
; calculate total number of sectors to read
-
 
883
        mov     ax, 1+9+14      ; boot+FAT+root
-
 
884
        mov     di, 0xB203
-
 
885
.calc_loop:
-
 
886
        test    word [es:di], 0xFFF
-
 
887
        jz      @f
-
 
888
        inc     ax
-
 
889
@@:
-
 
890
        test    word [es:di+1], 0xFFF0
-
 
891
        jz      @f
-
 
892
        inc     ax
865
 
893
@@:
-
 
894
        add     di, 3
-
 
895
        cmp     di, 0xB200+1440*3
-
 
896
        jb      .calc_loop
-
 
897
        push    ax
-
 
898
        mov     bp, 1+9         ; already read sectors
-
 
899
; now read rest
-
 
900
        mov     byte [si+8*2+3], 0xA0
-
 
901
        mov     di, 2-14        ; absolute sector-31
-
 
902
        mov     cx, 0x0002      ; cylinder=0, sector=2
-
 
903
        mov     dx, 0x0100      ; head=1, disk=0
-
 
904
.read_loop:
-
 
905
; determine whether sector must be read
-
 
906
        cmp     di, 2
-
 
907
        jl      .read
-
 
908
        mov     bx, di
-
 
909
        shr     bx, 1
-
 
910
        jnc     .even
866
    add    dword [movedesc-0x10000+0x18+2], 512*18
911
        test    word [es:bx+di+0xB200], 0xFFF0
-
 
912
        jmp     @f
-
 
913
.even:
-
 
914
        test    word [es:bx+di+0xB200], 0xFFF
-
 
915
@@:
-
 
916
        jz      .skip
-
 
917
.read:
-
 
918
        mov     bx, 0xA000
-
 
919
        mov     al, 1           ; 1 sector
-
 
920
        call    boot_read_floppy
-
 
921
        inc     bp
-
 
922
        push    es
-
 
923
        push    ds
-
 
924
        pop     es
-
 
925
        pusha
-
 
926
        mov     cx, 256
-
 
927
        mov     ah, 0x87
-
 
928
        int     0x15
-
 
929
        test    ah, ah
867
        popa
930
        popa
-
 
931
        pop     es
-
 
932
        jnz     sayerr_floppy
-
 
933
.skip:
-
 
934
        add     dword [si+8*3+2], 512
-
 
935
        inc     cx
-
 
936
        cmp     cl, 19
-
 
937
        jnz     @f
-
 
938
        mov     cl, 1
868
        inc     dh
939
        inc     dh
869
        cmp     dh,2
940
        cmp     dh, 2
870
        jnz     bb2
941
        jnz     @f
871
        mov     dh,0
942
        mov     dh, 0
872
        inc     ch
943
        inc     ch
873
        pusha                        ; print prosentage
-
 
874
        mov     si,pros-0x10000
-
 
875
    shr    ch, 2
-
 
876
    mov    al, '5'
-
 
877
    test    ch, 1
-
 
878
    jnz    @f
-
 
879
    mov    al, '0'
-
 
880
@@:
944
@@:
881
    mov    [si+1], al
-
 
882
    shr    ch, 1
-
 
883
    add    ch, '0'
-
 
884
    mov    [si], ch
-
 
885
        call    printplain
-
 
886
        popa
-
 
887
       bb2:
-
 
888
        pop     ax
945
        pop     ax
889
        dec     ax
-
 
890
        push    ax
946
        push    ax
-
 
947
        pusha
-
 
948
; draw percentage
-
 
949
; total sectors: ax
-
 
950
; read sectors: bp
-
 
951
        xchg    ax, bp
-
 
952
        mov     cx, 100
-
 
953
        mul     cx
-
 
954
        div     bp
-
 
955
        aam
-
 
956
        xchg    al, ah
-
 
957
        add     ax, '00'
-
 
958
        mov     si, pros-0x10000
-
 
959
        cmp     [si], ax
-
 
960
        jz      @f
-
 
961
        mov     [si], ax
-
 
962
        call    printplain
-
 
963
@@:
-
 
964
        popa
-
 
965
        inc     di
-
 
966
        cmp     di, 2880-31
-
 
967
        jnz     .read_loop
-
 
968
 
-
 
969
;        mov     cx,0x0001               ; startcyl,startsector
-
 
970
;        xor    dx, dx            ; starthead,drive
-
 
971
;        push    word 80*2               ; read no of sect
-
 
972
;       reads:
-
 
973
;        pusha
-
 
974
;        xor     si,si
-
 
975
;       newread:
-
 
976
;        mov     bx,0xa000               ; es:bx -> data area
-
 
977
;        mov     ax,0x0200+18            ; read, no of sectors to read
-
 
978
;        int     0x13
-
 
979
;        test    ah, ah
-
 
980
;        jz      goodread
-
 
981
;        inc    si
-
 
982
;        cmp     si,10
-
 
983
;        jnz     newread
-
 
984
;        mov     si,badsect-0x10000
-
 
985
;sayerr_plain:
-
 
986
;        call    printplain
-
 
987
;        jmp     $
-
 
988
;       goodread:
-
 
989
;        ; move -> 1mb
-
 
990
;        mov     si,movedesc-0x10000
-
 
991
;        push    es
-
 
992
;        push    ds
-
 
993
;        pop     es
-
 
994
;        mov     cx,256*18
-
 
995
;        mov     ah,0x87
-
 
996
;        int     0x15
-
 
997
;        pop    es
-
 
998
;
-
 
999
;        test    ah,ah                  ; was the move successfull ?
-
 
1000
;        je      goodmove
-
 
1001
;        mov     dx,0x3f2              ; floppy motor off
-
 
1002
;        mov     al,0
-
 
1003
;        out     dx,al
-
 
1004
;        mov     si,memmovefailed-0x10000
-
 
1005
;        jmp    sayerr_plain
-
 
1006
;      goodmove:
-
 
1007
;
-
 
1008
;    add    dword [movedesc-0x10000+0x18+2], 512*18
-
 
1009
;        popa
-
 
1010
;        inc     dh
-
 
1011
;        cmp     dh,2
-
 
1012
;        jnz     bb2
-
 
1013
;        mov     dh,0
-
 
1014
;        inc     ch
-
 
1015
;        pusha                        ; print prosentage
-
 
1016
;        mov     si,pros-0x10000
-
 
1017
;    shr    ch, 2
-
 
1018
;    mov    al, '5'
-
 
1019
;    test    ch, 1
-
 
1020
;    jnz    @f
-
 
1021
;    mov    al, '0'
-
 
1022
;@@:
-
 
1023
;    mov    [si+1], al
-
 
1024
;    shr    ch, 1
-
 
1025
;    add    ch, '0'
-
 
1026
;    mov    [si], ch
-
 
1027
;        call    printplain
-
 
1028
;        popa
-
 
1029
;       bb2:
-
 
1030
;        pop     ax
-
 
1031
;        dec     ax
-
 
1032
;        push    ax
891
        jnz     reads
1033
;        jnz     reads
892
       readdone:
1034
;       readdone:
893
        pop     ax
1035
;        pop     ax
894
        mov     si,backspace2-0x10000
1036
        mov     si,backspace2-0x10000
895
        call    printplain
1037
        call    printplain
896
        mov     si,okt-0x10000
1038
        mov     si,okt-0x10000
897
        call    printplain
1039
        call    printplain
898
       no_sys_on_floppy:
1040
       no_sys_on_floppy: