Subversion Repositories Kolibri OS

Rev

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

Rev 1151 Rev 1156
Line 1086... Line 1086...
1086
;îðèãèíàëüíîå ðåøåíèå - ðàçìåñòèì dd ïåðåä ñòðî÷êîé è ïîñëå ñòðî÷êè ðàçìåñòèì byte =0
1086
;îðèãèíàëüíîå ðåøåíèå - ðàçìåñòèì dd ïåðåä ñòðî÷êîé è ïîñëå ñòðî÷êè ðàçìåñòèì byte =0
1087
;ýòî âûãëÿäèò òàê: â ini ôàéëå ñóùåñòâóåò ñòðî÷êà RamdiskFile = @menu,@menu
1087
;ýòî âûãëÿäèò òàê: â ini ôàéëå ñóùåñòâóåò ñòðî÷êà RamdiskFile = @menu,@menu
1088
;ìû åå ìîäèôèöèðóåì äî òàêîãî ñîñòîÿíèÿ       dw,dw,db'@menu',0 êîíå÷íî ñîõðàíèâ òå çíà÷åíèÿ êîòîðûå ìû çàìåíÿåì
1088
;ìû åå ìîäèôèöèðóåì äî òàêîãî ñîñòîÿíèÿ       dw,dw,db'@menu',0 êîíå÷íî ñîõðàíèâ òå çíà÷åíèÿ êîòîðûå ìû çàìåíÿåì
1089
;ñîõðàíèëè ïåâûå 2 word
1089
;ñîõðàíèëè ïåâûå 2 word
Line 1090... Line -...
1090
 
-
 
1091
;//ïðîâåðêà íàëè÷èÿ òàêîãî æå èìåíè â ðóò äèð
1090
 
1092
 
1091
;
1093
@@:     mov     al,byte [es:di]
1092
@@:     mov     al,byte [es:di]
1094
        cmp     al,','          ; ò.å. èùåì ðàçäåëèòåëü 
1093
        cmp     al,','          ; ò.å. èùåì ðàçäåëèòåëü 
1095
        jz      .found_end_str
1094
        jz      .found_end_str
1096
        inc     di
1095
        inc     di
Line 1133... Line 1132...
1133
        mov     word [es:di-4],ax
1132
        mov     word [es:di-4],ax
1134
        mov     word [es:di-2],16       ;êîë-âî áëîêîâ ïî 4 êá =64 êá ò.å. áîëüøå íå ÷èòàåì 
1133
        mov     word [es:di-2],16       ;êîë-âî áëîêîâ ïî 4 êá =64 êá ò.å. áîëüøå íå ÷èòàåì 
Line 1135... Line 1134...
1135
 
1134
 
Line -... Line 1135...
-
 
1135
        mov     di,point_to_dest_file_name
-
 
1136
 
-
 
1137
if DEBUG
-
 
1138
        pushad
-
 
1139
;	mov	ax,di
-
 
1140
        mov     cx,0x0a
-
 
1141
        mov     di,name_of_seg_get_64
-
 
1142
        mov     dword[ds:di],'    '
-
 
1143
        mov     word[ds:di+4],'  '
-
 
1144
        call    decode
-
 
1145
;Show size
-
 
1146
        mov     si,name_of_seg_get_64
-
 
1147
        call    printplain
-
 
1148
 
-
 
1149
        popad
1136
        mov     di,point_to_dest_file_name
1150
end if  
1137
 
1151
 
1138
        push    word [es:di]
1152
        push    word [es:di]
1139
        push    cx
1153
        push    cx
1140
        xor     ax,ax
1154
        xor     ax,ax
Line 1182... Line 1196...
1182
        pop     word  [es:di-2]
1196
        pop     word  [es:di-2]
1183
        pop     dword [es:di-6]
1197
        pop     dword [es:di-6]
Line 1184... Line 1198...
1184
        
1198
        
1185
 
1199
 
1186
if DEBUG
1200
if DEBUG
1187
        pusha
1201
        pushad
1188
        mov     cx,0x0a
1202
        mov     cx,0x0a
1189
        mov     di,RamdiskFile_msg
1203
        mov     di,RamdiskFile_msg
1190
        mov     dword[ds:di],'    '
1204
        mov     dword[ds:di],'    '
1191
        call    decode
1205
        call    decode
1192
;Show size
1206
;Show size
Line 1193... Line 1207...
1193
        mov     si,RamdiskFile_msg
1207
        mov     si,RamdiskFile_msg
1194
        call    printplain
1208
        call    printplain
Line 1272... Line 1286...
1272
;es:si point to descripts
1286
;es:si point to descripts
Line 1273... Line 1287...
1273
 
1287
 
Line 1274... Line 1288...
1274
 
1288
 
1275
}
1289
}
1276
 
1290
 
1277
macro use_BPB_RAM
1291
macro use_BPB_RAM ;çàêèíóòü ñàìûå ïåðâûå 512 áàéò çà 1-é ìá
1278
;äàííûé ìàêðîñ çàêèäûâàåò BPB ñòðóêòóðó, ïîêà òîëüêî ôàò12 çà 1 ìá
1292
;äàííûé ìàêðîñ çàêèäûâàåò BPB ñòðóêòóðó ò.å. ïåðâûå 512 áàéò, ïîêà òîëüêî ôàò12 çà 1 ìá
1279
{
1293
{
1280
        mov     ax,fat12_buffer
1294
        mov     ax,fat12_buffer
1281
        mov     si,table_15_87
1295
        mov     si,table_15_87
1282
        add     word [si+8*2+2],ax
1296
        add     word [si+8*2+2],ax
1283
        push    es
1297
        push    es
1284
        push    ds
1298
        push    ds
1285
        pop     es
1299
        pop     es
1286
        mov     cx,31   ;ôàò12 óêëàäûâàåòñÿ â 62 áàéòà 62/2=31
1300
        mov     cx,256   ;áóò ñåêòîð  óêëàäûâàåòñÿ â 512 áàéò 512/2=256
1287
        mov     ah, 0x87
1301
        mov     ah, 0x87
1288
        int     0x15
1302
        int     0x15
Line 1313... Line 1327...
1313
        push    ds
1327
        push    ds
Line 1314... Line 1328...
1314
 
1328
 
1315
 
1329
 
-
 
1330
        mov     di,info_real_mode_size
-
 
1331
        add     di,0x1000
-
 
1332
 
-
 
1333
if DEBUG
-
 
1334
        pushad
-
 
1335
 
-
 
1336
        mov     ax,info_real_mode_size
-
 
1337
        add     ax,0x1000
-
 
1338
;	mov	ax,ds
-
 
1339
	mov	cx,0xa
-
 
1340
	       
-
 
1341
        mov     di,first_entry_in_fat
-
 
1342
        mov     dword [di],'    '
-
 
1343
        mov     word  [di+4],'  '
-
 
1344
        call    decode                                                                    
-
 
1345
;Show size
-
 
1346
        mov     si,first_entry_in_fat
-
 
1347
        call    printplain
-
 
1348
 
-
 
1349
        xor     ax,ax
-
 
1350
        int     0x16
-
 
1351
      
-
 
1352
        popad
-
 
1353
end if
1316
        mov     di,info_real_mode_size
1354
 
Line 1317... Line 1355...
1317
        add     di,0x1000
1355
 
1318
        push    di   ;  push    word info_real_mode_size+0x1000   ;cëåäóþùèé ñåãìåíò çà çàãðóæåííûì ó÷àñòêîì
1356
        push    di   ;  push    word info_real_mode_size+0x1000   ;cëåäóþùèé ñåãìåíò çà çàãðóæåííûì ó÷àñòêîì
Line 1319... Line -...
1319
        
-
 
1320
        xor     di,di
1357
        
Line 1321... Line 1358...
1321
        mov     point_to_free_root,di   ;çíà÷åíèå ñìåùåíèÿ =0 â êîðíåâîé ôàò òàáëèöå îïèñàíèÿ 
1358
        xor     di,di
1322
 
1359
        mov     point_to_free_root,di   ;çíà÷åíèå ñìåùåíèÿ =0 â êîðíåâîé ôàò òàáëèöå îïèñàíèÿ 
1323
 
1360
 
1324
        pop     ds   ; çàãðóæåí ñëåäóþùèé ñåãìåíò ò.å. ïóñòîé ñåãìåíò
1361
        pop     ds   ; çàãðóæåí ñëåäóþùèé ñåãìåíò ò.å. ïóñòîé ñåãìåíò
Line 1325... Line -...
1325
 
-
 
1326
        mov     byte [di],al
-
 
1327
        or      ax,-1
1362
 
1328
        inc     di
1363
        mov     byte [di],al
Line 1329... Line 1364...
1329
        mov     word [di],ax
1364
        or      ax,-1
1330
 
1365
        inc     di
Line 1369... Line 1404...
1369
        sub     di,size_root_dir
1404
        sub     di,size_root_dir
1370
;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð
1405
;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð
1371
        shl     di,9 ;imul 512
1406
        shl     di,9 ;imul 512
1372
        add     di,point_to_free_root   ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ.
1407
        add     di,point_to_free_root   ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ.
1373
;íåîáõîäèìî âíåñòè çíà÷åíèå â ðóò äèð ò.å. 32 áàéòà
1408
;íåîáõîäèìî âíåñòè çíà÷åíèå â ðóò äèð ò.å. 32 áàéòà
-
 
1409
if DEBUG        
-
 
1410
        pushad
-
 
1411
;       mov     ax,point_default
-
 
1412
;        mov     ax,
-
 
1413
        mov     cx,0x0a
-
 
1414
        mov     di,show_db2
-
 
1415
        mov     dword[ds:di],'    '
-
 
1416
       mov     word [ds:di+4],'  '
-
 
1417
        call    decode                                                                    
-
 
1418
;Show size
-
 
1419
        mov     si,show_db2
-
 
1420
        call    printplain
-
 
1421
;
-
 
1422
;       xor     ax,ax
-
 
1423
;       int     0x16
-
 
1424
        popad
-
 
1425
end if  
-
 
1426
 
-
 
1427
 
-
 
1428
 
1374
;gs:di - óêàçàòåëü äëÿ âíåñåíèÿ èíôîðàöèè â ðóò îáëàñòü ôàò òàáëèöû èíîðìàöèè î ôàéëå.
1429
;gs:di - óêàçàòåëü äëÿ âíåñåíèÿ èíôîðàöèè â ðóò îáëàñòü ôàò òàáëèöû èíîðìàöèè î ôàéëå.
1375
        mov     si,shot_name_fat
1430
        mov     si,shot_name_fat
1376
        mov     cx,11
1431
        mov     cx,11
1377
;çàïèøåì â ñòðóêòóðó èìÿ
1432
;çàïèøåì â ñòðóêòóðó èìÿ
1378
@@:     lodsb
1433
@@:     lodsb
Line 1486... Line 1541...
1486
        sub     di,size_root_dir
1541
        sub     di,size_root_dir
1487
;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð
1542
;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð
1488
        shl     di,9 ;imul 512
1543
        shl     di,9 ;imul 512
1489
        add     di,point_to_free_root   ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ.
1544
        add     di,point_to_free_root   ;ñìåùåíèå â óæå çàïèñàííûõ 32-õ ñòðóêòóðàõ.
Line -... Line 1545...
-
 
1545
 
-
 
1546
	push	di
1490
 
1547
 
1491
        mov     si,dest_name_fat
1548
        mov     si,dest_name_fat
-
 
1549
        mov     cx,11
1492
        mov     cx,11
1550
 
1493
;çàïèøåì â ñòðóêòóðó èìÿ
1551
;çàïèøåì â ñòðóêòóðó èìÿ
1494
@@:     mov     al,byte [es:di]
1552
@@:     mov     al,byte [es:di]
1495
        inc     di
1553
        inc     di
1496
        mov     byte [ds:si],al
1554
        mov     byte [ds:si],al
1497
        inc     si
1555
        inc     si
Line 1498... Line 1556...
1498
        loop    @b
1556
        loop    @b
-
 
1557
        
-
 
1558
        mov	di,si
1499
        
1559
	inc 	di
-
 
1560
	pop	ax
-
 
1561
	mov	cx,0xa
1500
        xor     ax,ax
1562
	call	decode
1501
        mov     byte [si],al
1563
 
1502
        mov     si,dest_name_fat
1564
        mov     si,dest_name_fat
Line 1503... Line 1565...
1503
        call    printplain
1565
        call    printplain
Line 1591... Line 1653...
1591
;di - óêàçàòåëü íà èìÿ ôàéëà ò.å. es:di óêàçûâàåò íà èìÿ ôàéëà íàçíà÷åíèÿ
1653
;di - óêàçàòåëü íà èìÿ ôàéëà ò.å. es:di óêàçûâàåò íà èìÿ ôàéëà íàçíà÷åíèÿ
1592
;âûõîäíûå äàííûå eax =-1 èìÿ ñîâïàëî, eax=0 èìÿ íå ñîâïàëî.
1654
;âûõîäíûå äàííûå eax =-1 èìÿ ñîâïàëî, eax=0 èìÿ íå ñîâïàëî.
1593
{
1655
{
1594
local   .no_equal
1656
local   .no_equal
1595
local   .exit
1657
local   .exit
-
 
1658
local 	.loop_size_root_dir
1596
;âû÷èñëèì äëèííó ñòðî÷êè èìåíè íàçíà÷åíèÿ, êîòîðóþ áóäåì ñðàâíèâàòü ñ óæå çàïèñàííûìè äàííûìè.
1659
;âû÷èñëèì äëèííó ñòðî÷êè èìåíè íàçíà÷åíèÿ, êîòîðóþ áóäåì ñðàâíèâàòü ñ óæå çàïèñàííûìè äàííûìè.
1597
;ïðåîáðàçóåì â àíàëîã ôàò çàïèñè ñòî÷êó ñ èìåíåì íàçíà÷åíèÿ
1660
;ïðåîáðàçóåì â àíàëîã ôàò çàïèñè ñòî÷êó ñ èìåíåì íàçíà÷åíèÿ
1598
        convertion_file_name
1661
        convertion_file_name	; ïðåîáðàçîâàëè èìÿ ïî íóæíûì ïðàâèëàì
1599
        test    ax,ax
1662
        test    ax,ax
1600
        jnz     .exit
1663
        jnz     .exit
Line 1601... Line 1664...
1601
 
1664
 
Line 1602... Line 1665...
1602
        mov     si,shot_name_fat
1665
        mov     si,shot_name_fat
1603
 
1666
 
1604
;âû÷èñëèì óêàçàòåëü íà êîðíåâóþ äèðåêòîðèþ
1667
;âû÷èñëèì óêàçàòåëü íà êîðíåâóþ äèðåêòîðèþ
1605
        mov     di,firstDataSect
1668
        mov     di,firstDataSect
1606
        sub     di,size_root_dir
-
 
1607
;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð
-
 
1608
 
1669
        sub     di,size_root_dir
1609
 
-
 
1610
        shl     di,9 ;imul 512
-
 
1611
 
-
 
1612
 
-
 
1613
 
1670
;òåïåðü â ax ðàçìåð â ñåêòîðàõ íà÷àëà ðóò äèð
1614
 
1671
        shl     di,9 ;imul 512
1615
;di= Ýòî ñìåùåíèå îò íà÷àëà áóôåðà äî ðóò äèðåêòîðèè.
1672
;di= Ýòî ñìåùåíèå îò íà÷àëà áóôåðà äî ðóò äèðåêòîðèè. â ïðåäåëàõ 64 êá.
1616
;çàãðóçèì çíà÷åíèå - ò.å. êîë-âî ýëåìåíòîâ, êîòîðûå ìû ìîæåì ïðîñìàòðèâàòü.
1673
;çàãðóçèì çíà÷åíèå - ò.å. êîë-âî ýëåìåíòîâ, êîòîðûå ìû ìîæåì ïðîñìàòðèâàòü.
Line 1617... Line 1674...
1617
        mov     dx,root_dir_entry_count
1674
        mov     dx,root_dir_entry_count
1618
;        mov     si,point_to_dest_file_name
1675
        mov     si,point_to_dest_file_name
Line 1619... Line 1676...
1619
        
1676
        
1620
        mov     ax,info_real_mode_size
-
 
1621
        add     ax,0x1000
-
 
1622
 
-
 
1623
 
1677
        mov     ax,info_real_mode_size
1624
        mov     gs,ax
-
 
Line 1625... Line 1678...
1625
        mov     cx,11   ;size of name in struct FAT
1678
        add     ax,0x1000
1626
 
1679
 
-
 
1680
 
-
 
1681
        mov     gs,ax
-
 
1682
.loop_size_root_dir:
-
 
1683
 
-
 
1684
if DEBUG        
-
 
1685
;        pushad
-
 
1686
;	push	di
-
 
1687
;        mov	eax,dword[gs:di]
-
 
1688
;        mov	si,(check_root_fat_+14)
-
 
1689
;        mov     dword [ds:si],'____'
-
 
1690
;	mov     dword [ds:si+4],'____'
-
 
1691
;        mov	dword[ds:si],eax
-
 
1692
;        mov	eax,dword[gs:di+4]
-
 
1693
;        mov	dword[ds:si+4],eax
-
 
1694
;
-
 
1695
;
-
 
1696
;	xor	eax,eax
-
 
1697
;        mov     ax,gs;point_next_fat_str
-
 
1698
;        mov     cx,0x0a
-
 
1699
;        mov     di,check_root_fat_
-
 
1700
;        mov     dword [di],'    '
-
 
1701
;        mov     word  [di+4],'  '
-
 
1702
;        call    decode
Line -... Line 1703...
-
 
1703
;	xor	eax,eax
-
 
1704
;	pop	ax
-
 
1705
;	mov	di,(check_root_fat_+7)
Line 1627... Line 1706...
1627
@@:     
1706
;        mov     dword [di],'    '
1628
        mov     al,byte [ds:si+bx]
-
 
1629
        mov     ah,byte [gs:di+bx]      ;gs:di - point to name in fat struct
-
 
1630
 
-
 
1631
if DEBUG
1707
;        mov     word  [di+4],'  '
1632
        pushad
-
 
1633
 
1708
;        call    decode
1634
        
-
 
1635
        mov     cx,11
-
 
1636
;input cx=size al=char áóäåò âûâåäåí ñèìâîë ñêîëüêî ðàç óêàçàíî â cx
1709
 
Line -... Line 1710...
-
 
1710
;Show size
-
 
1711
;        mov     si,check_root_fat_
Line 1637... Line -...
1637
@@:
-
 
1638
        mov     al,byte [gs:di]
1712
;        call    printplain
-
 
1713
 
-
 
1714
;	xor	ax,ax
1639
        inc     di
1715
;	int	0x16
Line 1640... Line 1716...
1640
        call    putchar
1716
;        popad
1641
        loop    @b
1717
end if  
Line 1642... Line 1718...
1642
 
1718
 
1643
        xor     ax,ax
1719
	xor	bx,bx
1644
        int     0x16
1720
        mov     cx,11   ;size of name in struct FAT
-
 
1721
 
1645
 
1722
@@:     
1646
        
1723
        mov     al,byte [es:si+bx]
1647
        popad
1724
        mov     ah,byte [gs:di+bx]      ;gs:di - point to name in fat struct
1648
end if
1725
        inc     bx
Line 1649... Line 1726...
1649
        inc     bx
1726
 
1650
 
-
 
1651
        cmp     ah,al
-
 
1652
        jnz     .no_equal
1727
        cmp     ah,al
1653
 
1728
        jnz     .no_equal
1654
;       dec     cx
1729
 
Line 1655... Line 1730...
1655
;       jnz     @b
1730
;       dec     cx
1656
        loop    @b
1731
;       jnz     @b
Line 1657... Line 1732...
1657
;.succesfuly:
1732
        loop    @b
Line 1658... Line 1733...
1658
;ïå÷àëüíî, òàêîå èìÿ óæå èìååòñÿ :(
1733
 
1659
        or      ax,-1
1734
;.succesfuly:
1660
        jmp     .exit
-
 
1661
 
-
 
1662
 
-
 
1663
.no_equal:
-
 
1664
        mov     cx,11;save_cx_check_name
-
 
1665
        xor     bx,bx
-
 
1666
        add     di,32           ;fat struct =32 byte
1735
;ïå÷àëüíî, òàêîå èìÿ óæå èìååòñÿ :(
1667
        dec     dx
1736
        or      ax,-1
-
 
1737
        jmp     .exit
-
 
1738
 
-
 
1739
 
1668
        jnz     @b
1740
.no_equal:
1669
 
1741
        add     di,32           ;fat struct =32 byte
1670
;.exit_check_name:
1742
        dec     dx
Line 1671... Line 1743...
1671
        and     ax,0
1743
        jnz     .loop_size_root_dir
Line 1807... Line 1879...
1807
 
1879
 
1808
.error: or      ax,-1
1880
.error: or      ax,-1
Line 1809... Line 1881...
1809
@@:
1881
@@:
1810
 
1882
 
1811
if DEBUG        
-
 
1812
        pusha
-
 
-
 
1883
if DEBUG        
1813
;       mov     ax,point_next_fat_str
1884
        pushad
1814
        mov     cx,0x0a
1885
	
1815
        mov     di,convertion_file_name_msg
1886
        mov     si,convertion_file_name_msg_y
1816
        call    decode                                                                    
1887
	test	ax,ax
1817
;Show size
1888
	jz	@f
Line 1818... Line 1889...
1818
        mov     si,convertion_file_name_msg
1889
        mov     si,convertion_file_name_msg_n
1819
        call    printplain
1890
@@:     call    printplain
1820
 
1891
 
1821
        mov     si,shot_name_fat
1892
        mov     si,shot_name_fat
Line 1822... Line 1893...
1822
        mov     byte [si+12],0
1893
        mov     byte [si+12],0
1823
        call    printplain
1894
        call    printplain
Line 1824... Line 1895...
1824
        popa
1895
        popad
Line 1853... Line 1924...
1853
 
1924
 
1854
        imul    eax,ebx
1925
        imul    eax,ebx
Line 1855... Line 1926...
1855
;       shl     eax,9   ;óìíîæèì íà 512
1926
;       shl     eax,9   ;óìíîæèì íà 512
1856
        
1927
        
-
 
1928
if DEBUG
1857
if DEBUG
1929
        pushad
1858
        pusha
1930
	xor	eax,eax
1859
;       mov     eax,ebx;point_next_fat_str
1931
        mov     ax,info_real_mode_size
-
 
1932
        mov     cx,0x0a
-
 
1933
        mov     di,seg_where_get_data
1860
        mov     cx,0x0a
1934
        mov     dword [di],'    '
1861
        mov     di,show_db1
1935
        mov     word  [di+4],'  '
1862
        call    decode                                                                    
1936
        call    decode                                                                    
1863
;Show size
1937
;Show size
1864
        mov     si,show_db1
1938
        mov     si,seg_where_get_data
Line 1865... Line 1939...
1865
        call    printplain
1939
        call    printplain
Line 1866... Line 1940...
1866
        popa
1940
        popad
1867
 
1941