     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) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    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
