From fd9eed9706b8950d974ae1736ad40a32766ab18e Mon Sep 17 00:00:00 2001 From: dewdude Date: Mon, 4 Nov 2024 22:20:38 -0500 Subject: [PATCH] Hello. --- GETCD.ASM | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ GETCD.COM | Bin 0 -> 674 bytes GETCD.IMG | Bin 0 -> 1474560 bytes GETCD.zip | Bin 0 -> 18295 bytes LICENSE | 16 ++++ README.MD | 164 +++++++++++++++++++++++++++++++++ 6 files changed, 448 insertions(+) create mode 100644 GETCD.ASM create mode 100644 GETCD.COM create mode 100644 GETCD.IMG create mode 100644 GETCD.zip create mode 100644 LICENSE create mode 100644 README.MD diff --git a/GETCD.ASM b/GETCD.ASM new file mode 100644 index 0000000..c0aea3e --- /dev/null +++ b/GETCD.ASM @@ -0,0 +1,268 @@ +;GETCD V 1.0 | 3-NOV-2024 Jay Moore/dewdude@pickmy.org +;Finds CDROM drive letter and places in CDROM +;environment variable +; +;A replacement for FINDCD.EXE written in NASM Assembly and +;manipulates a lot of memory directly. Not a drop-in +;replacement, but close. Designed as a .BAT utility, the +;only user interaction is feeding it a path/filename and +;checking the environment variable. Default returns first +;CDROM drive that has a disc. +; +;GETCD [/?] SEARCHSTRING +; +;SEARCHSTRING can be a file, directory name, path, or wildcard. +;Not specifying a file does a wildcard search on root of CD. +;You do not need to add a leading \ to the string. +;/? displays the usual help, except poorly written. +; +;CDROM=E: +; +;Is how the variable will be set. If you desire a trailing \; +;just have your script 'set CDROM=%CDROM%\' +; +;This will absolutely overwrite any existing CDROM= contents with +;the above format; and will also shift data around to make it the +;exact length. It will also create an environment variable if none +;exists. This is contrast with FINDCD.EXE; which not only needs +;you to set the CDROM= variable first, but requires patching the +;.exe to change the file search. Gross. +; +;Displayed output is minimal. The only error displayed is if the +;environment block is full. A lack of CDROM drives will exit with +;errorlevel 255. Anything else just doesn't change (or create) the +;CDROM variable. You'll need to do that after execution in your script. +; +;argument section of PSP starts at 80h; byte count, bytes, terminator. +;term is 0x0D, but it's not included in byte count. this can include +;spaces if full name.ext is used or user just hit space. +;the pointer to parent's PSP lives at 16h; env-block pointer is 2Ch +;offset 3 one segment back is the block allocation size. +;this means I initialize di to 10h now and just leave es where it is +;as all counts are relative from di's initialization + +[CPU 8086] +[BITS 16] +org 100h + +section .text + global start + +start: + xor cx, cx ; clear out cx + mov si, 80h ; move si to psp argument count + mov cl, [si] ; load argument byte count + +argproc: + jcxz varinit ; stop if cx is 0 + inc si ; increment si + cmp byte [si], 20h ; Invalid char/space check + jbe skipit ; jump to loop if <20h + cmp byte [si], 5ch ; is it backslash + jz skipit ; jump if it is + cmp word [si], 3f2fh ; check for /? + jz hllp ; jump if it is + jmp ldfile ; land here when done +skipit: + loop argproc ; dec cx, jmp argproc ;) + + ldfile: + lea di, filename ; load filename to di + repe movsb ; copy argument to filename + mov byte [di], 0 ; null for good measure + +varinit: + mov es, [16h] ; parent psp pointer + mov ax, [es:2ch] ; load block segment + dec ax ; segment one below + mov es, ax ; go back a segment + mov ax, [es:3h] ; this is the size + mov cl, 4 ; load 4 to cl for shl + shl ax, cl ; bit shift left 4 + mov [blocksize], ax ; store + mov di, 10h ; move di up to env blk + +readblock: + cmp word [es:di], 0 ; end of block? + jz endofblock ; variiable missing + lea si, envname ; load envname address + mov cx, 6 ; load six + repe cmpsb ; repe compare string + jnz readblock ; if not variable, go back up + sub di, 6 ; subtract 6 + mov [envstart], di ; write starting location + add di, 6 ; place it back + +findend: + inc di ; now to find the end + cmp word [es:di], 0 ; is it the end? + jnz findend ; jump back up if not + +endofblock: + inc di ; actual end of block + mov [blockend], di ; write that down + cmp word [envstart], 0 ; did we find a var + jz noenv ; jump if novar + mov di, [envstart] ; go back to the env start + mov ax, 1212h ; get the asciz length + int 2fh ; in to cx + cmp cx, 9 ; and see if it's 9 + jb envtoosmall ; jump to envtosmall if too small + ja envtoobig ; jump to envtoobig if too big + +envokay: + add di, 6 ; drive letter is six in + jmp drivego ; es:di ready for letter + +envtoobig: + mov si, di ; duplicate pointers + mov word [es:di+7], 0x003A ; write : and null + add si, 9 ; put si where i need di + call endcheck ; check relative position + call bytesize ; get byte count to copy + xchg di, si ; now we swap + cld ; clear that direction + call copybytes ; copy byte routine + mov word [es:di], 0 ; double null new end + mov di, [envstart] ; go back to the env + jmp envokay ; might as well jump + +noenv: + call envfree ; check free space + mov di, [blockend] ; go to block end + + +newenv: + lea si, envname ; load address of envname + mov cx, 8 ; we want 8 bytes + repe movsb ; write 'em + mov word [es:di], 0000h ; double null new term + sub di, 2 ; back di up two + jmp drivego ; es:di is ready + +envtoosmall: + mov byte [oneornine], 01h ; change envfree's cmp value + call envfree ; check environment space + call endcheck ; check relative position + call bytesize ; call for byte count + add cx, 3 ; add three to that count + mov si, [blockend] ; load the end of block offset to si + mov di, [blockend] ; load it again to di + inc di ; move it up one + std ; set direction flag + call copybytes ; copybytes routine + mov word [es:di+1], 0x003A ; write the : and null one byte up + +drivego: + mov ax, 2524h ; Ignore Critical Errors + lea dx, [new24] ; pointer to new handler + int 21h ; interrupt to change ivt + mov ax, 1500h ; function to get drive info + int 2Fh ; from int 2f + xchg bx, cx ; swap count and starting number + jcxz nodrives ; see if we have drives + add bl, 41h ; convert number to letter + +loadltr: + push cx ; push drive count to stack + mov [drivevar], bl ; copy drive letter to ram + lea dx, drivevar ; load address of drivevar + mov ah, 4Eh ; load find first file + mov cl, 17h ; all the options + int 21h ; call the interrupt + jnc envset ; found file, go on + pop cx ; pop drive count back in to CX + inc bl ; increment to next drive + loop loadltr ; loop back around + jmp exit ; no match, leave + +envset: + lea si, drivevar ; loads address to si + movsb ; moves ds:si to es:di + jmp exit ; we're done, go home + +nodrives: + mov al, 0FFh ; load errorlevel 255 to al + +exit: + mov ax, 4c00h ; standard dos kernel terminate + int 21h ; bye. + +endcheck: + push cx ; push cx to stack + add cx, di ; add di to cx + sub cx, [blockend] ; subtract blockend from cx + jcxz fakenew ; jump if zero + pop cx ; invert cx (it should be neg) + ret ; go back to moving bytes + +fakenew: + sub sp, 04h ; reset the stack you animal + mov di, [envstart] ; load di + jmp newenv ; pretend it's new + +copybytes: + push ds ; push ds on to the stack + push es ; push es on to the stack + pop ds ; pop es in to ds for this + repe movsb ; copy ds:si to es:di till cx is 0 + pop ds ; pop ds's original value back out + ret + +envfree: + mov ax, [blocksize] ; load size + sub ax, [blockend] ; calculate free + cmp al, [oneornine] ; need n free + jz blockfull ; not enough space + ret ; return if ok + +bytesize: + add di, cx ; place di at next variable + mov cx, [blockend] ; load the end of the block + sub cx, di ; subtract the actual usage + ret ; return from subroutine + +hllp: + lea dx, hlptxt ; address of $-terminated strong + mov ah, 09h ; display string function + int 21h ; dos interrupt + jmp exit ; exit + +new24: + mov al, 3 ; FAIL! (Hitting F, but faster) + iret ; Return from interrupt. + +section .data + +hlptxt: + db 'GETCD 1.0 | 4-NOV-2024 | dewdude@pickmy.org | Freeware/MIT', 0x0d, 0x0a + db 'Sets "CDROM=[driveletter]:" by searching CD-ROM drives', 0x0d, 0x0a + db 'USAGE: GETCD [/?] [FILE/OR/PATH/TO/FILE.EXT]', 0x0d, 0x0a + db 'Finds file on CD-ROM drives. Returns first match. Allows wildcards.', 0x0d, 0x0a + db 'Creates/adjusts variable. Default search is wildcard.$', 0x0d, 0x0a +blockfull: db 'NO ENV FREE $' +blocksize: db 0, 0 ; holds block size +envstart: db 0, 0 ; start of cdrom= +blockend: db 0, 0 ; end of used block +oneornine: db 09h ; default 9 +envname: db 'CDROM=' ; variable name +drivevar: db '0:\' ; variable's variable +filename: db '*', 0x00 ; (default) filename + +;MIT No Attribution +; +;Copyright 2024 Jay Moore +; +;Permission is hereby granted, free of charge, to any person obtaining a copy of this +;software and associated documentation files (the "Software"), to deal in the Software +;without restriction, including without limitation the rights to use, copy, modify, +;merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +;permit persons to whom the Software is furnished to do so. +; +;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +;INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +;PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +;HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +;OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +;SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/GETCD.COM b/GETCD.COM new file mode 100644 index 0000000000000000000000000000000000000000..bd51b21949da97def2033709c816a540219767e6 GIT binary patch literal 674 zcmY+AUr19?9LLXg^x9Sn5n3;yXJZY@cCU&oxcH~B-AzHaoJ$fFy6ztJ)^*1H;}}FN z?t|I5A~K2|grw24g3u!94+Eu#;X_Zpg+g4rfe(8cly*0R=)C;S@Av)ue!uTIonJm= z!Ltj8u5h*oEjDL+Cgt-_dZ>N{9?=%VdhlKAdj%_nokp-iIDvQL1{hfR>zV(n#KA6vt3*xL<42u}2SrJpig9(Ry6w4BF2Sf4LaPI^s@{3r&vW&$k+Kr|& zNW!d`oa0loC>ZjY45}lN!+vKp5MgL^wt9lj^&%_s?6iPM6v8vCBFKN;BK}_=>2cVjF~mg2P&m#o$OG!fcJ|;7dh$B>18HgS ALI3~& literal 0 HcmV?d00001 diff --git a/GETCD.IMG b/GETCD.IMG new file mode 100644 index 0000000000000000000000000000000000000000..d3df19ef53d266ac5af5994182bb30dfd1f8cb70 GIT binary patch literal 1474560 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