From 95bdbe46d7fa6d93f8d5ca6d6e56ad811cce028a Mon Sep 17 00:00:00 2001 From: Robert Pengelly Date: Tue, 6 Aug 2024 17:02:27 +0100 Subject: [PATCH] Implemented int 21h/AH=3A --- build/chimaera.img | Bin 368640 -> 368640 bytes build/chimaera.vhd | Bin 34120704 -> 34120704 bytes src/apps/pcomm/Makefile.unix | 2 +- src/apps/pcomm/Makefile.w32 | 2 +- src/apps/pcomm/del.asm | 11 +- src/apps/pcomm/pcomm.asm | 5 + src/apps/pcomm/rmdir.asm | 223 ++++++++++++++++++++++++++ src/kernel/Makefile.unix | 2 +- src/kernel/Makefile.w32 | 2 +- src/kernel/bootstrap.asm | 2 + src/kernel/get.asm | 208 ++++++++++++++++++++++++ src/kernel/int21.asm | 296 +++++++++++++++++++++++++++++++++++ 12 files changed, 746 insertions(+), 7 deletions(-) create mode 100644 src/apps/pcomm/rmdir.asm create mode 100644 src/kernel/get.asm diff --git a/build/chimaera.img b/build/chimaera.img index f77702e5bbb893147a8f231df71b79af0ebca794..23b8a081527111d936fcaba4d1c49da9627ee450 100644 GIT binary patch delta 6459 zcmaJl3s_S}){~o%@HWaz0wgy9gJ`)V659$0q8PP^2C{_!0=g|)R`C&n{5~pZTJajB zuCsNwTU$l2-J-TsSVh^EP^@TO*4NfYZPi+>lLoDV@(`8(+yv12@4xWfnRCyaIdk4~ zZpy6wWmf;K;ewA-SG@E2cvs3Vv}|C^d@8(*ir7Vsw^EVUsHn1m`YQKE{x)Ise_M6; zE}gtdm?_Leh?|k)Z|dB+zoVUhVkdrRopP*e)22_Kos>rFGxhXu*IiKNIE0d?r_Gr@ zoBj{$Vw5r)p=ondQWEDR(J<3!q~qYB1Hw=zQ!hXMd#`Pyy;Gi*%y}}y49Z2*&q?N# zd`L2&dTyOxpGxiF1J}9Fa^*X={r_BltM4@JjOX+fpd#Q~%|AddQQXSkz%zE?VgP-j<=udSEs%0a=;*?JYB|DS{oCQ`Yh=mhsS3H zQCG&{nORqT=T0;q71&2gE6!A2(rwXp>&WDZI5s=n$Cq0$w^Fn0KUuWhl~!^os=hdT zGLM=Oj~nKNl}1jqXa(efrY?qjp|NNw@{5Ly>L(-m>u9o1Lq5@vk2IuOQ*oS}(E#c_ z4cV?CSVOjIDlU>QIn+iCF>6SfhPhakSGm#K|>-m>|NLcD4B)?Ye=Am_-oi+ zlEk4rHN;Irgc`!v7+?!v9!8U%XmUTA+>164n!}K2axPu`q!$N%4V&<*xRS+`UW{a7kP=mhy_IUc5*U{3?6X+@a8?rln^H zrES`42(@WDxZy5BIHh0#wFBY00;PJ{uS}KMSAF&{je73=Q9Yn6n~Y3uFy1ur2ejAB zZS?gH^SbN2Vwpwzi`;6Oj+JlE@VquCl=-M42mfL5`^s*{e3UZxQpTjRwY-?(c-4)~ z0v$0Z*%pKRgel5=jM9bNq1)D;Z9y%!} zG^RE*Rx&28FMRTQ5%FI|Bpi>JQa>)SW&Bhsa)xW<%tev23L{@BicDS=Iop?+)4|M@ ztH8oWVcA0A6T6^nj*ypgN@cZu=B3+on!F@8oMLuup_kBBlPhyfxP?Y`FV&59f7)8? z!faA*p&LY}5VPwvJxFjG2%Y-14`muVuJyxzuxy z3}SMZtj^W;z6^i2T)_*)kC!i<*x%RuI_kOgXVr~O$H|>OUfcSCe~5})8vh~UwXy4Z z0o_Y3^toD#sXE>!?IU=% z#xS;rq=y(obZKO{zi}i93(7JSc^(!clH`LkjbWvO0n45zuk{u2Z3#TsAPfO$B9F-Y zVUFaH(-N4+@YrL_=Gm^@E#hLnEr7>Z1dQc(6cg)z(6=PYF`4+b0mQ@#8+=Rnwg&+D zf9hM}>zH84#x3phh0RwHnb`xe3tUT2Av2*M%=xyj(ICro^$A@XGvL3=*C=6+u@|xo z`c(C0^$9@j_RY*rWbd+__8$_TL+7S4mLzu&$&<0n_GT<=#X`L<4Up15dseopFO!a+ zmB(CeW@Z@xF1VE~%4Mo*eMNFB2$bZC@2v`?4*iU)R=yB6>XzLHlHbm66r(|R_SvTP z4}xlIuWe#Ke$$voo$JL{jDMos?Oc9&vOU5K^<||+)_f=&e^^9QFjQ!9g~eBC{K zgnMs}?O^w-gCU?A*whMPu&m1{f-^qsunV{fI7pmh+tN+KI&9_Lcznrc)b5`_<#3+| z9Fg!Dq8$&g|Noq%-oFXUVOX@vOSR+v5C`^nudVXFqf82ad*sx6pqUG&+0tKd(yBj+ z-LF1%Rr%Fy5q@)}g1UIcp+@vo9J5*yFt2M^4I!wJ(nWsw#Wtf0FJ7G!MLNmLUbgF< z>U#1}R4P@nB&=a9lWy%6+$`&ZnvnxQP6IDAdSgyeWA>?zzZmm5;! z_u56oN6hS+6+h&f99wLs>IPFiE1t3V!yT|;&1{eKI0&%;CRS>Q!(F8zQ5uR*NrK)-tPMbLAo&? zs2?(w{yWudN58qlm8pVz!2d1#Mc?9(qhm{k2WYk5yO9aVcN=sQ09^pF#*| zbb7~Sii-Ukk?@dAed362bi25LQVpojwu|k2GV#3Q;z*l7CWy({^XhK%lhH*}#q3?U z|2*OTlbX{FJA-+xOkee2|Ba%n7`-7Y76m+`MTE zRF37B{E1Dqc1 z18OT*g4Ab^{H$r}(lnyvcDa$VyEV0HNU|46Jckt_}R03i@tGUm^D6C^@XW47k4**qDxx{mO zjLLf019jCl0piE<@xc(GRv~*)Jy6lY#CoU4LB_3zg6wUGD_V{3B+7i+p#@1XiJ90J z)8mXOFoCJEHpOwF{FhCC6#(5lpbNk$tS9%vI9^PwgaW#)Yyy=WkI%4y)UivrgAJx) zFJt%35s~7{S#Xd$kEznflQjcHBXo{dj07nx%49B~K^Du4 zbK~pZw|MY`asT9cHT?Cm&{V&C0pctW=b!XAMwK<&l2OmZ#fsZIZ;O* zAgJzgtIS}U;cS@njoTA(Rpm~~Wh(yHE7R-C-^t)naxK2LRpXq3u=iwb=A!`NVf+}z7A@#9)pG22BR&?F1lg-yu<@(Yb;>|9AHXxzMWbg(N8{36@s zW&Q3&LI73ma;^n}ti2<{I}S$0h(yGlwta*2)1_n4H{5D=89UhE;Q1Wg+x?Q$7s zW`0wlhn~y?EvV+jZco)*>^7`szMGDm3Vue-9x110Y5O#L7Zle5H{ME@Htiz{S+ozQ zKtopGRw9E>(BG(@@8(qfD-oHB?B|)P#U46RDTPzhq({mSm%rm5Tcd{m!ThAoIFMlyL-yDF}8(7&+b#qTzp4FHvOlH_QbOy<=YY1ey3`W`CxG z+|}I2TgfMr`ej+T?DZsw_ck70^wB~s#I?o$2g#(m5$YD{Pm;>Z>TWR0 z50awMsg7XC6tb;M)g_6;BqDG}H+|cb0S&;eYui5a#}OaDTKbcu81mx<37El|AK5Zd zt5B+Es(zHH&rUiG-S9~$X~126x%g!rgfD?3p(Wou8XU#88swKva)yOi zWley3V3SRC+Y!cw%v@QXNPTuDC*}W@YJ})Ni4}qq{`Ru3Q?%&7XGO#N4$5K*N07Av zw%w35QQTs4q4(2pD)b%>r$yd6a?t;oaJn*jC~Iae_AZ(5eAX=T9?F`ANsgpBr*Enl zLHhi&$pe3q)olk`ay*xT=FXT|?RDtNa=Q+vUt|Wzd&5C91Ox zGvK97_^kvX5-(yld+&xiHB_IPYXTf4t2Q&Q!L?luAAHlm(igzeCYjzLI;Fl0w!MH| z_Qo#wcOaMjVBK`Gma7HahX;F1n@%=^juhLHnsJ!Ng92Eam)TXrQ~?|A%cKQ0PJti+ zhqd^^CZ_s=M4F}>%1lF+tm)r@Tza}RoyJvr10pX#uzV>+%FTjYQ5<7h(Krw38vh-r zBi)cG0=7R7F0bMs*rX@OAK%;?#k+w0_C>&$urDCtf<#Bs{RSO&L6RobJ(F_=SyoNk6o%KDPRMN*E)@h5!bQ=x`Yp< zWj{0EYeSEl_l)M0Wv}RodkAjcA5?mqt3|+Ap(js3D6laYmUAW#@mis2se7%qZdq+z zVXfUuPre_b;I%^aKC)-@H1=v!O(0uJRpberJs02h)}y9|K+-c3su^%G`ZO{~*R*G} zo^0TbVq1@i5WJG}BT4K%8_xVRWn4|bK4|}6jH6dFaWSUQxOpZSxFtw+gZ(OvtmV!G zH-Dc-w)o-GpN4tX1hhhm|86kF7x{c8CgFFXiaCD-dCQl4F0Nnw*3iP5JbKrF4Gba?>jM^#Wu5Yo=w!Rao`;HtOtL)dIM?I^e%u zoM*gn^npn((VCZEdZ~WJ0So`ttpZPkn)sdT5lZ(xzZs!V1?@W!61eC;KqyZ%kB86_ z-$jK8ec|!-dk7Wz9t=Wgo7a6kLihcrLjtV}dh!WEGU>WJgf>WXe?jO3jrSjv#*~GS zt!}mxP!FbgfI*tef}hrdvf$x*usT>rzHtRR58a}j?nCvUbX{;s=JWMnb?|UKh;h~f z_L8&g?+oEC05K%Z^$@rKT%{aZRDP1&bA_S9m0SCWJxQ*+k{QIlgQ?<@DxEWGjdxvtiyZo z{g7xfaUgA4MjP`B;lqM{t=MSfJ~EzqwsdDOo_(-1VgpSogtj&?T>@B!YTh7wYPt>F zz3ps3*2?hxgA@GAWF;BTTM3rp4uwWn(Of@qfF_+ToH6RMiOq$~xoQ7+sFnDTsah-3 zku1@W71q{!9SP!;&X0H;N~Q~J{UAlJ3n#^6`BNz#%ZH`tk>l9I6R3VUUUt|orAI#G z9(^M<`PnWfGHj^J2@d0=iVq{7@Ik7QB(BRz$R_Xe3Hr(YA}3nH;Q@5yu>zkt94YRR z>&R8XkbFIIDDH3bsqJIx-~Hk+k2(?IXnq}&vr!!cx#o8ekZXPiL9Y271i9uH sz@g^X0cxC>VV*mZ!cl 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 diff --git a/build/chimaera.vhd b/build/chimaera.vhd index 768d5a4138b0ca71e18a031c535a20c76a742a7e..e6582f5ba99b244ea4d253666e25b7b2a31ed547 100644 GIT binary patch delta 9401 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 Pointer to ASCIIZ path name. +;****************************************************************************** +_int21_3A: + + push bx + push cx + push dx + push si + push di + push es + push ds + + mov si, dx + + call _get_disk_info + jc _int21_3A.error_path + + mov di, si + + call _walk_path + jc _int21_3A.error_path + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Mangle the file name and search for it in the file system. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + call _mangle_dos_name + jc _int21_3A.error_path + + call _search_dos_dir + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; If the carry flag was set then the entry doesn't exists. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + jc _int21_3A.error_path + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Transfer the offset in ax to the si register. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov si, ax + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Check if the entry is a directory. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov cl, cs:[si + 8] + + test cl, HEX (10) + jz _int21_3A.error_path + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Check the starting cluster is the root cluster. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov ax, cs:[si + 0] + mov dx, cs:[si + 2] + + cmp dx, cs:[_root_cluster + 2] + ja _int21_3A.get_files + + cmp dx, cs:[_root_cluster + 2] + jne _int21_3A.error_path + + cmp ax, cs:[_root_cluster] + jbe _int21_3A.error_path + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Check if the starting cluster is the current cluster. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + cmp dx, cs:[_curr_cluster + 2] + ja _int21_3A.get_files + + cmp dx, cs:[_curr_cluster + 2] + jne _int21_3A.curr_dir + + cmp ax, cs:[_curr_cluster] + je _int21_3A.curr_dir + +_int21_3A.get_files: + + call _get_files + + cmp ax, 2 + jb _int21_3A.error_path + + sub ax, 2 + + and ax, ax + jnz _int21_3A.error_path + +_int21_3A.remove: + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Get the starting cluster again. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov ax, cs:[si + 0] + mov dx, cs:[si + 2] + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Preserve the si register. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + push si + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; We'll use the cx register as a counter. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + xor cx, cx + +_int21_3A.clear: + + push ax + push dx + + call cs:[_next_cluster] + jc _int21_3A.clear_final + + mov si, ax + mov di, dx + + pop dx + pop ax + + push bx + push cx + + xor bx, bx + xor cx, cx + + call cs:[_update_cluster] + + pop cx + pop bx + + inc cx + + mov ax, si + mov dx, si + + jmp _int21_3A.clear + +_int21_3A.clear_final: + + inc cx + + pop dx + pop ax + + push bx + push cx + + xor bx, bx + xor cx, cx + + call cs:[_update_cluster] + pop cx + pop bx + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Restore the si register. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + pop si + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Preserve the count. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + push cx + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Update the entry on disk. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov ax, cs:[si + 10] + mov dx, cs:[si + 12] + + mov cx, cs:[si + 14] + mov di, cs:[si + 16] + + push es + push bx + push ax + push dx + push cx + + mov bx, cs:[_disk_scratch] + mov es, bx + + xor bx, bx + call _read_sectors + + mov byte ptr es:[di + 0], HEX (E5) + pop cx + pop dx + pop ax + + xor bx, bx + call _write_sectors + + pop bx + pop es + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Restore the value in the cx register. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + pop si + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Check if we have an info sector. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + mov ax, cs:[_info_sector] + + and ax, ax + jz _int21_41.done + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Update the free clusters. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + xor dx, dx + + add ax, cs:[_hidden_sectors] + adc dx, cs:[_hidden_sectors + 2] + + mov bx, cs:[_disk_scratch] + mov es, bx + xor bx, bx + + mov cx, 1 + call _read_sectors + + mov di, HEX (01E0) + + mov ax, es:[di + 8] + mov dx, es:[di + 10] + + add ax, si + adc dx, 0 + + mov es:[di + 8], ax + mov es:[di + 10], dx + + mov ax, cs:[_info_sector] + xor dx, dx + + add ax, cs:[_hidden_sectors] + adc dx, cs:[_hidden_sectors + 2] + + mov cx, 1 + call _write_sectors + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Jump to done. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + jmp _int21_3A.done + +_int21_3A.error_path: + + mov ax, 3 + jmp _int21_3A.error + +_int21_3A.curr_dir: + + mov ax, 16 + +_int21_3A.error: + + pop ds + pop es + pop di + pop si + pop dx + pop cx + pop bx + + stc + jmp iretc + +_int21_3A.done: + + pop ds + pop es + pop di + pop si + pop dx + pop cx + pop bx + + xor ax, ax + clc + + jmp iretc + ;****************************************************************************** ; @function _int21_3B ; @brief Set Current Directory -- 2.34.1