1 ; **************************************************************************** 2 ; lastdrv.s - TRDOS 386 (TRDOS v2.0) Program - Get Last Logical Drive Number 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 14/07/2020 6 ; 7 ; **************************************************************************** 8 9 ; 14/07/2020 10 ; 31/12/2017 11 ; TRDOS 386 (v2.0) system calls 12 _ver equ 0 13 _exit equ 1 14 _fork equ 2 15 _read equ 3 16 _write equ 4 17 _open equ 5 18 _close equ 6 19 _wait equ 7 20 _create equ 8 21 _rename equ 9 22 _delete equ 10 23 _exec equ 11 24 _chdir equ 12 25 _time equ 13 26 _mkdir equ 14 27 _chmod equ 15 28 _rmdir equ 16 29 _break equ 17 30 _drive equ 18 31 _seek equ 19 32 _tell equ 20 33 _memory equ 21 34 _prompt equ 22 35 _path equ 23 36 _env equ 24 37 _stime equ 25 38 _quit equ 26 39 _intr equ 27 40 _dir equ 28 41 _emt equ 29 42 _ldrvt equ 30 43 _video equ 31 44 _audio equ 32 45 _timer equ 33 46 _sleep equ 34 47 _msg equ 35 48 _geterr equ 36 49 _fpstat equ 37 50 _pri equ 38 51 _rele equ 39 52 _fff equ 40 53 _fnf equ 41 54 _alloc equ 42 55 _dalloc equ 43 56 _calbac equ 44 57 _dma equ 45 58 59 %macro sys 1-4 60 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 61 ; 03/09/2015 62 ; 13/04/2015 63 ; Retro UNIX 386 v1 system call. 64 %if %0 >= 2 65 mov ebx, %2 66 %if %0 >= 3 67 mov ecx, %3 68 %if %0 = 4 69 mov edx, %4 70 %endif 71 %endif 72 %endif 73 mov eax, %1 74 ;int 30h 75 int 40h ; TRDOS 386 (TRDOS v2.0) 76 %endmacro 77 78 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 79 ; sys systemcall (eax) , , 80 81 ;======================================================================== 82 ; GET LAST (LOGICAL) DRIVE NUMBER - CODE 83 ;======================================================================== 84 85 [BITS 32] ; We need 32-bit intructions for protected mode 86 87 [ORG 0] 88 START_CODE: 89 sys _drive, 0FFh ; bl = 0FFh -> get current (& last) drv num 89 <1> 89 <1> 89 <1> 89 <1> 89 <1> %if %0 >= 2 89 00000000 BBFF000000 <1> mov ebx, %2 89 <1> %if %0 >= 3 89 <1> mov ecx, %3 89 <1> %if %0 = 4 89 <1> mov edx, %4 89 <1> %endif 89 <1> %endif 89 <1> %endif 89 00000005 B812000000 <1> mov eax, %1 89 <1> 89 0000000A CD40 <1> int 40h 90 0000000C 7229 jc short error 91 92 0000000E 0005[64000000] add [cdrv], al 93 00000014 0005[67000000] add [cdrvl], al 94 0000001A 0025[81000000] add [ldrv], ah 95 00000020 0025[84000000] add [ldrvl], ah 96 97 00000026 BE[52000000] mov esi, drive_msg 98 p_msg: 99 0000002B E80E000000 call print_msg 100 here: 101 sys _exit 101 <1> 101 <1> 101 <1> 101 <1> 101 <1> %if %0 >= 2 101 <1> mov ebx, %2 101 <1> %if %0 >= 3 101 <1> mov ecx, %3 101 <1> %if %0 = 4 101 <1> mov edx, %4 101 <1> %endif 101 <1> %endif 101 <1> %endif 101 00000030 B801000000 <1> mov eax, %1 101 <1> 101 00000035 CD40 <1> int 40h 102 ; hlt 103 ; jmp short here 104 105 error: 106 00000037 BE[8A000000] mov esi, msg_err 107 0000003C EBED jmp short p_msg 108 109 print_msg: 110 sys _msg, esi, 255, 0Ah ; message with light green color 110 <1> 110 <1> 110 <1> 110 <1> 110 <1> %if %0 >= 2 110 0000003E 89F3 <1> mov ebx, %2 110 <1> %if %0 >= 3 110 00000040 B9FF000000 <1> mov ecx, %3 110 <1> %if %0 = 4 110 00000045 BA0A000000 <1> mov edx, %4 110 <1> %endif 110 <1> %endif 110 <1> %endif 110 0000004A B823000000 <1> mov eax, %1 110 <1> 110 0000004F CD40 <1> int 40h 111 ; (max. 255 chars) 112 00000051 C3 retn 113 114 ;----------------------------------------------------------------- 115 ; last drive message 116 ;----------------------------------------------------------------- 117 118 00000052 0D0A drive_msg: db 0Dh, 0Ah 119 00000054 43757272656E742044- db 'Current Drive : ' 119 0000005D 72697665203A20 120 00000064 30 cdrv: db 30h 121 00000065 2028 db ' (' 122 00000067 413A29 cdrvl: db 'A:)' 123 0000006A 0D0A db 0Dh, 0Ah 124 0000006C 4C617374204C6F6769- db 'Last Logical Drive : ' 124 00000075 63616C204472697665- 124 0000007E 203A20 125 00000081 30 ldrv: db 30h 126 00000082 2028 db ' (' 127 00000084 413A29 ldrvl: db 'A:)' 128 00000087 0D0A db 0Dh, 0Ah 129 00000089 00 db 0 130 msg_err: 131 0000008A 0D0A db 0Dh, 0Ah 132 0000008C 4572726F72202120 db 'Error ! ' 133 00000094 0D0A00 db 0Dh, 0Ah, 0