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: |