     1                                  ; ****************************************************************************
     2                                  ; ls386.s (ls1.s) - Retro Unix 386 v1.1 - /bin/ls - list file or directory
     3                                  ; ----------------------------------------------------------------------------
     4                                  ; RETRO UNIX 386 (Retro Unix == Turkish Rational Unix)
     5                                  ; Operating System Project (v0.2) by ERDOGAN TAN (Beginning: 24/12/2013)
     6                                  ;
     7                                  ; [ Last Modification: 22/01/2022 ]
     8                                  ;
     9                                  ; Derived from 'ls0.asm' source code file of 'Retro UNIX 8086 v1'
    10                                  ; operating system project, /bin/ls source code by Erdogan Tan
    11                                  ; (19/11/2013-29/11/2013)
    12                                  ;
    13                                  ; Derived from 'ls.s' file of original UNIX operating system
    14                                  ; (v1.0 for PDP-11)
    15                                  ; ****************************************************************************
    16                                  
    17                                  ; ls1.s (04/12/2015), Retro UNIX 386 v1.1 (14 byte file names)
    18                                  ; ls0.s (07/10/2015), Retro UNIX 386 v1 (8 byte file names)
    19                                  
    20                                  ; ls386.s (23/09/2015, Retro UNIX 386 v1, NASM 2.11, 32 bit version)
    21                                  ; LS0.ASM, 19/11/2013 - 29/11/2013 (Retro UNIX 8086 v1, MASM 6.11) 
    22                                  
    23                                  ; Assembler: NASM 2.15 (NASM v2.11)
    24                                  ; nasm ls386.s -l ls386.txt -o ls386 -Z error.txt
    25                                  
    26                                  ; 06/10/2015
    27                                  ; 05/10/2015
    28                                  ; 23/09/2015
    29                                  
    30                                  ; UNIX v1 system calls
    31                                  _rele 	equ 0
    32                                  _exit 	equ 1
    33                                  _fork 	equ 2
    34                                  _read 	equ 3
    35                                  _write	equ 4
    36                                  _open	equ 5
    37                                  _close 	equ 6
    38                                  _wait 	equ 7
    39                                  _creat 	equ 8
    40                                  _link 	equ 9
    41                                  _unlink	equ 10
    42                                  _exec	equ 11
    43                                  _chdir	equ 12
    44                                  _time 	equ 13
    45                                  _mkdir 	equ 14
    46                                  _chmod	equ 15
    47                                  _chown	equ 16
    48                                  _break	equ 17
    49                                  _stat	equ 18
    50                                  _seek	equ 19
    51                                  _tell 	equ 20
    52                                  _mount	equ 21
    53                                  _umount	equ 22
    54                                  _setuid	equ 23
    55                                  _getuid	equ 24
    56                                  _stime	equ 25
    57                                  _quit	equ 26	
    58                                  _intr	equ 27
    59                                  _fstat	equ 28
    60                                  _emt 	equ 29
    61                                  _mdate 	equ 30
    62                                  _stty 	equ 31
    63                                  _gtty	equ 32
    64                                  _ilgins	equ 33
    65                                  _sleep	equ 34 ; Retro UNIX 8086 v1 feature only !
    66                                  _msg	equ 35 ; Retro UNIX 386 v1 feature only !
    67                                  _geterr	equ 36 ; Retro UNIX 386 v1 feature only !
    68                                  
    69                                  %macro sys 1-4
    70                                      ; 03/09/2015	
    71                                      ; 13/04/2015
    72                                      ; Retro UNIX 386 v1 system call.		
    73                                      %if %0 >= 2   
    74                                          mov ebx, %2
    75                                          %if %0 >= 3    
    76                                              mov ecx, %3
    77                                              %if %0 = 4
    78                                                 mov edx, %4   
    79                                              %endif
    80                                          %endif
    81                                      %endif
    82                                      mov eax, %1
    83                                      int 30h	   
    84                                  %endmacro
    85                                  
    86                                  ; Retro UNIX 386 v1 system call format:
    87                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    88                                  
    89                                  [BITS 32] ; We need 32-bit intructions for protected mode
    90                                  
    91                                  [ORG 0] 
    92                                  
    93                                  START_CODE:	; / ls -- list file or directory
    94                                  
    95                                  		;.globl	flush
    96                                  		;.globl	fopen
    97                                  		;.globl	getw
    98                                  		;.globl	getc
    99                                  		;.globl	putc
   100                                  		;.globl	ctime
   101                                  		;.globl	end
   102                                  
   103                                  	;mov	eax, _end + 512
   104                                  	;and	al, 0FEh
   105                                  	;cmp	eax, esp
   106                                  	;jna	short S1
   107                                  	;mov	esp, eax
   108                                  ;S1:	 
   109                                  	;mov 	ebx, eax
   110                                  
   111                                   	; Retro UNIX 8086 v1 modification:
   112                                  	;  'sys break' is not needed to extend 
   113                                  	;  current user core memory
   114                                  	;  (because of 8086 segmentation and 32 kB 
   115                                  	;   memory allocation);
   116                                  	;  but, it is needed to clear/reset
   117                                  	;  user core memory beyond of (after) previous
   118                                  	;  'u.break' which depends on executable
   119                                  	;  file size; because 'bss'
   120                                  	;  data is not in current executable file
   121                                  	; ('BSS' is an external data structure after
   122                                  	;  the last byte of the executable file).			  	 
   123                                  	 
   124                                  	; clear bss area
   125                                  	; (It is not necessary to clear bss area 
   126                                  	; because Retro UNIX 386 v1 kernel will clear
   127                                  	; this bss area during memory page allocation.)
   128                                  	;mov 	ecx, _end
   129                                  	;mov 	edi, bss_start
   130                                  	;sub	ecx, edi
   131                                  	;shr 	cx, 2
   132                                  	;sub	eax, eax
   133                                  	;rep 	stosd 	
   134                                  
   135                                  	; sys break
   136                                  	; clears memory from 'bss' to 'bss._end+512'	
   137 00000000 BB[34150000]            	mov	ebx, _end + 512
   138                                  	sys 	_break
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74                              <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76                              <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 00000005 B811000000          <1>  mov eax, %1
    83 0000000A CD30                <1>  int 30h
   139                                  		; sys break; end+512.
   140                                  	sys	_write, 1, nl, 2
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74 0000000C BB01000000          <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76 00000011 B9[94080000]        <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78 00000016 BA02000000          <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 0000001B B804000000          <1>  mov eax, %1
    83 00000020 CD30                <1>  int 30h
   141                                  	;
   142                                  	; 12/01/2022
   143 00000022 881D[1C0B0000]          	mov	[obuf], bl ; 1 ; file descriptor/number	
   144                                  	;mov	[obuf], bx ; 1
   145                                  		; mov $1,obuf
   146 00000028 89E6                    	mov	esi, esp
   147                                  		; mov sp,r5
   148 0000002A AD                      	lodsd
   149 0000002B 48                      	dec 	eax
   150                                  	; 12/01/2022
   151                                  	; eax = number of arguments (except file name)
   152                                  	; ((eax < 32))
   153                                  	; 12/01/2022
   154 0000002C A2[C0080000]            	mov	[count], al
   155                                  	;mov	[count], ax
   156                                  		; mov (r5)+,count
   157                                  		; tst (r5)+
   158                                  		; dec count
   159                                  	; 12/01/2022
   160 00000031 A2[C1080000]            	mov	[ocount], al
   161                                  	;mov	[ocount], ax
   162                                  		; mov count,ocount
   163                                  		; bgt loop
   164                                  		; mov $dotp,r5
   165 00000036 766D                    	jna	short B0	
   166                                  	;and	eax, eax
   167                                  	;jnz	short S2	
   168                                  	;jz	short B0
   169                                  	;mov	esi, dotp
   170                                  	;jmp	short sloop
   171                                  ;S2:	
   172 00000038 AD                      	lodsd	; file name ptr
   173                                  sloop:	;loop:
   174 00000039 AD                      	lodsd	; argument pointer in sequence
   175 0000003A 89C3                    	mov	ebx, eax
   176                                  		;mov (r5)+,r4
   177 0000003C 803B2D                  	cmp	byte [ebx], '-'
   178                                  		; cmpb (r4)+,$'-
   179 0000003F 754E                    	jne	short A1
   180                                  		; bne 1f
   181 00000041 43                      	inc	ebx
   182                                  	; 12/01/2022
   183 00000042 FE0D[C1080000]          	dec	byte [ocount]
   184                                  	;dec	word [ocount]
   185                                  		; dec ocount
   186                                  A3: ;3:
   187 00000048 8A03                    	mov	al, [ebx]
   188                                  		; movb (r4)+,r0
   189 0000004A 43                      	inc	ebx
   190 0000004B 08C0                    	or	al, al
   191 0000004D 7445                    	jz	short eloop ; end of argument (string)
   192                                  		; beq eloop
   193 0000004F 3C6C                    	cmp	al, 'l'
   194                                  		; cmp r0,$'l
   195 00000051 7508                    	jne	short S3
   196                                  		; bne 4f
   197                                  	; 12/01/2022
   198 00000053 FE05[C2080000]          	inc	byte [longf]
   199                                  	;inc	word [longf]
   200                                  		; inc longf
   201 00000059 EBED                    	jmp	short A3
   202                                  		; br 3b
   203                                  S3: ;4:
   204 0000005B 3C74                    	cmp	al, 't'
   205                                  		; cmpb r0,$'t
   206 0000005D 750C                    	jne	short S4
   207                                  		; bne 4f
   208                                  	; 12/01/2022
   209                                  	; (save mtime position)
   210 0000005F C705[CC080000]1400-     	mov	dword [sortoff], 20 ; 14+6 (runix v1.1 fs)
   210 00000067 0000               
   211                                  	;mov	dword [sortoff], 14 ; 8+6 (runix v1 fs)
   212                                  		; mov $14.,sortoff
   213 00000069 EBDD                    	jmp	short A3
   214                                  		; br 3b
   215                                  S4: ;4:
   216 0000006B 3C61                    	cmp	al, 'a'
   217                                  		; cmpb r0,$'a
   218 0000006D 7508                            jne     short S5
   219                                  		; bne 4f
   220                                  	; 12/01/2022
   221 0000006F FE05[C4080000]          	inc	byte [allflg]
   222                                  	;inc	word [allflg]
   223                                  		; inc allflg
   224 00000075 EBD1                    	jmp	short A3
   225                                  S5: ;4:
   226 00000077 3C73                    	cmp	al, 's'
   227                                  		; cmpb r0,$'s
   228 00000079 7508                    	jne	short S6
   229                                  		; bne 4f
   230 0000007B FE05[C3080000]          	inc 	byte [longf+1]
   231                                  		; incb longf+1
   232 00000081 EBC5                    	jmp	short A3
   233                                  		; br 3b
   234                                  S6: ;4:
   235 00000083 3C64                    	cmp	al, 'd'
   236                                  		; cmpb r0,$'d
   237 00000085 75C1                    	jne	short A3
   238                                  		; bne 3b
   239                                  	; 12/01/2022
   240 00000087 FE05[C5080000]          	inc	byte [dirflg]
   241                                  	;inc	word [dirflg]
   242                                  		; inc dirflg
   243 0000008D EBB9                    	jmp	short A3
   244                                  		; br 3b
   245                                  A1: ;1:
   246                                  	;dec	ebx
   247                                  		; dec r4
   248 0000008F E829000000              	call	do
   249                                  		; jsr pc,do
   250                                  eloop:
   251                                  	; 12/01/2022
   252 00000094 FE0D[C0080000]          	dec	byte [count]
   253                                  	;dec	word [count]
   254                                  		; dec count
   255 0000009A 7F9D                    	jg	short sloop
   256                                  		; bgt loop
   257 0000009C A1[86080000]            	mov	eax, [dnp]
   258 000000A1 21C0                    	and	eax, eax	
   259                                  		;tst dnp
   260 000000A3 7507                    	jnz	short S7	
   261                                  		; bne 1f
   262                                  B0:
   263 000000A5 BE[8A080000]            	mov	esi, dotp
   264                                  		; mov $dotp,r5
   265 000000AA EB8D                    	jmp	short sloop
   266                                  		; br loop
   267                                  S7: ;1:
   268 000000AC BE[1C0B0000]            	mov	esi, obuf
   269 000000B1 E84A050000              	call	flush
   270                                  		; jsr r5,flush; obuf
   271                                  	sys	_exit
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74                              <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76                              <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 000000B6 B801000000          <1>  mov eax, %1
    83 000000BB CD30                <1>  int 30h
   272                                  		; sys exit
   273                                  
   274                                  ; 04/12/2015 (14 byte file names)
   275                                  ;; 26 bytes listing (source) data
   276                                  ;; structure:
   277                                  ;; offset
   278                                  ;; 0-13  : file name
   279                                  ;; 14-15 : flags
   280                                  ;; 16-17 : nlinks, uid
   281                                  ;; 18-19 : size
   282                                  ;; 20-21-22-23 : mtime
   283                                  ;; 24-25 : inode number
   284                                  
   285                                  do:
   286 000000BD 56                      	push	esi ; r5
   287 000000BE 29C0                    	sub 	eax, eax
   288 000000C0 A3[C8080000]            	mov	[tblocks], eax ; 0
   289                                  		; clr tblocks
   290 000000C5 BD[34130000]            	mov	ebp, _end
   291                                  		; mov $end,r1
   292 000000CA BF[D0080000]            	mov	edi, filnam
   293                                  		; mov $filnam,r3
   294 000000CF 891D[86080000]          	mov	[dnp], ebx
   295                                  		; mov r4,dnp
   296 000000D5 89DE                    	mov	esi, ebx ; r4
   297                                  	;mov	[isadir], ax ; 0
   298                                  	;	; clr isadir
   299                                  	; 12/01/2022
   300 000000D7 A2[C6080000]            	mov	[isadir], al ; 0
   301                                  	;cmp	[dirflg], ax ; 0
   302                                  	;	; tst dirflg
   303                                          ;ja	nondir 
   304                                  	;	; bne nondir
   305                                  	; 12/01/2022
   306 000000DC 3805[C5080000]          	cmp	[dirflg], al
   307 000000E2 7605                    	jna	short do_stat
   308 000000E4 E9BE000000              	jmp	nondir
   309                                  do_stat:
   310                                  	;mov	ebx, [dnp]
   311 000000E9 B9[F0080000]            	mov	ecx, statb
   312                                  	sys	_stat
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74                              <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76                              <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 000000EE B812000000          <1>  mov eax, %1
    83 000000F3 CD30                <1>  int 30h
   313                                  		; sys stat; dnp: 0; statb
   314 000000F5 731B                    	jnc	short B1
   315                                  		; bec 1f
   316                                  	; EBX = file name address
   317 000000F7 BE[03010000]            	mov	esi, S8
   318                                  do_err:
   319 000000FC E8A9020000              	call	questf
   320 00000101 5E                      	pop	esi
   321 00000102 C3                      	retn
   322                                  		;jsr r5,questf; < nonexistent\n\0>; .even
   323                                  		; rts pc
   324                                  S8:
   325 00000103 206E6F6E6578697374-     	db	' nonexistent', 0Dh, 0Ah, 0
   325 0000010C 656E740D0A00       
   326                                  
   327                                  B1: ;1:
   328                                  	; 12/01/2022
   329                                  	;test	word [statb+2], 4000h
   330 00000112 F605[F3080000]40        	test	byte [statb+3], 40h ; directory ?
   331                                  	;	; bit $40000,statb+2 /test directory	
   332                                  	;jz	nondir
   333                                  	;	; beq nondir
   334                                  	; 12/01/2022
   335 00000119 7505                    	jnz	short B8 ; yes
   336                                  	; not directory
   337 0000011B E987000000              	jmp	nondir
   338                                  B8:
   339                                  	;inc	word [isadir]
   340                                  		; inc isadir
   341                                  	; 12/01/2022
   342 00000120 FE05[C6080000]          	inc	byte [isadir]
   343                                  	;mov	eax, ebx
   344                                  		; mov r4,r0
   345 00000126 57                      	push	edi
   346 00000127 BF[14090000]            	mov	edi, dbuf
   347 0000012C E8F2040000              	call	fopen
   348                                  		; jsr r5,fopen; dbuf
   349 00000131 5F                      	pop	edi
   350 00000132 7315                    	jnc	short B2
   351                                  		; bcc 1f
   352                                  	; EBX = file name address
   353 00000134 BE[3B010000]            	mov	esi, S9
   354 00000139 EBC1                    	jmp	short do_err
   355                                  	;call	questf
   356                                  	;pop	esi
   357                                  	;retn
   358                                  		; jsr r5,questf; < unreadable\n\0>; .even
   359                                  		; rts pc
   360                                  S9:
   361 0000013B 20756E726561646162-     	db	' unreadable', 0Dh, 0Ah, 0
   361 00000144 6C650D0A00         
   362                                  B2:
   363                                  	;mov	esi, ebx ; r4
   364                                  S10: ;1:
   365 00000149 AC                      	lodsb	  
   366 0000014A AA                      	stosb	 
   367                                  		;movb (r4)+,(r3)+
   368 0000014B 08C0                    	or	al, al
   369 0000014D 75FA                    	jnz	short S10
   370                                  		; bne 1b
   371 0000014F 4F                      	dec	edi
   372                                  		; dec r3
   373                                  	;
   374 00000150 807FFF2F                	cmp 	byte [edi-1],'/'		
   375                                  		; cmpb -1(r3),$'/
   376 00000154 7403                    	je	short B3
   377                                  		; beq 1f
   378 00000156 B02F                    	mov	al, '/'
   379 00000158 AA                      	stosb
   380                                  		; movb $'/,(r3)+
   381                                  B3: ;1:
   382                                  	;mov	ebx, dbuf
   383 00000159 BE[14090000]            	mov	esi, dbuf
   384                                  S11:
   385 0000015E E8D1040000              	call	getw
   386                                  		; jsr r5,getw; dbuf
   387 00000163 726B                    	jc	short pass2
   388                                  		; bcs pass2
   389                                  	; 12/01/2022
   390 00000165 29C9                    	sub	ecx, ecx
   391 00000167 B107                    	mov	cl, 7
   392                                  	;mov	ecx, 7 ; 04/12/2015 (14 byte file names)
   393                                  		; mov $4,-(sp)
   394 00000169 21C0                    	and	eax, eax ; 12/01/2022
   395                                  	;and	ax, ax
   396                                  		; tst r0
   397 0000016B 750B                    	jnz	short B5
   398                                  		; bne 2f
   399                                  B4: ;3:
   400 0000016D 51                      	push	ecx
   401                                  	; mov	esi, dbuf
   402 0000016E E8C1040000              	call	getw
   403                                  		; jsr r5,getw; dbuf
   404 00000173 59                      	pop	ecx
   405 00000174 E2F7                    	loop	B4
   406                                  		; dec (sp)
   407                                  		; bne 3b
   408                                  		; tst (sp)+
   409 00000176 EBE6                    	jmp 	short S11
   410                                  	;jmp	short B3
   411                                  		; br 1b
   412                                  B5: ;2:
   413                                  	; EDI == r2
   414                                  		; mov r3,r2
   415 00000178 57                      	push	edi ; r3 (filnam +'/'+1)
   416                                  B6: ;2:
   417                                  	;; copying file name 
   418                                  	;; to listing (source) data address (ebp)
   419                                  	;; (offset 0-13) ; 04/12/2015 (14 byte file names)
   420                                  	;; and filnam (edi)
   421                                  	;
   422 00000179 51                      	push	ecx
   423                                  	; mov	esi, dbuf
   424 0000017A E8B5040000              	call	getw
   425                                  		; jsr r5,getw; dbuf
   426 0000017F 66894500                	mov	[ebp], ax
   427 00000183 45                      	inc	ebp
   428 00000184 45                      	inc	ebp
   429                                  		; mov r0,(r1)+
   430 00000185 66AB                    	stosw
   431                                  	;stosb
   432                                  		; movb r0,(r2)+
   433                                  	;xchg	al, ah
   434                                  		; swab r0
   435                                  	;stosb
   436                                  		; movb r0,(r2)+
   437 00000187 59                      	pop	ecx
   438 00000188 E2EF                    	loop	B6
   439                                  		; dec (sp)
   440                                  		; bne 2b
   441                                  		; tst (sp)+
   442 0000018A 31C0                    	xor	eax, eax ; 0
   443 0000018C AA                      	stosb
   444                                  		; clrb (r2)+
   445 0000018D 5F                      	pop	edi ; r3
   446                                  	; 12/01/2022
   447 0000018E 3805[C4080000]          	cmp	[allflg], al ; 0
   448                                  	;cmp	[allflg], ax ; 0
   449                                  		; tst allflg
   450 00000194 770A                    	ja	short B7
   451                                  		; bne 2f
   452 00000196 803F2E                  	cmp	byte [edi], '.'
   453                                  		; cmpb (r3),$'.
   454 00000199 7505                    	jne	short B7
   455                                  		; bne 2f
   456 0000019B 83ED0E                  	sub	ebp, 14 ; 04/12/2015 (14 byte file names)
   457                                  		; sub $8.,r1
   458 0000019E EBBE                    	jmp	short S11
   459                                  	;jmp	short B3
   460                                  		; br 1b
   461                                  B7: ;2:
   462                                  	;; copying 12 bytes inode data to
   463                                  	;; listing (source) data from offset
   464                                  	;; 14 to offset 25 (of 26 data bytes)
   465                                  	; 
   466 000001A0 E860030000              	call	gstat
   467                                  		; jsr r5,gstat
   468 000001A5 EBB2                    	jmp	short B3
   469                                  		; br 1b
   470                                  nondir:
   471                                  	; mov	esi, ebx ; r4
   472 000001A7 89FB                    	mov	ebx, edi ; offset filnam
   473                                  	;mov	r3,r2
   474                                  S12: ;1:
   475                                  	; ESI points to file name (input)
   476 000001A9 AC                      	lodsb
   477 000001AA AA                      	stosb
   478                                  		; movb (r4)+,(r2)+
   479 000001AB 20C0                    	and	al, al
   480 000001AD 75FA                    	jnz	short S12
   481                                  		; bne 1b
   482                                  S13: ;1:
   483 000001AF 39DF                    	cmp	edi, ebx ; offset filnam	
   484                                  		; cmp r2,r3
   485 000001B1 7607                    	jna	short S14
   486                                  		; blos	1f
   487 000001B3 4F                      	dec	edi
   488 000001B4 803F2F                  	cmp	byte [edi], '/'
   489                                                  ; cmpb -(r2),$'/
   490 000001B7 75F6                            jne     short S13
   491                                  		; bne 1b
   492 000001B9 47                      	inc	edi
   493                                  		; inc r2
   494                                  	;; EDI points to last name 
   495                                  	;; of the path (after "/")
   496                                  S14: ;1:
   497                                  	; 12/01/2022
   498 000001BA 31C9                    	xor	ecx, ecx
   499 000001BC B10E                    	mov	cl, 14
   500                                  	;mov	ecx, 14 ; 04/12/2015 (14 byte file names)
   501                                  		; mov $8.,-(sp)
   502                                  ndloop: ;1:
   503 000001BE 8A07                    	mov	al, [edi]
   504 000001C0 884500                  	mov	[ebp], al
   505 000001C3 45                      	inc	ebp
   506                                  		; movb (r2)+,(r1)+
   507                                  		; bne 2f
   508                                  		; dec r2
   509 000001C4 08C0                    	or	al, al
   510 000001C6 7401                    	jz	short S15
   511 000001C8 47                      	inc	edi
   512                                  S15:
   513 000001C9 E2F3                    	loop	ndloop
   514 000001CB E835030000              	call	gstat ; fill/get 12 bytes listing data
   515                                  	;jmp	short pass2
   516                                  S16: ;2:
   517                                  		; dec (sp)	
   518                                  		; bne 1b
   519                                  		; jsr r5,gstat
   520                                  		; tst (sp)+
   521                                  
   522                                  pass2:
   523                                  	; 12/01/2022
   524 000001D0 0FB61D[14090000]        	movzx	ebx, byte [dbuf]
   525                                  	;movzx	ebx, word [dbuf]
   526                                  		; mov dbuf,r0
   527                                  	sys	_close
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74                              <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76                              <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 000001D7 B806000000          <1>  mov eax, %1
    83 000001DC CD30                <1>  int 30h
   528                                  		; sys close
   529 000001DE 89D9                    	mov	ecx, ebx ; file descriptor
   530 000001E0 BB[34130000]            	mov	ebx, _end
   531                                  		; mov $end,r2
   532 000001E5 39DD                    	cmp	ebp, ebx  ; ebp >= _end (= last word + 4)
   533                                  		; cmp r1,r2
   534 000001E7 7502                    	jne	short C1
   535                                  		; bne 1f
   536 000001E9 5E                      	pop	esi ; r5
   537 000001EA C3                      	retn
   538                                  		; rts pc
   539                                  C1: ;1:
   540                                  ; sorting begins here
   541                                  		; mov r5,-(sp)
   542 000001EB 89EF                    	mov 	edi, ebp ; current end of listing words (+4)
   543 000001ED 55                      	push	ebp ; r1 
   544                                  		; mov r1,-(sp)
   545                                  
   546                                  	; EBX will point to mtime or file name (+14 or 0)
   547                                  	; offset of 26 bytes listing (source) data
   548 000001EE 031D[CC080000]          	add	ebx, [sortoff] 
   549                                  		; add sortoff,r2
   550                                  C2: ;1:
   551 000001F4 89D8                    	mov	eax, ebx
   552 000001F6 AB                      	stosd
   553                                  		; mov r2,(r1)+
   554                                  	; 04/12/2015 (20 -> 26)
   555 000001F7 83C31A                  	add	ebx, 26	; EBX now points to next 26 bytes
   556                                  		; add $20.,r2
   557 000001FA 39EB                    	cmp	ebx, ebp ; is EBX passed the data limit ?
   558                                  		; cmp r2,(sp)
   559 000001FC 72F6                    	jb	short C2
   560                                  		; blo 1b
   561                                  S17:
   562 000001FE 89EB                    	mov	ebx, ebp
   563                                  		; mov (sp),r2
   564 00000200 83EF04                  	sub	edi, 4
   565                                  		; tst -(r1)
   566                                  C3: ;1:
   567 00000203 89FA                    	mov	edx, edi ; r1
   568                                  S18:
   569                                  	;mov	ebp, ebx
   570                                  		; mov r2,r3
   571                                  C4: ;2:
   572 00000205 83C504                  	add	ebp, 4
   573                                  		; tst (r3)+
   574 00000208 39D5                    	cmp	ebp, edx
   575                                  		; cmp r3,r1
   576 0000020A 7724                    	ja	short C7
   577                                  		; bhi 2f
   578 0000020C 8B33                    	mov	esi, [ebx] ; file name 1 or time 1
   579                                  		; mov (r2),r4
   580 0000020E 8B7D00                  	mov	edi, [ebp] ; file name 2 or time 2
   581                                  		; mov (r3),r5
   582 00000211 833D[CC080000]00                cmp     dword [sortoff], 0
   583                                  		; tst sortoff
   584 00000218 7605                    	jna	short C5
   585                                  		; beq 4f
   586                                  
   587                                  ; sorting by modification time
   588 0000021A A7                      	cmpsd
   589 0000021B 7209                    	jb	short C6
   590                                  		; cmp (r4)+,(r5)+
   591                                  		; blo 3f
   592                                  		; bhi 2b
   593                                  		; cmp (r4)+,(r5)+
   594                                  		; blo 3f
   595 0000021D EBE6                    	jmp	short C4
   596                                  		; br 2b
   597                                  
   598                                  ; sorting by file name
   599                                  C5: ;4:
   600                                  	; ?
   601                                  	;; mov	ecx, 14 ; 04/12/2015 (14 byte file names)
   602                                  ;C5x: ;4:
   603 0000021F A6                      	cmpsb	
   604                                  		; cmpb (r4)+,(r5)+
   605 00000220 7704                    	ja	short C6
   606                                  		; bhi 3f
   607 00000222 72E1                    	jb	short C4
   608                                  		; blo 2b
   609                                  	;dec	ecx ; ?
   610                                  		; dec r0
   611                                  	;jnz	short C5x ; ?
   612                                  	;jmp	short C5x
   613 00000224 EBF9                    	jmp	short C5
   614                                  		; br 4b
   615                                  C6: ;3:
   616                                  	; 05/10/2015
   617                                  	; (xchg	[ebx],[ebp]) ; 22/01/2022
   618 00000226 8B4500                  	mov	eax, [ebp]
   619 00000229 8703                    	xchg	eax, [ebx]
   620 0000022B 894500                  	mov	[ebp], eax
   621                                  		; mov (r2),-(sp)
   622                                  		; mov (r3),(r2)
   623                                  		; mov (sp)+,(r3)
   624 0000022E EBD5                    	jmp	short C4
   625                                  		; br 2b
   626                                  C7: ;2:
   627 00000230 83C304                  	add	ebx, 4
   628                                  		; tst (r2)+
   629 00000233 39D3                    	cmp	ebx, edx
   630                                  		; cmp r2,r1
   631                                  	;jb	short S18
   632                                  	;jb	short C3
   633                                  		; blo 1b
   634                                  	;
   635 00000235 7304                    	jnb	short C8
   636 00000237 89DD                    	mov	ebp, ebx
   637 00000239 EBCA                            jmp     short S18
   638                                  C8: ;1:
   639                                  ; end of sorting
   640 0000023B 5D                      	pop	ebp ; r1 -> r2
   641                                  		; mov (sp)+,r2
   642                                  		; mov (sp)+,r5
   643                                  	
   644                                  	; BP = R2
   645                                  pass3:
   646                                  	; DX = R1 -> 'eol:' points to end of the list
   647 0000023C 8915[B3080000]          	mov	[eol], edx ; save dx/r1
   648                                  	;
   649                                  	; 13/01/2022
   650 00000242 803D[C1080000]01        	cmp	byte [ocount], 1
   651                                  	;cmp	word [ocount], 1
   652                                  		; cmp ocount,$1
   653 00000249 7E1E                    	jng	short E1
   654                                  		; ble 1f
   655                                  	; 12/01/2022
   656 0000024B 803D[C6080000]00        	cmp	byte [isadir], 0
   657                                  	;cmp	word [isadir], 0
   658                                  		; tst isadir
   659 00000252 7648                    	jna	short E2
   660                                  		; beq 2f
   661 00000254 8B35[86080000]          	mov	esi, [dnp]
   662                                  		; mov dnp,0f
   663 0000025A E83E010000              	call	pstring
   664                                  		; jsr r5,pstring; 0:..
   665 0000025F BE[AF080000]            	mov	esi, colon
   666                                  		; jsr r5,pstring; colon
   667 00000264 E834010000              	call	pstring
   668                                  E1: ;1:
   669 00000269 66833D[C2080000]00      	cmp	word [longf], 0
   670                                  		; tst longf
   671                                          ;jna	E10
   672                                  	;	; beq 1f
   673                                  	; 12/01/2022
   674 00000271 7705                    	ja	short E16
   675 00000273 E99E000000              	jmp	E10
   676                                  E16:
   677 00000278 BE[97080000]            	mov	esi, totmes
   678 0000027D E81B010000              	call	pstring
   679                                  		; jsr r5,pstring; totmes
   680 00000282 A1[C8080000]            	mov	eax, [tblocks]
   681                                  		; mov tblocks,r0
   682                                  	;mov	ebx, 4
   683                                  	; 22/01/2022
   684 00000287 29DB                    	sub	ebx, ebx
   685 00000289 B304                    	mov	bl, 4
   686 0000028B E807030000              	call	decimal
   687                                  		; jsr r5,decimal; 4
   688 00000290 BE[94080000]            	mov	esi, nl
   689 00000295 E803010000              	call	pstring
   690                                  		; jsr r5,pstring; nl
   691 0000029A EB09                            jmp     short S19
   692                                  E2: ;2:
   693 0000029C 803D[C2080000]00        	cmp	byte [longf], 0
   694                                  		; tstb longf
   695 000002A3 7671                    	jna	short E10
   696                                  		; beq 1f
   697                                  S19:	
   698 000002A5 BB[A3080000]            	mov	ebx, passwd
   699                                  		; mov $passwd,r0
   700 000002AA BF[2A110000]            	mov	edi, iobuf
   701 000002AF E86F030000              	call	fopen
   702                                  		; jsr r5,fopen; iobuf
   703 000002B4 7260                    	jc	short E10
   704                                  		; bes 1f
   705 000002B6 BF[2A0D0000]            	mov	edi, uidbuf
   706                                  		; mov $uidbuf,r3
   707                                  E3: ;3:
   708                                  E4: ;2:
   709 000002BB BE[2A110000]            	mov	esi, iobuf
   710                                  S20:
   711 000002C0 E882030000              	call	getc
   712                                  		; jsr r5,getc; iobuf
   713 000002C5 723B                    	jc	short E9
   714                                  		; bes 3f
   715                                  E17:
   716 000002C7 AA                      	stosb
   717                                  		; movb r0,(r3)+
   718 000002C8 3C3A                    	cmp	al, ':'
   719                                  		; cmpb r0,$':
   720                                  	; 21/01/2022
   721 000002CA 75F4                    	jne	short S20
   722                                  	;jne	short E4
   723                                  		; bne 2b
   724                                  E5: ;2:
   725                                  	;mov	esi, iobuf
   726 000002CC E876030000              	call	getc
   727                                  		; jsr r5,getc; iobuf
   728 000002D1 3C3A                    	cmp	al, ':'
   729                                  		; cmpb r0,$':
   730 000002D3 75F7                    	jne	short E5
   731                                  		; bne 2b
   732                                  E6: ;2:
   733                                  	;mov	esi, iobuf
   734 000002D5 E86D030000              	call	getc
   735                                  		; jsr r5,getc; iobuf
   736 000002DA 3C3A                    	cmp	al, ':'
   737                                  		; cmpb r0,$':
   738 000002DC 7403                    	je	short E7
   739                                  		; beq 2f ; 22/01/2022
   740 000002DE AA                      	stosb
   741                                  		; movb r0,(r3)+
   742 000002DF EBF4                    	jmp	short E6
   743                                  		; br 2b
   744                                  E7: ;2:
   745 000002E1 B00D                    	mov	al, 0Dh
   746 000002E3 AA                      	stosb
   747                                  		; movb $'\n,(r3)+
   748 000002E4 81FF[2A110000]          	cmp	edi, euidbuf
   749                                  		; cmp r3,$euidbuf
   750 000002EA 7316                    	jnb	short E9
   751                                  		; bhis 3f
   752                                  E8: ;2:
   753                                  	;mov	esi, iobuf
   754 000002EC E856030000              	call	getc
   755                                  		; jsr r5,getc; iobuf
   756 000002F1 3C0D                    	cmp	al, 0Dh ; end of line 
   757                                  		; cmpb r0,$'\n
   758 000002F3 75F7                    	jne	short E8
   759                                  		; bne 2b
   760                                  	;jmp	short E3
   761                                  		; br 3b
   762                                  	;
   763                                  	; 22/01/2022
   764                                  	; (msdos/windows 'passwd' text file, CRLF)
   765 000002F5 E84D030000              	call	getc
   766 000002FA 7206                    	jc	short E9
   767 000002FC 3C0A                    	cmp	al, 0Ah ; LF
   768 000002FE 75C7                    	jne	short E17
   769                                  	;
   770 00000300 EBBE                    	jmp	short S20
   771                                  E9: ;3:
   772 00000302 893D[8E080000]          	mov	[euids], edi
   773                                  		; mov r3,euids
   774                                  	; 12/01/2022	
   775 00000308 0FB61D[2A110000]        	movzx	ebx, byte [iobuf]
   776                                  
   777                                  	; 07/10/2015 (32 bit modification)
   778                                  	; Retro UNIX 8086 v1 modification !!!
   779                                  	;
   780                                  	;movzx	ebx, word [iobuf]
   781                                  	;
   782                                  	;; ??? (file descriptor ???)
   783                                  	;; Original unix v1 'ls.s' has/had source
   784                                  	;; code defect here !!!
   785                                  	;
   786                                  	sys	_close
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74                              <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76                              <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 0000030F B806000000          <1>  mov eax, %1
    83 00000314 CD30                <1>  int 30h
   787                                  		; sys close
   788                                  E10: ;1:
   789                                  	; BP = R2
   790                                  	; [eol]  = end of the list 
   791                                  	;       (= r1 in original unix v1 'ls.s')
   792 00000316 3B2D[B3080000]          	cmp	ebp, [eol]
   793                                  		; cmp r2,r1
   794 0000031C 772F                    	ja	short E14
   795                                  		; bhi 1f
   796 0000031E 8B7500                  	mov	esi, [ebp]
   797 00000321 83C504                  	add	ebp, 4
   798                                  		; mov (r2)+,r3
   799 00000324 2B35[CC080000]          	sub	esi, [sortoff]
   800                                  		; sub sortoff,r3
   801                                  	;;
   802                                  	;; ESI points to filename offset (0)
   803                                  	;; of the listing (source) data (26 bytes)
   804                                  	;
   805 0000032A E83C000000              	call	pentry
   806                                  		; jsr r5,pentry
   807                                  	;
   808                                  	; 12/01/2022
   809 0000032F 29C9                    	sub	ecx, ecx
   810 00000331 B10E                    	mov	cl, 14
   811                                  	;mov	ecx, 14 ; 04/12/2015 (14 byte file names)
   812                                  		; mov $8.,-(sp)
   813                                  	;; print/write file name (on the end of
   814                                  	;; the listing row (after time string)
   815                                  E11: ;2:
   816 00000333 AC                      	lodsb
   817                                  		; movb (r3)+,r0
   818 00000334 08C0                    	or	al, al
   819 00000336 7409                            jz      short E13
   820                                  		; beq 2f
   821 00000338 51                      	push	ecx
   822                                  	;mov	ebx, obuf
   823 00000339 E8A3020000              	call	putc
   824                                  		; jsr r5,putc; obuf
   825 0000033E 59                      	pop	ecx
   826 0000033F E2F2                    	loop	E11
   827                                  		; dec (sp)
   828                                  		; bne 2b
   829                                  E13: ;2:
   830                                  		; tst (sp)+
   831 00000341 BE[94080000]            	mov	esi, nl ; new line
   832 00000346 E852000000              	call	pstring	
   833                                  		; jsr r5,pstring; nl
   834 0000034B EBC9                    	jmp	short E10
   835                                  		; br 1b
   836                                  E14: ;1:
   837                                  	; 12/01/2022
   838 0000034D 803D[C1080000]01        	cmp	byte [ocount], 1
   839                                  	;cmp	word [ocount], 1
   840                                  		; cmp ocount,$1
   841 00000354 7E13                    	jng	short E15
   842                                  		; ble 1f
   843                                  	; 12/01/2022
   844 00000356 803D[C6080000]00        	cmp	byte [isadir], 0
   845                                  	;cmp	word [isadir], 0
   846                                  		; tst isadir
   847 0000035D 740A                    	je	short E15
   848                                  		; beq 1f
   849 0000035F BE[94080000]            	mov	esi, nl
   850 00000364 E834000000              	call	pstring
   851                                  		; jsr r5,pstring; nl
   852                                  E15: ;1:
   853 00000369 5E                      	pop 	esi	; r5	
   854 0000036A C3                      	retn
   855                                  		; rts pc
   856                                  
   857                                  pentry:
   858                                  		;mov r2,-(sp)
   859 0000036B 803D[C2080000]00        	cmp	byte [longf], 0
   860                                  		; tstb longf
   861 00000372 7741                    	ja	short listl
   862                                  		; bne listl
   863 00000374 803D[C3080000]00        	cmp	byte [longf+1], 0
   864                                  		; tstb longf+1
   865 0000037B 7701                    	ja	short S21
   866                                  		; bne 2f
   867                                  		; mov (sp)+,r2
   868 0000037D C3                      	retn
   869                                  		; rts r5
   870                                  S21: ;2:
   871 0000037E 0FB74612                	movzx	eax, word [esi+18] ; 04/12/2015 (+12 -> +18)
   872                                  		; mov 12.(r3),r0
   873                                  	; 12/01/2022
   874                                  	; eax = file size
   875 00000382 E84B020000              	call	calcb
   876                                  		; jsr r5,calcb
   877 00000387 56                      	push	esi
   878                                  	;mov	ebx, 3
   879                                  	; 12/01/2022
   880 00000388 29DB                    	sub	ebx, ebx
   881 0000038A B303                    	mov	bl, 3
   882 0000038C E806020000              	call	decimal
   883                                  		; jsr r5,decimal; 3
   884 00000391 E802000000              	call	_pstring
   885                                  		; jsr r5,pstring; space
   886                                  		; mov (sp)+,r2
   887 00000396 5E                      	pop	esi
   888 00000397 C3                      	retn
   889                                  		; rts r5
   890                                  
   891                                  _pstring:
   892 00000398 BE[A1080000]            	mov	esi, space
   893                                  
   894                                  pstring:
   895                                  		; mov r5,-(sp)
   896                                  		; mov (r5),r5
   897                                  S22: ;1:
   898 0000039D AC                      	lodsb
   899                                  		; movb (r5)+,r0
   900 0000039E 20C0                    	and	al, al
   901 000003A0 7407                    	jz	short S23
   902                                  		; beq 1f
   903                                  	;mov	ebx, obuf
   904 000003A2 E83A020000              	call	putc	
   905                                  		; jsr r5,putc; obuf
   906 000003A7 EBF4                    	jmp	short S22
   907                                  		; br 1b
   908                                  S23: ;1:
   909 000003A9 C3                      	retn
   910                                  		; mov (sp)+,r5
   911                                  		; tst (r5)+
   912                                  		; rts r5
   913                                  
   914                                  questf:
   915 000003AA 56                      	push	esi
   916 000003AB 89DE                    	mov	esi, ebx
   917                                  		; mov r4,0f
   918 000003AD E8EBFFFFFF              	call	pstring
   919                                  		; jsr r5,pstring; 0:..
   920 000003B2 5E                      	pop	esi
   921                                  		; mov r5,0f
   922                                  	;call	pstring
   923                                  		; jsr r5,pstring; 0:..
   924                                  	;retn
   925                                  	;
   926 000003B3 EBE8                    	jmp	short pstring
   927                                  ;1:
   928                                  		; tstb	(r5)+
   929                                  		; bne	1b
   930                                  		; inc	r5
   931                                  		; bic	$1,r5
   932                                  		; rts	r5
   933                                  listl:
   934                                  	; 06/10/2015 (32 bit modifications)
   935 000003B5 0FB74618                	movzx	eax, word [esi+24] ; 04/12/2015 (+18 -> +24)
   936                                                 ; mov 18.(r3),r0  / inode
   937 000003B9 56                      	push	esi ; r3
   938                                  	;mov	ebx, 4
   939                                  	; 12/01/2022
   940 000003BA 31DB                    	xor	ebx, ebx
   941 000003BC B304                    	mov	bl, 4
   942 000003BE E8D4010000              	call	decimal
   943                                  		; jsr r5,decimal; 4
   944 000003C3 E8D0FFFFFF              	call	_pstring
   945                                  		; jsr r5,pstring; space
   946                                  
   947 000003C8 5E                      	pop	esi ; r3
   948 000003C9 89F7                    	mov	edi, esi
   949                                  		; mov r3,r4
   950 000003CB 83C70E                  	add	edi, 14 ; 04/12/2015 (8 -> 14)
   951                                  		; add $8.,r4 / get to flags
   952                                  F0:
   953                                  	; 12/01/2022
   954 000003CE F6470110                	test	byte [edi+1], 10h
   955                                  	;test	word [edi], 1000h
   956                                  		; bit $10000,(r4) /large
   957 000003D2 7404                    	jz	short F1
   958                                  		; beq 2f
   959 000003D4 B06C                    	mov	al, 'l'
   960                                  	; 13/01/2022
   961                                  	;call	mode
   962                                  		; jsr r5,mode; 'l
   963 000003D6 EB02                    	jmp	short F2
   964                                  		; br 3f
   965                                  F1: ;2:
   966 000003D8 B073                    	mov	al, 's'
   967                                  F2:
   968 000003DA E802020000              	call	mode
   969                                  		; jsr r5,mode; 's
   970                                  ;F2: ;3:
   971 000003DF F6470140                	test	byte [edi+1], 40h
   972                                  	;test	word [edi], 4000h 
   973                                  		; bit $40000,(r4) /directory
   974 000003E3 7404                    	jz	short F3
   975                                  		; beq 2f
   976 000003E5 B064                    	mov	al, 'd'
   977                                  	; 13/01/2022
   978                                  	;call	mode
   979                                  		; jsr r5,mode; 'd
   980 000003E7 EB12                    	jmp	short F6
   981                                  		; br 3f
   982                                  F3: ;2:
   983 000003E9 F60720                  	test	byte [edi], 20h 
   984                                  		; bit $40,(r4)  /set uid
   985 000003EC 7404                    	jz	short F4
   986                                  		; beq 2f
   987 000003EE B075                    	mov	al, 'u'
   988                                  	; 13/01/2022
   989                                  	;call	mode
   990                                  		; jsr r5,mode; 'u
   991 000003F0 EB09                    	jmp	short F6
   992                                  		; br 3f
   993                                  F4: ;2:
   994                                  	; 13/01/2022
   995 000003F2 B02D                    	mov	al, '-'
   996 000003F4 F60710                  	test	byte [edi], 10h
   997                                  		; bit $20,(r4)   /executable
   998 000003F7 7402                    	jz	short F5
   999                                  		; beq 2f
  1000 000003F9 B078                    	mov	al, 'x'
  1001                                  	; 13/01/2022
  1002                                  	;call	mode
  1003                                  		; jsr r5,mode; 'x
  1004                                  	;jmp	short F6
  1005                                  		; br 3f
  1006                                  F5: ;2:
  1007                                  	; 13/01/2022
  1008                                  	;call	_mode
  1009                                  		; jsr r5,mode; '-
  1010                                  F6: ;3:
  1011                                  	; 13/01/2022
  1012 000003FB E8E1010000              	call	mode
  1013 00000400 B02D                    	mov	al, '-'
  1014                                  	;
  1015 00000402 F60708                  	test	byte [edi], 8
  1016                                  		; bit $10,(r4)  /read owner
  1017 00000405 7402                    	jz	short F7
  1018                                  		; beq 2f
  1019 00000407 B072                    	mov	al, 'r'
  1020                                  	; 13/01/2022
  1021                                  F7:
  1022 00000409 E8D3010000              	call	mode
  1023                                  		; jsr r5,mode; 'r
  1024                                  	;jmp	short F8
  1025                                  		; br 3f
  1026                                  ;F7: ;2:
  1027                                  	; 13/01/2022
  1028                                  	;call	_mode
  1029                                                  ; jsr r5, mode; '-
  1030                                  F8: ;3:
  1031                                  	; 13/01/2022
  1032 0000040E B02D                    	mov	al, '-'
  1033                                  	;
  1034 00000410 F60704                  	test	byte [edi], 4
  1035                                  		; bit $4,(r4)  /write owner
  1036 00000413 7402                    	jz	short F9
  1037                                  		; beq 2f
  1038 00000415 B077                    	mov	al, 'w'
  1039                                  	; 13/01/2022
  1040                                  F9:
  1041 00000417 E8C5010000              	call	mode
  1042                                  		; jsr r5,mode; 'w
  1043                                  	;jmp	short F10
  1044                                  		; br 3f
  1045                                  ;F9: ;2:
  1046                                  	;call	_mode
  1047                                  		; jsr r5,mode; '-
  1048                                  F10: ;3:
  1049                                  	; 13/01/2022
  1050 0000041C B02D                    	mov	al, '-'
  1051                                  	;
  1052 0000041E F60702                  	test	byte [edi], 2
  1053                                  		; bit $2,(r4)  /read non-owner
  1054 00000421 7402                    	jz	short F11
  1055                                  		; beq 2f
  1056 00000423 B072                    	mov	al, 'r'
  1057                                  	; 13/01/2022
  1058                                  F11:
  1059 00000425 E8B7010000              	call	mode
  1060                                  		; jsr r5,mode; 'r
  1061                                  	;jmp	short F12
  1062                                  		; br 3f
  1063                                  ;F11: ;2:
  1064                                  	;call	_mode
  1065                                  		; jsr r5,mode; '-
  1066                                  F12: ;3:
  1067                                  	; 13/01/2022
  1068 0000042A B02D                    	mov	al, '-'
  1069                                  	;
  1070 0000042C F60701                  	test	byte [edi], 1 ; (r4)
  1071                                  		; bit $1,(r4)+  /write non-owner
  1072 0000042F 7402                    	jz	short F13
  1073                                  		; beq 2f
  1074 00000431 B077                    	mov	al, 'w'
  1075                                  F13:
  1076 00000433 E8A9010000              	call	mode
  1077                                  		; jsr r5,mode; 'w
  1078                                  	;jmp	short F14
  1079                                  		; br 3f
  1080                                  ;F13: ;2:
  1081                                  	;call	_mode
  1082                                  		; jsr r5,mode; '-
  1083                                  F14: ;3:
  1084 00000438 56                      	push	esi ; r3
  1085 00000439 E85AFFFFFF              	call	_pstring
  1086                                  		; jsr r5,pstring; space
  1087                                  	; inc 	edi, 4 ;; (r4)+
  1088                                  	; inc 	edi ;;
  1089 0000043E 89FE                    	mov	esi, edi
  1090 00000440 66AD                    	lodsw	; (r4)+
  1091                                  	; 12/01/2022
  1092 00000442 29C0                    	sub	eax, eax
  1093 00000444 AC                      	lodsb	;; nlinks
  1094                                  	;movzx	eax, al
  1095                                  		; movb (r4)+,r0
  1096                                  	;mov	ebx, 2
  1097                                  	; 12/01/2022
  1098 00000445 29DB                    	sub	ebx, ebx
  1099 00000447 B302                    	mov	bl, 2
  1100 00000449 E841010000              	call	_decimal
  1101                                  		; jsr r5,decimal; 2
  1102 0000044E AC                      	lodsb	;; uid
  1103                                  		; movb (r4)+,r2
  1104 0000044F E833000000              	call	puid
  1105                                  		; jsr pc,puid
  1106 00000454 66AD                    	lodsw	;; size
  1107                                  		; mov (r4)+,r0
  1108                                  	;movzx	eax, ax
  1109                                          ;mov	ebx, 5
  1110                                  	; 12/01/2022
  1111 00000456 31DB                    	xor	ebx, ebx
  1112 00000458 B305                    	mov	bl, 5
  1113 0000045A E830010000              	call	_decimal
  1114                                  		; jsr r5,decimal; 5
  1115 0000045F 56                              push    esi
  1116 00000460 E833FFFFFF              	call	_pstring
  1117                                  		; jsr r5,pstring; space
  1118 00000465 5E                              pop     esi
  1119                                  		; mov r1,-(sp)
  1120 00000466 8B1D[B3080000]                  mov     ebx, [eol] ;r1
  1121 0000046C AD                              lodsd   ; mtime
  1122                                         		; mov (r4)+,r0
  1123                                  		; mov (r4)+,r1
  1124                                  		; sub $16.,sp
  1125                                  		; mov sp,r2
  1126                                          ; EAX = unix time (epoch)
  1127 0000046D E811020000              	call	ctime
  1128                                  		; jsr pc,ctime
  1129                                  		; mov sp,r2
  1130                                  	;mov	ecx, 25
  1131                                  	; 12/01/2022
  1132 00000472 29C9                    	sub	ecx, ecx
  1133 00000474 B119                    	mov	cl, 25
  1134                                  	;;mov	ecx, 15
  1135                                  		; mov $15.,-(sp)
  1136 00000476 BE[68080000]            	mov	esi, cbuf
  1137                                  F15: ;1:
  1138 0000047B 51                      	push	ecx
  1139 0000047C AC                      	lodsb
  1140                                  		; movb (r2)+,r0
  1141                                  	;mov	ebx, obuf
  1142 0000047D E85F010000              	call	putc
  1143                                  		; jsr r5,putc; obuf
  1144 00000482 59                      	pop	ecx
  1145 00000483 E2F6                    	loop	F15
  1146                                  		; dec (sp)
  1147                                  		; bne 1b
  1148                                  		; add $18.,sp
  1149                                  		; mov (sp)+,r1
  1150                                  	;call	_pstring
  1151                                  		; jsr r5,pstring; space
  1152                                  		; mov (sp)+,r2
  1153 00000485 5E                      	pop	esi ; r3
  1154 00000486 C3                      	retn
  1155                                  		; rts r5
  1156                                  
  1157                                  puid:
  1158                                  	; 22/01/2022
  1159                                  	; 20/01/2022 - Retro UNIX 386 v1.1
  1160                                  	; 06/10/2015 (32 bit modifications)
  1161                                  	; print user name
  1162                                  	; AL = user id/number
  1163                                  	;
  1164 00000487 56                      	push	esi ; r4 ; 20/01/2022
  1165                                  G0:
  1166                                  	; 22/01/2022
  1167                                  	;push	eax ; r2
  1168                                  	;	; mov r1,-(sp)
  1169 00000488 BE[2A0D0000]            	mov 	esi, uidbuf
  1170                                  		; mov $uidbuf,r1
  1171                                  G1: ;1:
  1172                                  	; 22/01/2022
  1173 0000048D 50                      	push	eax ; r2
  1174                                  		; mov r1,-(sp)
  1175                                  	;cmp	esi, [euids] ; 22/01/2022
  1176                                  		; cmp r1,euids
  1177                                  	;jnb	short G8
  1178                                  		; bhis 1f
  1179 0000048E 56                      	push	esi ; 0:
  1180                                  		; mov r1,0f
  1181                                  G2: ;2:
  1182 0000048F AC                      	lodsb
  1183 00000490 20C0                    	and	al, al	
  1184                                  		; tstb (r1)+
  1185 00000492 7409                    	jz 	short G3
  1186                                  		; beq 3f
  1187 00000494 3C3A                    	cmp	al, ':'
  1188                                  		; cmpb -1(r1),$':
  1189 00000496 75F7                    	jne	short G2
  1190                                  		; bne 2b
  1191 00000498 30C0                    	xor	al, al ; 0
  1192 0000049A 8846FF                  	mov	[esi-1], al  ;0
  1193                                  		; clrb -1(r1)
  1194                                  G3: ;3:
  1195 0000049D 31DB                    	xor	ebx, ebx
  1196                                  		; clr -(sp)
  1197                                  	;mov	ecx, 10
  1198 0000049F B10A                    	mov	cl, 10
  1199                                  G4: ;3:
  1200 000004A1 AC                      	lodsb
  1201                                  		; movb (r1)+,r0
  1202 000004A2 2C30                    	sub	al, '0'
  1203                                  		; sub $'0,r0
  1204 000004A4 3C09                    	cmp	al, 9
  1205                                  		; cmp r0,$9.
  1206 000004A6 770A                    	ja	short G5
  1207                                  		; bhi 3f
  1208                                  		; mov r1,-(sp)
  1209                                  	; 07/10/2015
  1210 000004A8 0FB6C0                  	movzx	eax, al 
  1211 000004AB 93                      	xchg	eax, ebx
  1212                                  		; mov 2(sp),r1
  1213 000004AC F7E1                    	mul	ecx	
  1214                                  		; mpy $10.,r1
  1215 000004AE 01C3                    	add	ebx, eax
  1216                                  		; add r0,r1
  1217                                  		; mov r1,2(sp)
  1218                                  		; mov (sp)+,r1
  1219 000004B0 EBEF                    	jmp	short G4
  1220                                  		; br 3b
  1221                                  G5: ;3:
  1222                                  	;pop	esi ; 0:
  1223                                  	; 20/01/2022
  1224                                  	; (esi = r1)
  1225 000004B2 5A                      	pop	edx ; 0:
  1226 000004B3 58                      	pop	eax ; r2
  1227                                  		; mov (sp)+,r0
  1228 000004B4 39C3                    	cmp	ebx, eax	
  1229                                  		; cmp r0,r2
  1230                                  	;jne	short G1
  1231                                  		; bne 1b
  1232 000004B6 7424                            je      short S24
  1233                                  	; 20/01/2022
  1234                                  	; (esi = r1)
  1235 000004B8 3B35[8E080000]          	cmp	esi, [euids] ; 22/01/2022
  1236 000004BE 72CD                    	jb	short G1
  1237                                  	;jmp	short G8
  1238                                  G8:
  1239 000004C0 50                      	push	eax ; r2/UID
  1240 000004C1 E8D2FEFFFF              	call	_pstring
  1241                                  		;jsr r5,pstring; space
  1242 000004C6 58                      	pop	eax
  1243                                  		; mov r2,r0
  1244                                  	;mov	ebx, 3
  1245                                  	; 12/01/2022
  1246 000004C7 29DB                    	sub	ebx, ebx
  1247 000004C9 B303                    	mov	bl, 3
  1248 000004CB E8C7000000              	call	decimal
  1249                                  		; jsr r5,decimal; 3
  1250 000004D0 BE[9E080000]            	mov	esi, space3
  1251 000004D5 E8C3FEFFFF              	call	pstring
  1252                                  		; jsr r5,pstring; space3
  1253 000004DA 5E                      	pop	esi ; r4 ; 20/01/2022
  1254                                  		; mov (sp)+,r1
  1255 000004DB C3                      	retn
  1256                                  		; rts pc
  1257                                  S24:
  1258                                  	;push	esi ; 0:
  1259                                  	; 20/01/2022
  1260 000004DC 52                      	push	edx ; 0:
  1261 000004DD E8B6FEFFFF              	call	_pstring
  1262                                  		; jsr r5,pstring; space
  1263 000004E2 5E                      	pop	esi ; 0:
  1264 000004E3 56                      	push	esi ; 0:
  1265 000004E4 E8B4FEFFFF              	call	pstring
  1266                                  		; jsr r5,pstring; 0:..
  1267 000004E9 5E                      	pop	esi ; 0:
  1268                                  		; mov 0b,r1
  1269                                  	; 12/01/2022
  1270 000004EA 31C9                    	xor	ecx, ecx
  1271 000004EC B106                    	mov	cl, 6
  1272                                  	;mov	cx, 6
  1273                                  		; mov $6,-(sp)
  1274                                  G6: ;3:
  1275 000004EE AC                      	lodsb
  1276                                  		; tstb (r1)+
  1277 000004EF 20C0                    	and	al, al
  1278 000004F1 7406                    	jz	short G7
  1279                                  		; beq 3f
  1280 000004F3 FEC9                    	dec	cl
  1281                                  		; dec (sp)
  1282                                  	;jmp	short G6
  1283                                  	;	; br 3b
  1284                                  	; 22/01/2022
  1285                                  	; (max. 5 chars of uid will be usable here)
  1286 000004F5 75F7                    	jnz	short G6
  1287 000004F7 FEC1                    	inc	cl
  1288                                  G7: ;3:
  1289                                  	;push	cx
  1290                                  	; 12/01/2022
  1291 000004F9 51                      	push	ecx
  1292 000004FA E899FEFFFF              	call	_pstring
  1293                                  		; jsr r5,pstring; space
  1294                                  	;pop	cx
  1295 000004FF 59                      	pop	ecx
  1296                                  	; 12/01/2022
  1297 00000500 49                      	dec	ecx
  1298                                  	;dec	cx
  1299                                  		; dec (sp)
  1300                                  	;jg	short G7
  1301                                  	;	; bgt 3b
  1302                                  	; 22/01/2022
  1303 00000501 75F6                    	jnz	short G7
  1304                                  		; tst (sp)+
  1305 00000503 5E                      	pop	esi ; r4 ; 20/01/2022
  1306                                  		; mov (sp)+,r1
  1307 00000504 C3                      	retn
  1308                                  		; rts pc
  1309                                  ;G8: ;1:
  1310                                  		; jsr r5,pstring; space
  1311                                  		; mov r2,r0
  1312                                  		; jsr r5,decimal; 3
  1313                                  		; jsr r5,pstring; space3
  1314                                  		; mov (sp)+,r1
  1315                                  		; rts pc
  1316                                  
  1317                                  ;_mode:
  1318                                  ;	mov	al, '-'
  1319                                  ;mode:
  1320                                  	; AL = mode char
  1321                                  		; mov (r5)+,r0
  1322                                  	;mov	ebx, obuf
  1323                                  ;	call	putc
  1324                                  		; jsr r5,putc; obuf
  1325                                  ;	retn
  1326                                  		; rts r5
  1327                                  
  1328                                  gstat:
  1329                                  	; 06/10/2015 (32 bit modifications)
  1330 00000505 55                      	push	ebp
  1331                                  		; mov r1,-(sp)
  1332 00000506 81C500020000            	add	ebp, 512
  1333                                  		; add $512.,r1
  1334 0000050C 3B2D[82080000]          	cmp	ebp, [brk]
  1335                                  		; cmp r1,0f
  1336 00000512 720F                    	jb	short D1
  1337                                  		; blo 1f
  1338 00000514 892D[82080000]          	mov	[brk], ebp
  1339                                  		; mov r1,0f
  1340                                  	sys	_break, ebp ; sys _break, brk
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74 0000051A 89EB                <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76                              <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 0000051C B811000000          <1>  mov eax, %1
    83 00000521 CD30                <1>  int 30h
  1341                                  		; sys break; 0: end+512.
  1342                                  D1: ;1:
  1343 00000523 5D                      	pop	ebp
  1344                                  		; mov (sp)+,r1
  1345 00000524 31C0                    	xor	eax, eax
  1346                                  	; Detailed (Long) listing
  1347 00000526 663905[C2080000]        	cmp	[longf], ax ;0
  1348                                  		; tst longf
  1349 0000052D 7708                    	ja	short D2
  1350                                  		; bne 2f
  1351                                  	; Sorting by modification time
  1352 0000052F 3905[CC080000]          	cmp	[sortoff], eax ;0
  1353                                  		; tst sortoff
  1354 00000535 761D                    	jna	short D4
  1355                                  		; beq 1f
  1356                                  D2: ;2:
  1357                                          sys     _stat, filnam, statb
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74 00000537 BB[D0080000]        <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76 0000053C B9[F0080000]        <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 00000541 B812000000          <1>  mov eax, %1
    83 00000546 CD30                <1>  int 30h
  1358                                  		; sys stat; filnam; statb
  1359 00000548 731C                    	jnc	short D3
  1360                                  		; bec 2f
  1361                                  		; mov r4,-(sp)
  1362                                  	;mov	ebx, filnam
  1363                                  		; mov $filnam,r4
  1364 0000054A BE[58050000]            	mov	esi, S25
  1365 0000054F E856FEFFFF              	call	questf
  1366                                  		; jsr r5,questf; < unstatable\n\0>; .even
  1367                                  		; mov (sp)+,r4
  1368                                  D4:
  1369                                  	; 12/01/2022
  1370 00000554 83C50C                  	add	ebp, 12	; 26-14 ?
  1371                                  		; add $12.,r1
  1372 00000557 C3                      	retn
  1373                                  		; rts r5
  1374                                  S25:
  1375 00000558 20756E737461746162-     	db	' unstatable', 0Dh, 0Ah, 0
  1375 00000561 6C650D0A00         
  1376                                  
  1377                                  D3: ;2:
  1378 00000566 57                      	push	edi
  1379 00000567 89EF                    	mov	edi, ebp
  1380 00000569 BE[F2080000]            	mov	esi, statb + 2
  1381                                  		; mov $statb+2,r0
  1382 0000056E A5                      	movsd
  1383                                  		; mov (r0)+,(r1)+ /flags
  1384                                  		; mov (r0)+,(r1)+ /nlinks, uid
  1385                                  		; mov r0,-(sp)
  1386                                  
  1387 0000056F 0FB706                  	movzx	eax, word [esi]
  1388                                  		; mov (r0),r0
  1389                                  	; eax = file (directory) size
  1390 00000572 E85B000000              	call	calcb
  1391                                  		; jsr r5,calcb
  1392 00000577 0105[C8080000]          	add	[tblocks], eax
  1393                                  		; add r0,tblocks
  1394                                  		; mov (sp)+,r0
  1395 0000057D 66A5                    	movsw
  1396                                  		; mov (r0)+,(r1)+ /size
  1397 0000057F 83C614                  	add	esi, 20
  1398                                  		; add $20.,r0 	  /dska, ctim
  1399 00000582 A5                      	movsd	; inode (file) modification/write time
  1400                                  		; mov (r0)+,(r1)+ /mtim
  1401                                  		; mov (r0)+,(r1)+
  1402 00000583 66A1[F0080000]          	mov	ax, [statb]
  1403 00000589 66AB                    	stosw
  1404                                  		; mov statb,(r1)+ /inode
  1405 0000058B 89FD                    	mov	ebp, edi
  1406 0000058D 5F                      	pop	edi
  1407 0000058E C3                      	retn
  1408                                  		; rts r5
  1409                                  ;D4: ;1:
  1410                                  ;	add	ebp, 12
  1411                                  		; add $12.,r1
  1412                                  ;	retn
  1413                                  		; rts	r5
  1414                                  
  1415                                  _decimal:
  1416 0000058F 56                      	push	esi
  1417 00000590 E802000000              	call	decimal
  1418 00000595 5E                      	pop	esi
  1419 00000596 C3                      	retn
  1420                                  	
  1421                                  decimal: 
  1422                                  ; convert number to decimal number chars
  1423                                  	; 5/10/2015 (32 bit modifications)
  1424                                  	; EAX = number to be converted
  1425                                  	; EBX = number of digits (=4)
  1426                                  		; mov r1,-(sp)
  1427                                  		; mov r2,-(sp)
  1428                                  		; mov r3,-(sp)
  1429                                  	;push	edi
  1430 00000597 31D2                    	xor	edx, edx
  1431                                  	; 12/01/2022
  1432 00000599 29C9                    	sub	ecx, ecx 
  1433 0000059B B10A                    	mov	cl, 10
  1434 0000059D 89CE                    	mov	esi, ecx ; esi = 10
  1435 0000059F B106                    	mov	cl, 6
  1436                                  	;mov	ecx, 6
  1437                                  		; mov $6,r2
  1438 000005A1 BF[2A0D0000]            	mov	edi, numbuf + 6
  1439                                  		; mov $numbuf+6,r3
  1440                                  	; 12/01/2022
  1441                                  	;mov	esi, 10
  1442                                  S26: ;1:
  1443                                  	;and	eax, eax
  1444                                  	;jz	short S27
  1445                                  		;mov r0,r1
  1446                                  	;xor 	edx, edx
  1447                                  		; clr r0
  1448                                  	;mov	esi, 10		
  1449                                  		; dvd $10.,r0
  1450 000005A6 F7F6                    	div	esi
  1451                                  ;S27:
  1452 000005A8 80C230                  	add	dl, '0'
  1453                                  		; add $'0,r1
  1454 000005AB 4F                      	dec	edi
  1455 000005AC 8817                    	mov	[edi], dl
  1456                                  		; movb r1,-(r3)
  1457 000005AE 30D2                    	xor	dl, dl
  1458 000005B0 E2F4                    	loop	S26
  1459                                  		; sob r2,1b
  1460 000005B2 B020                    	mov	al, 20h ; space
  1461 000005B4 B105                    	mov	cl, 5
  1462                                  S28: ;1:
  1463                                  	;cmp	edi, numbuf + 5
  1464                                  		; cmp r3,$numbuf+5
  1465                                  	;je	short S29
  1466                                  		; beq 1f
  1467 000005B6 803F30                  	cmp	byte [edi], '0'
  1468                                  		; cmpb (r3),$'0
  1469 000005B9 7503                    	jne	short S29
  1470                                  		; bne 1f
  1471                                  	;mov	al, 20h
  1472 000005BB AA                      	stosb
  1473                                  		; movb $' ,(r3)+
  1474                                  	;jmp	short S28
  1475                                  		; br 1b
  1476 000005BC E2F8                    	loop	S28
  1477                                  S29: ;1:
  1478 000005BE BE[2A0D0000]            	mov	esi, numbuf + 6
  1479                                  		; mov $numbuf+6,r1
  1480 000005C3 29DE                    	sub	esi, ebx
  1481                                  		; sub (r5),r1
  1482                                  	;mov	ecx, ebx
  1483 000005C5 88D9                    	mov	cl, bl
  1484                                  		; mov (r5)+,-(sp)
  1485                                  S30: ;1:
  1486 000005C7 51                      	push	ecx
  1487 000005C8 AC                      	lodsb
  1488                                  		; movb (r1)+,r0
  1489                                  	;mov	ebx, obuf	
  1490 000005C9 E813000000              	call	putc
  1491                                  		; jsr r5,putc; obuf
  1492 000005CE 59                      	pop	ecx
  1493 000005CF E2F6                    	loop	S30
  1494                                  		; dec (sp)
  1495                                  		; bne 1b
  1496                                  		; tst (sp)+
  1497                                  		; mov (sp)+,r3
  1498                                  		; mov (sp)+,r2
  1499                                  		; mov (sp)+,r1
  1500                                  	;pop	edi
  1501 000005D1 C3                      	retn
  1502                                  		; rts r5
  1503                                  
  1504                                  calcb:
  1505                                  	; 06/10/2015 (32 bit modifications)
  1506                                  	; calculate number of blocks
  1507                                  	; 12/01/2022 - Retro UNIX 386 v2 fs inode
  1508                                  	; bl = high byte of inode flags
  1509                                  	; eax = file (directory) size
  1510 000005D2 05FF010000              	add	eax, 511
  1511 000005D7 C1E809                  	shr	eax, 9 ; (eax+511)/512
  1512                                  		; add $511.,r0
  1513                                  		; clrb r0
  1514                                  		; swab r0
  1515                                  		; asr r0
  1516                                  	; eax = (size+511)/512
  1517                                  	; large file ? (>=4096 bytes)
  1518 000005DA 83F808                  	cmp	eax, 8
  1519                                  		; cmp r0,$8
  1520 000005DD 7201                    	jb	short S31
  1521                                  		; blo 1f
  1522                                  	; add indirect block
  1523 000005DF 40                      	inc	eax	
  1524                                  		; inc r0
  1525                                  S31: ;1:
  1526 000005E0 C3                      	retn
  1527                                  		; rts r5	
  1528                                  
  1529                                  	; 13/01/2022
  1530                                  ;_mode:
  1531                                  ;	mov	al, '-'
  1532                                  mode:
  1533                                  	; AL = mode char
  1534                                  		; mov (r5)+,r0
  1535                                  	;mov	ebx, obuf
  1536                                  ;	call	putc
  1537                                  		; jsr r5,putc; obuf
  1538                                  ;	retn
  1539                                  		; rts r5
  1540                                  
  1541                                  ; 'putc' procedure
  1542                                  ; is derived from 'put.s'
  1543                                  ; file of original UNIX v5
  1544                                  ;
  1545                                  ; write characters on output file
  1546                                  putc:
  1547                                  	; AL = character to be written
  1548                                  	; obuf = output buffer
  1549                                  	;; EBX = buffer address
  1550 000005E1 56                      	push 	esi
  1551                                  		;mov r1,-(sp)
  1552 000005E2 BE[1C0B0000]            	mov 	esi, obuf
  1553                                  	;mov	esi, ebx
  1554                                  		;mov (r5)+,r1
  1555                                  S32: ;1:
  1556 000005E7 66FF4E02                	dec	word [esi+2]
  1557                                  		; dec 2(r1)
  1558 000005EB 7909                    	jns	short S33
  1559                                  		; bge 1f
  1560 000005ED 50                      	push	eax	
  1561                                  		; mov r0,-(sp)
  1562 000005EE E80D000000              	call	fl
  1563                                  		; jsr pc,fl
  1564 000005F3 58                      	pop	eax
  1565                                  		; mov (sp)+,r0
  1566 000005F4 EBF1                    	jmp	short S32
  1567                                  		; br 1b
  1568                                  S33: ;1:
  1569 000005F6 8B5E04                  	mov	ebx, [esi+4]
  1570 000005F9 8803                    	mov	[ebx], al
  1571                                  		; movb r0,*4(r1)
  1572 000005FB FF4604                  	inc	dword [esi+4]
  1573                                  		; inc 4(r1)
  1574 000005FE 5E                      	pop	esi
  1575                                  		; mov (sp)+,r1
  1576 000005FF C3                      	retn
  1577                                  		; rts r5
  1578                                  
  1579                                  ; 'flush' procedure
  1580                                  ; is derived from 'put.s'
  1581                                  ; file of original UNIX v5
  1582                                  
  1583                                  flush:
  1584                                  		; mov r0,-(sp)
  1585                                  		; mov r1,-(sp)
  1586                                  		; mov (r5)+,r1
  1587                                  		; jsr pc,fl
  1588                                  		; mov (sp)+,r1
  1589                                  		; mov (sp)+,r0
  1590                                  		; rts r5
  1591                                  fl:
  1592                                  	;mov	ecx, esi
  1593                                  	;	; mov r1,r0
  1594                                  	;add	ecx, 8
  1595                                  	;	; add $6,r0
  1596                                  	; 12/01/2022
  1597                                  	;lea	ecx, [esi+8]
  1598 00000600 31C9                    	xor	ecx, ecx
  1599 00000602 B108                    	mov	cl, 8
  1600 00000604 01F1                    	add	ecx, esi	
  1601                                  	;push	ecx		; Buffer data address
  1602                                  		; mov r0,-(sp)
  1603                                  		; mov r0,0f
  1604 00000606 8B5604                  	mov	edx, [esi+4]	; Buffer offset
  1605                                  		; mov 4(r1),0f+2
  1606 00000609 09D2                    	or	edx, edx		   	
  1607 0000060B 740C                    	jz	short S34
  1608                                  		; beq 1f
  1609 0000060D 29CA                    	sub	edx, ecx	; Byte count
  1610                                  		; sub (sp),0f+2
  1611                                  	;movzx	ebx, word [esi] ; File descriptor (=1)
  1612                                  		; mov (r1),r0
  1613                                  	; 12/01/2022
  1614 0000060F 0FB61E                  	movzx	ebx, byte [esi] ; File descriptor (=1)
  1615                                  	;
  1616                                  	sys	_write ; sys _write, ebx, ecx, edx
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74                              <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76                              <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 00000612 B804000000          <1>  mov eax, %1
    83 00000617 CD30                <1>  int 30h
  1617                                  		; sys 0; 9f
  1618                                  ;.data
  1619                                  ;9:
  1620                                  ;		; sys write; 0:..; ..
  1621                                  ;.text
  1622                                  S34: ;1:
  1623                                  	;pop	ecx
  1624 00000619 894E04                  	mov	[esi+4], ecx ; Begin. of buf. data
  1625                                  		; mov (sp)+,4(r1)
  1626 0000061C 66C746020002            	mov	word [esi+2], 512 ; Buffer data size
  1627                                  		; mov $512.,2(r1)
  1628 00000622 C3                      	retn
  1629                                  		; rts	pc
  1630                                  
  1631                                  ; 'getw', 'getc' and 'fopen' procedures
  1632                                  ; are derived from 'get.s'
  1633                                  ; file of original UNIX v5
  1634                                  
  1635                                  ; open a file for use by get(c|w)
  1636                                  ;
  1637                                  fopen:
  1638                                  	; EBX = file name offset
  1639                                  	; EDI = buffer offset
  1640                                  	;
  1641 00000623 31C9                    	xor 	ecx, ecx ; 0 => open for read	
  1642                                  	sys 	_open ; sys _open, ebx, ecx (0)
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74                              <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76                              <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 00000625 B805000000          <1>  mov eax, %1
    83 0000062A CD30                <1>  int 30h
  1643 0000062C 7202                    	jc	short S35
  1644                                  	;stosw  ; file descriptor (in buffer offset 0)
  1645                                  	; 12/01/2022
  1646 0000062E AA                      	stosb	; file descriptor
  1647 0000062F C3                      	retn
  1648                                  S35:
  1649                                  	;mov	ax, 0FFFFh ; -1
  1650                                  	;stosw
  1651                                  	; 12/01/2022
  1652 00000630 B0FF                    	mov	al, 0FFh ; -1
  1653 00000632 AA                      	stosb
  1654                                  	;stc
  1655 00000633 C3                      	retn
  1656                                  
  1657                                  ; get words from input file
  1658                                  ;
  1659                                  getw:
  1660                                  	;mov 	esi, ebx
  1661 00000634 E80E000000              	call	getc
  1662 00000639 720B                    	jc	short S36
  1663                                  	
  1664                                  	; 12/01/2022
  1665                                  	;push	ax
  1666 0000063B 50                      	push	eax
  1667 0000063C E806000000              	call	getc	
  1668                                  	;;pop	dx
  1669                                  	;pop	edx
  1670                                  	;mov	ah, dl
  1671                                  	;xchg 	ah, al
  1672                                  	; 14/01/2022
  1673 00000641 88442401                	mov	[esp+1], al
  1674 00000645 58                      	pop	eax
  1675                                  S36:
  1676 00000646 C3                      	retn
  1677                                  
  1678                                  ; get characters from input file
  1679                                  ;
  1680                                  getc:
  1681                                  	; ESI = buffer address
  1682 00000647 668B4602                	mov	ax, [esi+2] ; char count
  1683 0000064B 6621C0                  	and	ax, ax
  1684 0000064E 751D                    	jnz	short gch1
  1685                                  gch0:
  1686                                  	;mov	ecx, esi
  1687                                  	;add	ecx, 8  ; read buffer address
  1688                                  	; 12/01/2022
  1689                                  	;lea	ecx, [esi+8]
  1690 00000650 29C9                    	sub	ecx, ecx
  1691 00000652 B108                    	mov	cl, 8
  1692 00000654 01F1                    	add	ecx, esi ; buffer data address
  1693                                  	;movzx	ebx, word [esi]
  1694                                  	; 12/01/2022
  1695 00000656 0FB61E                  	movzx	ebx, byte [esi]
  1696 00000659 894E04                  	mov 	[esi+4], ecx ; char offset
  1697                                  	;xor	ax, ax
  1698                                  	;mov	[esi+2], ax ; 0
  1699                                  	;mov 	edx, 512  
  1700                                  	; 12/01/2022
  1701 0000065C 31D2                    	xor	edx, edx
  1702 0000065E B602                    	mov	dh, 2 ; edx = 512
  1703                                  	sys	_read  ; sys _read, ebx, ecx, edx
    70                              <1> 
    71                              <1> 
    72                              <1> 
    73                              <1>  %if %0 >= 2
    74                              <1>  mov ebx, %2
    75                              <1>  %if %0 >= 3
    76                              <1>  mov ecx, %3
    77                              <1>  %if %0 = 4
    78                              <1>  mov edx, %4
    79                              <1>  %endif
    80                              <1>  %endif
    81                              <1>  %endif
    82 00000660 B803000000          <1>  mov eax, %1
    83 00000665 CD30                <1>  int 30h
  1704 00000667 7216                    	jc	short gch2
  1705 00000669 09C0                    	or	eax, eax
  1706 0000066B 7414                    	jz	short gch3
  1707                                  gch1:
  1708 0000066D 6648                    	dec	ax
  1709 0000066F 66894602                	mov	[esi+2], ax
  1710 00000673 8B5E04                  	mov	ebx, [esi+4]
  1711 00000676 31C0                    	xor	eax, eax ; 12/01/2022
  1712 00000678 8A03                    	mov	al, [ebx]
  1713 0000067A 43                      	inc	ebx
  1714 0000067B 895E04                  	mov	[esi+4], ebx
  1715                                  	;xor	ah, ah
  1716 0000067E C3                      	retn 	
  1717                                  gch2:
  1718                                  	;xor	ax, ax
  1719                                  	; 12/01/2022
  1720 0000067F 29C0                    	sub	eax, eax
  1721                                  gch3:
  1722 00000681 F9                      	stc
  1723 00000682 C3                      	retn
  1724                                  
  1725                                  ;/ getw/getc -- get words/characters from input file
  1726                                  ;/ fopen -- open a file for use by get(c|w)
  1727                                  ;/
  1728                                  ;/ calling sequences --
  1729                                  ;/
  1730                                  ;/   mov $filename,r0
  1731                                  ;/   jsr r5,fopen; ioptr
  1732                                  ;/
  1733                                  ;/  on return ioptr buffer is set up or error bit is set if
  1734                                  ;/  file could not be opened.
  1735                                  ;/
  1736                                  ;/   jsr r5,get(c|w)1; ioptr
  1737                                  ;/
  1738                                  ;/  on return char/word is in r0; error bit is
  1739                                  ;/  set on error or end of file.
  1740                                  ;/
  1741                                  ;/  ioptr is the address of a 518-byte buffer
  1742                                  ;/  whose layout is as follows:
  1743                                  ;/
  1744                                  ;/  ioptr: .=.+2    / file descriptor
  1745                                  ;	   .=.+2  /// buffer size (This is noted by Erdogan Tan; 19/11/2013)	
  1746                                  ;/         .=.+2    / charact+2  / pointer to next character (reset if no. chars=0)
  1747                                  ;/         .=.+512. / the buffer
  1748                                  
  1749                                  ;	.globl	getc,getw,fopen
  1750                                  
  1751                                  ;fopen:
  1752                                  ;	mov	r1,-(sp)
  1753                                  ;	mov	(r5)+,r1
  1754                                  ;	mov	r0,0f
  1755                                  ;	sys	0; 9f
  1756                                  ;.data
  1757                                  ;9:
  1758                                  ;	sys	open; 0:..; 0
  1759                                  ;.text
  1760                                  ;	bes	1f
  1761                                  ;	mov	r0,(r1)+
  1762                                  ;	clr	(r1)+
  1763                                  ;	mov	(sp)+,r1
  1764                                  ;	rts	r5
  1765                                  ;1:
  1766                                  ;	mov	$-1,(r1)
  1767                                  ;	mov	(sp)+,r1
  1768                                  ;	sec
  1769                                  ;	rts	r5
  1770                                  ;
  1771                                  ;.data
  1772                                  ;getw:
  1773                                  ;	mov	(r5),9f
  1774                                  ;	mov	(r5)+,8f
  1775                                  ;	jsr	r5,getc; 8:..
  1776                                  ;	bec	1f
  1777                                  ;	rts	r5
  1778                                  ;1:
  1779                                  ;	mov	r0,-(sp)
  1780                                  ;	jsr	r5,getc; 9:..
  1781                                  ;	swab	r0
  1782                                  ;	bis	(sp)+,r0
  1783                                  ;	rts	r5
  1784                                  ;.text
  1785                                  ;
  1786                                  ;getc:
  1787                                  ;	mov	r1,-(sp)
  1788                                  ;	mov	(r5)+,r1
  1789                                  ;	dec	2(r1)
  1790                                  ;	bge	1f
  1791                                  ;	mov	r1,r0
  1792                                  ;	add	$6,r0
  1793                                  ;	mov	r0,0f
  1794                                  ;	mov	r0,4(r1)
  1795                                  ;	mov	(r1),r0
  1796                                  ;	sys	0; 9f
  1797                                  ;.data
  1798                                  ;9:
  1799                                  ;	sys	read; 0:..; 512.
  1800                                  ;.text
  1801                                  ;	bes	2f
  1802                                  ;	tst	r0
  1803                                  ;	bne	3f
  1804                                  ;2:
  1805                                  ;	mov	(sp)+,r1
  1806                                  ;	sec
  1807                                  ;	rts	r5
  1808                                  ;3:
  1809                                  ;	dec	r0
  1810                                  ;	mov	r0,2(r1)
  1811                                  ;1:
  1812                                  ;	clr	r0
  1813                                  ;	bisb	*4(r1),r0
  1814                                  ;	inc	4(r1)
  1815                                  ;	mov	(sp)+,r1
  1816                                  ;	rts	r5
  1817                                  
  1818                                  ;%include 'ctime386.inc' ; 24/11/2013
  1819                                  %include 'ctime386.s' ; 12/01/2022
  1820                              <1> ; ****************************************************************************
  1821                              <1> ; ctime386.inc (Retro Unix 386 v1 - /bin/ls - list file or directory)
  1822                              <1> ; ----------------------------------------------------------------------------
  1823                              <1> ; RETRO UNIX 386 (Retro Unix == Turkish Rational Unix)
  1824                              <1> ; Operating System Project (v0.2) by ERDOGAN TAN (Beginning: 24/12/2013)
  1825                              <1> ;
  1826                              <1> ; [ Last Modification: 06/10/2015 ]
  1827                              <1> ;
  1828                              <1> ; Derived from 'CTIME.INC' source code file of 'Retro UNIX 8086 v1'
  1829                              <1> ; operating system project, /bin/ls source code by Erdogan Tan
  1830                              <1> ; (28/11/2013)
  1831                              <1> ;
  1832                              <1> ; Derived from 'ctime.c' file of original UNIX v5 (usr/source/s3/ctime.c)
  1833                              <1> ;
  1834                              <1> ; ls386.s (ls0.s) 23/09/2015 - 06/10/2015
  1835                              <1> ; include ctime386.inc
  1836                              <1> ;
  1837                              <1> ; ****************************************************************************
  1838                              <1> 
  1839                              <1> ; Assembler: NASM 2.11
  1840                              <1> 
  1841                              <1> ;timezone equ 5*60*60
  1842                              <1> 
  1843                              <1> 
  1844                              <1> ctime:  ; ctime(at)
  1845                              <1> 	; int *at;
  1846                              <1> 	; {
  1847                              <1> 	; 	return(asctime(localtime(at)));
  1848                              <1> 	; }
  1849                              <1> 
  1850                              <1> 	; EAX = unix epoch time (in seconds)
  1851                              <1> 
  1852                              <1> 	;call localtime
  1853                              <1> 	;call asctime
  1854                              <1> 
  1855                              <1> 	;retn
  1856                              <1>   
  1857                              <1> localtime:
  1858                              <1> 	; localtime(tim)
  1859                              <1> 	; int tim[];
  1860                              <1> 	; 	{
  1861                              <1> 	;		register int *t, *ct, dayno;
  1862                              <1> 	;	int daylbegin, daylend;
  1863                              <1> 	;	int copyt[2];
  1864                              <1> 	;	t = copyt;
  1865                              <1> 	;	t[0] = tim[0];
  1866                              <1> 	;	t[1] = tim[1];
  1867                              <1> 	;	dpadd(t, -timezone);
  1868                              <1> 	;	ct = gmtime(t);
  1869                              <1> 	;	dayno = ct[YDAY];
  1870                              <1> 	;	if (nixonflg && (ct[YEAR]>74 || ct[YEAR]==74 && (dayno > 5 ||
  1871                              <1> 	;	    dayno==5 && ct[HOUR]>=2))) {
  1872                              <1> 	;		daylight =| 1;
  1873                              <1> 	;		daylbegin = -1;
  1874                              <1> 	;		daylend = 367;
  1875                              <1> 	;	} else {
  1876                              <1> 	;		daylbegin = sunday(ct, 119);	/* last Sun in Apr */
  1877                              <1> 	;		daylend = sunday(ct, 303);	/* last Sun in Oct */
  1878                              <1> 	;	}
  1879                              <1> 	;	if (daylight &&
  1880                              <1> 	;	    (dayno>daylbegin || (dayno==daylbegin && ct[HOUR]>=2)) &&
  1881                              <1> 	;	    (dayno<daylend || (dayno==daylend && ct[HOUR]<1))) {
  1882                              <1> 	;		dpadd(t, 1*60*60);
  1883                              <1> 	;		ct = gmtime(t);
  1884                              <1> 	;		ct[ISDAY]++;
  1885                              <1> 	;	}
  1886                              <1> 	;	return(ct);
  1887                              <1> 	;	}
  1888                              <1> 
  1889                              <1> 	;sub	eax, timezone	
  1890                              <1> 
  1891                              <1> 	;push	eax
  1892                              <1> 
  1893 00000683 E885000000          <1> 	call 	gmtime
  1894                              <1> ; if (nixonflg && (ct[YEAR]>74 || ct[YEAR]==74 && (dayno > 5 ||
  1895                              <1> ;     dayno==5 && ct[HOUR]>=2))) {
  1896                              <1> 	;cmp	byte [nixonflg], 0
  1897                              <1> 	;jna	short lt1
  1898                              <1> 	;cmp	word [year], 1974
  1899                              <1> 	;jb	short lt1
  1900                              <1> 	;ja	short lt0
  1901                              <1> 	;cmp	word [yday], 5
  1902                              <1> 	;jb	short lt1
  1903                              <1> 	;ja	short lt0 
  1904                              <1> 	;cmp	word [hour], 2
  1905                              <1> 	;jb	short lt1
  1906                              <1> ; nixonflag > 0
  1907                              <1> ;lt0:
  1908                              <1> 	;mov	word [daylight], 1
  1909                              <1> 	;mov	word [daylbegin], -1
  1910                              <1> 	;mov	word [daylend], 367
  1911                              <1> ;	;jmp	short lt2
  1912                              <1> 
  1913                              <1> ; } else {
  1914                              <1> ;lt1:
  1915                              <1> ;	mov	cx, 119
  1916                              <1> ;	call	sunday ; sunday(ct, 119); /* last Sun in Apr */
  1917                              <1> ;	mov	[daylbegin], cx
  1918                              <1> ;	mov	cx, 303
  1919                              <1> ;	call	sunday ; sunday(ct, 303); /* last Sun in Oct */	
  1920                              <1> ;	mov	[daylend], cx
  1921                              <1> ;lt2:
  1922                              <1> ; if (daylight &&
  1923                              <1> ;    (dayno>daylbegin || (dayno==daylbegin && ct[HOUR]>=2)) &&
  1924                              <1> ;    (dayno<daylend || (dayno==daylend && ct[HOUR]<1))) {
  1925                              <1> 
  1926                              <1> ;	pop	eax
  1927                              <1> 
  1928                              <1> 	;cmp	byte [daylight], 0
  1929                              <1> 	;jna	short lt5
  1930                              <1> 	
  1931                              <1> 	;mov	cx, [yday]
  1932                              <1> 
  1933                              <1> 	;cmp	cx, [daylbegin]
  1934                              <1> 	;jb	short lt5
  1935                              <1> 	;ja	short lt3
  1936                              <1> 	;cmp	word [hour], 2
  1937                              <1> 	;jb	short lt5
  1938                              <1> 	;jmp	short lt4
  1939                              <1> ;lt3:
  1940                              <1> 	;cmp	cx, [daylend]
  1941                              <1> 	;jb	short lt4
  1942                              <1> 	;ja	short lt5
  1943                              <1> 	;cmp	word [hour], 1
  1944                              <1> 	;jnb	short lt5
  1945                              <1> ;lt4:
  1946                              <1> 	;add	eax, 1*60*60
  1947                              <1> 	;call	gmtime
  1948                              <1> 	;inc	word [isday]
  1949                              <1> ;lt5:
  1950                              <1> ;	}
  1951                              <1> ;	return(ct);
  1952                              <1> ;	}
  1953                              <1> 
  1954                              <1> 	;retn
  1955                              <1> 
  1956                              <1> 
  1957                              <1> asctime:
  1958                              <1> 	; asctime(t)
  1959                              <1> 	;int *t;
  1960                              <1> 	;{
  1961                              <1> 	;	register char *cp, *ncp;
  1962                              <1> 	;	register int *tp;
  1963                              <1> 	;
  1964                              <1> 	;	cp = cbuf;
  1965                              <1> 	;	for (ncp = "Day Mon 00 00:00:00 1900\n"; *cp++ = *ncp++;);
  1966                              <1> 	;	ncp = &"SunMonTueWedThuFriSat"[3*t[6]];
  1967                              <1> 	;	cp = cbuf;
  1968                              <1> 	;	*cp++ = *ncp++;
  1969                              <1> 	;	*cp++ = *ncp++;
  1970                              <1> 	;	*cp++ = *ncp++;
  1971                              <1> 	;	cp++;
  1972                              <1> 	;	tp = &t[4];
  1973                              <1> 	;	ncp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[(*tp)*3];
  1974                              <1> 	;	*cp++ = *ncp++;
  1975                              <1> 	;	*cp++ = *ncp++;
  1976                              <1> 	;	*cp++ = *ncp++;
  1977                              <1> 	;	cp = numb(cp, *--tp);
  1978                              <1> 	;	cp = numb(cp, *--tp+100);
  1979                              <1> 	;	cp = numb(cp, *--tp+100);
  1980                              <1> 	;	cp = numb(cp, *--tp+100);
  1981                              <1> 	;	cp =+ 2;
  1982                              <1> 	;	cp = numb(cp, t[YEAR]);
  1983                              <1> 	;	return(cbuf);
  1984                              <1> 	;}
  1985                              <1> 	
  1986                              <1> 	;;mov	edi, cbuf
  1987                              <1> 	;;mov	esi, ncp0
  1988                              <1> 	;;mov	ecx, 13
  1989                              <1> 	;;movsw	
  1990                              <1> 	;
  1991 00000688 BF[68080000]        <1> 	mov	edi, cbuf	
  1992                              <1> 	;movzx	esi, word [wday]
  1993                              <1> 	;shl	si, 2
  1994                              <1> 	;add	esi, ncp1
  1995                              <1> 	;movsd
  1996 0000068D 0FB735[FE070000]    <1> 	movzx	esi, word [month]
  1997 00000694 66C1E602            <1> 	shl	si, 2
  1998 00000698 81C6[34080000]      <1> 	add	esi, ncp2 - 4
  1999 0000069E A5                  <1> 	movsd
  2000                              <1> 	;movzx eax, word [day]
  2001 0000069F 66A1[FC070000]      <1> 	mov	ax, [day]
  2002                              <1> 	;mov	cx, 10
  2003 000006A5 B10A                <1> 	mov	cl, 10
  2004 000006A7 E831010000          <1> 	call	numb
  2005 000006AC B020                <1>  	mov	al, 20h
  2006 000006AE AA                  <1> 	stosb
  2007                              <1> 	;
  2008 000006AF 66A1[00080000]      <1> 	mov	ax, [year]
  2009 000006B5 B564                <1> 	mov	ch, 100
  2010 000006B7 F6F5                <1> 	div	ch
  2011 000006B9 6650                <1> 	push	ax ;
  2012 000006BB 6698                <1> 	cbw ; century (19, 20)
  2013 000006BD E81B010000          <1> 	call	numb
  2014 000006C2 6658                <1> 	pop	ax
  2015 000006C4 88E0                <1> 	mov	al, ah
  2016 000006C6 6698                <1> 	cbw ;	year (0 to 99)
  2017 000006C8 E810010000          <1> 	call	numb
  2018 000006CD B020                <1> 	mov 	al, 20h
  2019 000006CF AA                  <1> 	stosb
  2020                              <1> 	;
  2021 000006D0 0FB735[02080000]    <1>         movzx   esi, word [wday]
  2022 000006D7 66C1E602            <1> 	shl	si, 2
  2023 000006DB 81C6[1C080000]      <1> 	add	esi, ncp1
  2024 000006E1 A5                  <1> 	movsd
  2025                              <1> 	;
  2026 000006E2 66A1[FA070000]      <1> 	mov	ax, [hour]
  2027 000006E8 E8F0000000          <1> 	call	numb
  2028 000006ED B03A                <1>  	mov	al, ':'
  2029 000006EF AA                  <1> 	stosb
  2030 000006F0 66A1[F8070000]      <1> 	mov	ax, [minute]
  2031 000006F6 E8E2000000          <1> 	call	numb
  2032 000006FB B03A                <1>  	mov	al, ':'
  2033 000006FD AA                  <1> 	stosb
  2034 000006FE 66A1[F6070000]      <1> 	mov	ax, [second]
  2035 00000704 E8D4000000          <1> 	call	numb
  2036 00000709 B020                <1>  	mov	al, 20h
  2037 0000070B AA                  <1> 	stosb
  2038                              <1> 	;mov	ax, [year]
  2039                              <1> 	;mov	ch, 100
  2040                              <1> 	;div	ch
  2041                              <1> 	;push	ax ;
  2042                              <1> 	;cbw ; century (19, 20)
  2043                              <1> 	;call	numb
  2044                              <1> 	;pop	ax
  2045                              <1> 	;mov	al, ah
  2046                              <1> 	;cbw ;	year (0 to 99)
  2047                              <1> 	;call	numb
  2048                              <1> 	;mov	al, 20h
  2049                              <1> 	;stosb
  2050                              <1> 	;xor	al, al
  2051                              <1> 	;stosb
  2052                              <1> 
  2053 0000070C C3                  <1> 	retn
  2054                              <1> 
  2055                              <1> gmtime:
  2056                              <1> 	; 24/11/2013 (yday, wday)
  2057                              <1> 	; Retro UNIX 8086 v1 - UNIX.ASM (20/06/2013)
  2058                              <1> 	; Retro UNIX 8086 v1 feature/procedure only!
  2059                              <1> 	; 'convert_from_epoch' procedure prototype: 
  2060                              <1> 	; 	            UNIXCOPY.ASM, 10/03/2013
  2061                              <1> 	; 30/11/2012
  2062                              <1> 	; Derived from DALLAS Semiconductor
  2063                              <1> 	; Application Note 31 (DS1602/DS1603)
  2064                              <1> 	; 6 May 1998
  2065                              <1> 	;
  2066                              <1> 	; INPUT:
  2067                              <1> 	; DX:AX = Unix (Epoch) Time
  2068                              <1> 	;
  2069                              <1> 	; ((Modified registers: AX, DX, CX, BX))  
  2070                              <1> 	;
  2071 0000070D 31D2                <1> 	xor edx, edx
  2072 0000070F B93C000000          <1> 	mov ecx, 60
  2073 00000714 F7F1                <1> 	div ecx
  2074                              <1> 	;mov [imin], eax     	  ; whole minutes
  2075                              <1> 				  ; since 1/1/1970
  2076 00000716 668915[F6070000]    <1> 	mov [second], dx  	  ; leftover seconds
  2077                              <1> 	; mov ecx, 60
  2078 0000071D 29D2                <1> 	sub edx, edx
  2079 0000071F F7F1                <1> 	div ecx
  2080                              <1> 	;mov [ihrs], eax   	  ; whole hours
  2081                              <1> 				  ; since 1/1/1970
  2082 00000721 668915[F8070000]    <1> 	mov [minute], dx  	  ; leftover minutes
  2083                              <1> 	;mov ecx, 24
  2084 00000728 31D2                <1> 	xor edx, edx
  2085 0000072A B118                <1> 	mov cl, 24
  2086 0000072C F7F1                <1> 	div ecx
  2087                              <1> 	;mov [iday], ax  	  ; whole days
  2088                              <1> 				  ; since 1/1/1970
  2089 0000072E 66A3[02080000]      <1> 	mov [wday], ax 		  ; 24/11/2013	
  2090 00000734 668915[FA070000]    <1> 	mov [hour], dx   	  ; leftover hours
  2091 0000073B 05DB020000          <1> 	add eax, 365+366	  ; whole day since
  2092                              <1> 				  ; 1/1/1968 	
  2093                              <1> 	;mov [iday], ax
  2094 00000740 50                  <1> 	push eax
  2095 00000741 66B9B505            <1> 	mov cx, (4*365)+1	  ; 4 years = 1461 days
  2096 00000745 29D2                <1> 	sub edx, edx
  2097 00000747 F7F1                <1> 	div ecx
  2098 00000749 59                  <1> 	pop ecx
  2099                              <1> 	;mov [lday], ax  	  ; count of quadyrs (4 years)
  2100 0000074A 52                  <1> 	push edx
  2101                              <1> 	;mov [qday], dx           ; days since quadyr began
  2102 0000074B 6683FA3C            <1> 	cmp dx, 31 + 29           ; if past feb 29 then
  2103 0000074F F5                  <1> 	cmc			  ; add this quadyr's leap day
  2104 00000750 83D000              <1> 	adc eax, 0		  ; to # of qadyrs (leap days)
  2105                              <1> 	;mov [lday], ax  	  ; since 1968			  
  2106                              <1> 	;mov cx, [iday]
  2107 00000753 91                  <1> 	xchg ecx, eax		  ; CX = lday, AX = iday		  
  2108 00000754 29C8                <1> 	sub eax, ecx		  ; iday - lday
  2109                              <1> 	;mov ecx, 365
  2110 00000756 66B96D01            <1> 	mov cx, 365
  2111 0000075A 31D2                <1> 	xor edx, edx		  ; DX  = 0
  2112                              <1> 	; EAX = iday-lday
  2113 0000075C F7F1                <1> 	div ecx
  2114                              <1> 	;mov [iyrs], ax		  ; whole years since 1968
  2115                              <1> 	; jday = iday - (iyrs*365) - lday
  2116                              <1> 	;mov [jday], dx  	  ; days since 1/1 of current year
  2117                              <1> 	;add eax, 1968		  ; compute year
  2118 0000075E 05B0070000          <1> 	add eax, 1968
  2119 00000763 66A3[00080000]      <1> 	mov [year], ax
  2120 00000769 89C3                <1> 	mov ebx, eax		
  2121                              <1> 	;mov ax, [qday]
  2122 0000076B 58                  <1> 	pop eax
  2123 0000076C 663D6D01            <1> 	cmp ax, 365		  ; if qday <= 365 and qday >= 60	
  2124 00000770 7709                <1> 	ja short L1		  ; jday = jday +1
  2125 00000772 6683F83C            <1> 	cmp ax, 60	          ; if past 2/29 and leap year then
  2126 00000776 F5                  <1>         cmc			  ; add a leap day to the # of whole
  2127 00000777 6683D200            <1> 	adc dx, 0		  ; days since 1/1 of current year
  2128                              <1> L1:			
  2129                              <1> 	;mov [jday], dx
  2130                              <1> 	;mov [yday], dx 	  ; 24/11/2013	
  2131 0000077B 66B90C00            <1> 	mov cx, 12		  ; estimate month
  2132 0000077F 6687CA              <1> 	xchg cx, dx		  ; CX = jday, DX = month 	
  2133 00000782 66B86E01            <1> 	mov ax, 366		  ; mday, max. days since 1/1 is 365
  2134 00000786 6683E303            <1> 	and bx, 11b		  ; year mod 4	(and bx, 3) 
  2135                              <1> L2:	; Month calculation	  ; 0 to 11  (11 to 0)	
  2136 0000078A 6639C1              <1> 	cmp cx, ax		  ; mday = # of days passed from 1/1
  2137 0000078D 731D                <1> 	jnb short L3
  2138 0000078F 664A                <1> 	dec dx			  ; month = month - 1
  2139 00000791 66D1E2              <1> 	shl dx, 1 
  2140 00000794 668B82[04080000]    <1> 	mov ax, [edx+DMonth] 	  ; # elapsed days at 1st of month
  2141 0000079B 66D1EA              <1> 	shr dx, 1		  ; dx = month - 1 (0 to 11)
  2142 0000079E 6683FA01            <1> 	cmp dx, 1		  ; if month > 2 and year mod 4  = 0	
  2143 000007A2 76E6                <1> 	jna short L2		  ; then mday = mday + 1
  2144 000007A4 08DB                <1> 	or bl, bl		  ; if past 2/29 and leap year then
  2145 000007A6 75E2                <1> 	jnz short L2		  ; add leap day (to mday)
  2146 000007A8 6640                <1> 	inc ax			  ; mday = mday + 1
  2147 000007AA EBDE                <1> 	jmp short L2
  2148                              <1> L3:
  2149 000007AC 6642                <1> 	inc dx 			  ; -> dx = month, 1 to 12
  2150 000007AE 668915[FE070000]    <1> 	mov [month], dx
  2151 000007B5 6629C1              <1> 	sub cx, ax		  ; day = jday - mday + 1	
  2152 000007B8 6641                <1> 	inc cx 			  
  2153 000007BA 66890D[FC070000]    <1> 	mov [day], cx
  2154                              <1> 	
  2155                              <1> 	; eax, ebx, ecx, edx are changed at return
  2156                              <1> 	; output ->
  2157                              <1> 	; [year], [month], [day], [hour], [minute], [second]
  2158                              <1> 	; [yday] -> 24/11/2013
  2159                              <1> 	; [wday] -> 24/11/2013
  2160                              <1> 	;
  2161                              <1> 	; 24/11/2013
  2162 000007C1 66A1[02080000]      <1> 	mov	ax, [wday] ; [iday]
  2163 000007C7 6631D2              <1> 	xor	dx, dx
  2164 000007CA 6683C004            <1> 	add	ax, 4
  2165                              <1> 	; NOTE: January 1, 1970 was THURSDAY
  2166                              <1> 	; ch = 0
  2167 000007CE B107                <1> 	mov	cl, 7
  2168 000007D0 66F7F1              <1> 	div	cx
  2169 000007D3 668915[02080000]    <1> 	mov	[wday], dx ; week of the day,  0 to 6 
  2170                              <1> 	; 0 = sunday ... 6 = saturday
  2171                              <1> 	;mov	word [isday], 0
  2172                              <1> 
  2173 000007DA C3                  <1> 	retn
  2174                              <1> 
  2175                              <1> 
  2176                              <1> ;sunday:
  2177                              <1> 	; sunday(at, ad)
  2178                              <1> 	; 	int *at;
  2179                              <1> 	;	 {
  2180                              <1> 	; 	register int *t, d;
  2181                              <1> 	; 	t = at;
  2182                              <1> 	; 	d = ad;
  2183                              <1> 	; 	d = ad + dysize(t[YEAR]) - 365;
  2184                              <1> 	; 	return(d - (d - t[YDAY] + t[WDAY] + 700) % 7);
  2185                              <1> 	; 	}
  2186                              <1> 
  2187                              <1> 	;mov	dx, [year]
  2188                              <1> 	;call	dysize
  2189                              <1> 	;sub	ax, 365
  2190                              <1> 	; add 	cx, ax
  2191                              <1> ;	test	word [year], 11b
  2192                              <1> ;	jnz	short sunday1
  2193                              <1> 	; CX = 119 (77h) or CX = 303 (12Fh)
  2194                              <1> 	;inc	cx
  2195                              <1> ;	inc	cl
  2196                              <1> ;sunday1:
  2197                              <1> ;	mov	ax, cx
  2198                              <1> ;	add	ax, [wday]
  2199                              <1> 	;adc	ax, 700
  2200                              <1> ;	add	ax, 700
  2201                              <1> ;	sub	ax, [yday]
  2202                              <1> 	;xor	dx, dx
  2203                              <1> ;	mov	bx, 7
  2204                              <1> 	;div	bx
  2205                              <1> ;	div	bl
  2206                              <1> ;	sub	cx, bx
  2207                              <1> ;	retn
  2208                              <1> 
  2209                              <1> ;dysize:
  2210                              <1> ; dysize(y)
  2211                              <1> ;	{
  2212                              <1> ;	if((y%4) == 0)
  2213                              <1> ;		return(366);
  2214                              <1> ;	return(365);
  2215                              <1> ;	}
  2216                              <1> 
  2217                              <1> ;	mov 	ax, 365	
  2218                              <1> ;	test 	dx, 11b
  2219                              <1> ;	jnz 	short dysize1
  2220                              <1> ;	;inc 	ax
  2221 000007DB FEC0                <1> 	inc 	al			
  2222                              <1> ;dysize1:	
  2223                              <1> ;	retn 
  2224                              <1> 		
  2225                              <1> 
  2226                              <1> numb:   ; AX = 0 to 99
  2227                              <1> 	;
  2228                              <1> 	; numb(acp, n)
  2229                              <1> 	; {
  2230                              <1> 	;	register char *cp;
  2231                              <1> 	;
  2232                              <1> 	;	cp = acp;
  2233                              <1> 	;	cp++;
  2234                              <1> 	;	if (n>=10)
  2235                              <1> 	;	   *cp++ = (n/10)%10 + '0';
  2236                              <1> 	;	else
  2237                              <1> 	;	   *cp++ = ' ';
  2238                              <1> 	;	*cp++ = n%10 + '0';
  2239                              <1> 	;	return(cp);
  2240                              <1> 	; }
  2241                              <1> 	;
  2242                              <1> 	;mov	cl, 10
  2243 000007DD 6683F80A            <1> 	cmp 	ax, 10
  2244 000007E1 7306                <1> 	jnb	short nb1
  2245 000007E3 88C4                <1> 	mov	ah, al
  2246 000007E5 30C0                <1> 	xor	al, al ; 0
  2247 000007E7 EB04                <1> 	jmp	short nb2
  2248                              <1> nb1:	
  2249 000007E9 F6F1                <1> 	div	cl
  2250 000007EB 88E2                <1> 	mov	dl, ah
  2251                              <1> 	
  2252                              <1> nb2:	
  2253 000007ED 0430                <1> 	add	al, '0'
  2254 000007EF AA                  <1> 	stosb	; digit 1
  2255 000007F0 88E0                <1> 	mov	al, ah
  2256 000007F2 0430                <1> 	add	al, '0'
  2257 000007F4 AA                  <1> 	stosb	; digit 2
  2258 000007F5 C3                  <1> 	retn
  2259                              <1> 
  2260                              <1> 
  2261                              <1> ;;; DATA
  2262                              <1> 
  2263                              <1> ;daylight: db 1 ; int daylight 1; /* Allow daylight conversion */
  2264                              <1> ;nixonflg: db 0 ; int nixonflg 0; /* Daylight time all year around */
  2265                              <1> ;daylbegin: dw 0
  2266                              <1> ;daylend: dw 0
  2267                              <1> 
  2268                              <1> 
  2269                              <1> ct:
  2270                              <1> ; 24/11/2013 (re-order)
  2271                              <1> ;
  2272                              <1> ; Retro UNIX 8086 v1 - UNIX.ASM
  2273                              <1> ; 09/04/2013 epoch variables
  2274                              <1> ; Retro UNIX 8086 v1 Prototype: UNIXCOPY.ASM, 10/03/2013
  2275                              <1> ;
  2276                              <1> 
  2277 000007F6 0000                <1> second: dw 0
  2278 000007F8 0000                <1> minute: dw 0
  2279 000007FA 0000                <1> hour: dw 0
  2280 000007FC 0100                <1> day: dw 1
  2281 000007FE 0100                <1> month: dw 1
  2282 00000800 B207                <1> year: dw 1970
  2283 00000802 0000                <1> wday: dw 0 ; 24/11/2013
  2284                              <1> ;yday: dw 0 ; 24/11/2013
  2285                              <1> ;isday: dw 0 ; 24/11/2013
  2286                              <1> 
  2287                              <1> DMonth:
  2288 00000804 0000                <1> dw 0
  2289 00000806 1F00                <1> dw 31
  2290 00000808 3B00                <1> dw 59
  2291 0000080A 5A00                <1> dw 90
  2292 0000080C 7800                <1> dw 120
  2293 0000080E 9700                <1> dw 151
  2294 00000810 B500                <1> dw 181
  2295 00000812 D400                <1> dw 212
  2296 00000814 F300                <1> dw 243
  2297 00000816 1101                <1> dw 273
  2298 00000818 3001                <1> dw 304
  2299 0000081A 4E01                <1> dw 334
  2300                              <1> 
  2301                              <1> ;ncp0: db "Day Mon 00 00:00:00 1970", 0, 0
  2302 0000081C 53756E204D6F6E2054- <1> ncp1: db "Sun Mon Tue Wed Thu Fri Sat "
  2302 00000825 756520576564205468- <1>
  2302 0000082E 752046726920536174- <1>
  2302 00000837 20                  <1>
  2303 00000838 4A616E20466562204D- <1> ncp2: db "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec "
  2303 00000841 617220417072204D61- <1>
  2303 0000084A 79204A756E204A756C- <1>
  2303 00000853 204175672053657020- <1>
  2303 0000085C 4F6374204E6F762044- <1>
  2303 00000865 656320              <1>
  2304                              <1> 
  2305                              <1> cbuf: 	; char cbuf[26]
  2306 00000868 00<rep 1Ah>         <1> 	times 26 db 0
  2307                              <1> 
  2308                              <1> 
  2309                              <1> ;; ctime.c (Unix v5)
  2310                              <1> ;
  2311                              <1> ;#
  2312                              <1> ;/*
  2313                              <1> ; * This routine converts time as follows.
  2314                              <1> ; * The epoch is 0000 Jan 1 1970 GMT.
  2315                              <1> ; * The argument time is in seconds since then.
  2316                              <1> ; * The localtime(t) entry returns a pointer to an array
  2317                              <1> ; * containing
  2318                              <1> ; *  seconds (0-59)
  2319                              <1> ; *  minutes (0-59)
  2320                              <1> ; *  hours (0-23)
  2321                              <1> ; *  day of month (1-31)
  2322                              <1> ; *  month (0-11)
  2323                              <1> ; *  year-1970
  2324                              <1> ; *  weekday (0-6, Sun is 0)
  2325                              <1> ; *  day of the year
  2326                              <1> ; *  daylight savings flag
  2327                              <1> ; *
  2328                              <1> ; * The routine corrects for daylight saving
  2329                              <1> ; * time and will work in any time zone provided
  2330                              <1> ; * "timezone" is adjusted to the difference between
  2331                              <1> ; * Greenwich and local standard time (measured in seconds).
  2332                              <1> ; * In places like Michigan "daylight" must
  2333                              <1> ; * be initialized to 0 to prevent the conversion
  2334                              <1> ; * to daylight time.
  2335                              <1> ; *
  2336                              <1> ; * "nixonflg,", if set to 1, will
  2337                              <1> ; * cause daylight savings time all year around
  2338                              <1> ; * independently of "daylight".
  2339                              <1> ; *
  2340                              <1> ; * The routine does not work
  2341                              <1> ; * in Saudi Arabia which runs on Solar time.
  2342                              <1> ; *
  2343                              <1> ; * asctime(tvec))
  2344                              <1> ; * where tvec is produced by localtime
  2345                              <1> ; * returns a ptr to a character string
  2346                              <1> ; * that has the ascii time in the form
  2347                              <1> ; *	Thu Jan 01 00:00:00 1970n0\; *	01234567890123456789012345
  2349                              <1> ; *	0	  1	    2
  2350                              <1> ; *
  2351                              <1> ; * ctime(t) just calls localtime, then asctime.
  2352                              <1> ; */
  2353                              <1> ;char	cbuf[26];
  2354                              <1> ;int	dmsize[12]
  2355                              <1> ;{
  2356                              <1> ;	31,
  2357                              <1> ;	28,
  2358                              <1> ;	31,
  2359                              <1> ;	30,
  2360                              <1> ;	31,
  2361                              <1> ;	30,
  2362                              <1> ;	31,
  2363                              <1> ;	31,
  2364                              <1> ;	30,
  2365                              <1> ;	31,
  2366                              <1> ;	30,
  2367                              <1> ;	31
  2368                              <1> ;};
  2369                              <1> ;
  2370                              <1> ;int timezone	5*60*60;
  2371                              <1> ;int tzname[]
  2372                              <1> ;{
  2373                              <1> ;	"EST",
  2374                              <1> ;	"EDT",
  2375                              <1> ;};
  2376                              <1> ;int	daylight 1;	/* Allow daylight conversion */
  2377                              <1> ;int	nixonflg 0;	/* Daylight time all year around */
  2378                              <1> ;
  2379                              <1> ;#define SEC	0
  2380                              <1> ;#define MIN	1
  2381                              <1> ;#define HOUR	2
  2382                              <1> ;#define MDAY	3 
  2383                              <1> ;#define MON	4
  2384                              <1> ;#define YEAR	5
  2385                              <1> ;#define WDAY	6
  2386                              <1> ;#define YDAY	7
  2387                              <1> ;#define ISDAY	8
  2388                              <1> ;
  2389                              <1> ;ctime(at)
  2390                              <1> ;int *at;
  2391                              <1> ;{
  2392                              <1> ;	return(asctime(localtime(at)));
  2393                              <1> ;}
  2394                              <1> ;
  2395                              <1> ;localtime(tim)
  2396                              <1> ;int tim[];
  2397                              <1> ;{
  2398                              <1> ;	register int *t, *ct, dayno;
  2399                              <1> ;	int daylbegin, daylend;
  2400                              <1> ;	int copyt[2];
  2401                              <1> ;
  2402                              <1> ;	t = copyt;
  2403                              <1> ;	t[0] = tim[0];
  2404                              <1> ;	t[1] = tim[1];
  2405                              <1> ;	dpadd(t, -timezone);
  2406                              <1> ;	ct = gmtime(t);
  2407                              <1> ;	dayno = ct[YDAY];
  2408                              <1> ;	if (nixonflg && (ct[YEAR]>74 || ct[YEAR]==74 && (dayno > 5 ||
  2409                              <1> ;	    dayno==5 && ct[HOUR]>=2))) {
  2410                              <1> ;		daylight =| 1;
  2411                              <1> ;		daylbegin = -1;
  2412                              <1> ;		daylend = 367;
  2413                              <1> ;	} else {
  2414                              <1> ;		daylbegin = sunday(ct, 119);	/* last Sun in Apr */
  2415                              <1> ;		daylend = sunday(ct, 303);	/* last Sun in Oct */
  2416                              <1> ;	}
  2417                              <1> ;	if (daylight &&
  2418                              <1> ;	    (dayno>daylbegin || (dayno==daylbegin && ct[HOUR]>=2)) &&
  2419                              <1> ;	    (dayno<daylend || (dayno==daylend && ct[HOUR]<1))) {
  2420                              <1> ;		dpadd(t, 1*60*60);
  2421                              <1> ;		ct = gmtime(t);
  2422                              <1> ;		ct[ISDAY]++;
  2423                              <1> ;	}
  2424                              <1> ;	return(ct);
  2425                              <1> ;}
  2426                              <1> ;
  2427                              <1> ;sunday(at, ad)
  2428                              <1> ;int *at;
  2429                              <1> ;{
  2430                              <1> ;	register int *t, d;
  2431                              <1> ;
  2432                              <1> ;	t = at;
  2433                              <1> ;	d = ad;
  2434                              <1> ;	d = ad + dysize(t[YEAR]) - 365;
  2435                              <1> ;	return(d - (d - t[YDAY] + t[WDAY] + 700) % 7);
  2436                              <1> ;}
  2437                              <1> ;
  2438                              <1> ;gmtime(tim)
  2439                              <1> ;int tim[];
  2440                              <1> ;{
  2441                              <1> ;	register int d0, d1;
  2442                              <1> ;	register *tp;
  2443                              <1> ;	static xtime[9];
  2444                              <1> ;	extern int ldivr;
  2445                              <1> ;
  2446                              <1> ;	/*
  2447                              <1> ;	 * break initial number into
  2448                              <1> ;	 * multiples of 8 hours.
  2449                              <1> ;	 * (28800 = 60*60*8)
  2450                              <1> ;	 */
  2451                              <1> ;
  2452                              <1> ;	d0 = ldiv(tim[0], tim[1], 28800);
  2453                              <1> ;	d1 = ldivr;
  2454                              <1> ;	tp = &xtime[0];
  2455                              <1> ;
  2456                              <1> ;	/*
  2457                              <1> ;	 * generate hours:minutes:seconds
  2458                              <1> ;	 */
  2459                              <1> ;
  2460                              <1> ;	*tp++ = d1%60;
  2461                              <1> ;	d1 =/ 60;
  2462                              <1> ;	*tp++ = d1%60;
  2463                              <1> ;	d1 =/ 60;
  2464                              <1> ;	d1 =+ (d0%3)*8;
  2465                              <1> ;	d0 =/ 3;
  2466                              <1> ;	*tp++ = d1;
  2467                              <1> ;
  2468                              <1> ;	/*
  2469                              <1> ;	 * d0 is the day number.
  2470                              <1> ;	 * generate day of the week.
  2471                              <1> ;	 */
  2472                              <1> ;
  2473                              <1> ;	xtime[WDAY] = (d0+4)%7;
  2474                              <1> ;
  2475                              <1> ;	/*
  2476                              <1> ;	 * year number
  2477                              <1> ;	 */
  2478                              <1> ;	for(d1=70; d0 >= dysize(d1); d1++)
  2479                              <1> ;		d0 =- dysize(d1);
  2480                              <1> ;	xtime[YEAR] = d1;
  2481                              <1> ;	xtime[YDAY] = d0;
  2482                              <1> ;
  2483                              <1> ;	/*
  2484                              <1> ;	 * generate month
  2485                              <1> ;	 */
  2486                              <1> ;
  2487                              <1> ;	if (dysize(d1)==366)
  2488                              <1> ;		dmsize[1] = 29;
  2489                              <1> ;	for(d1=0; d0 >= dmsize[d1]; d1++)
  2490                              <1> ;		d0 =- dmsize[d1];
  2491                              <1> ;	dmsize[1] = 28;
  2492                              <1> ;	*tp++ = d0+1;
  2493                              <1> ;	*tp++ = d1;
  2494                              <1> ;	xtime[ISDAY] = 0;
  2495                              <1> ;	return(xtime);
  2496                              <1> ;}
  2497                              <1> ;
  2498                              <1> ;asctime(t)
  2499                              <1> ;int *t;
  2500                              <1> ;{
  2501                              <1> ;	register char *cp, *ncp;
  2502                              <1> ;	register int *tp;
  2503                              <1> ;
  2504                              <1> ;	cp = cbuf;
  2505                              <1> ;	for (ncp = "Day Mon 00 00:00:00 1900\n"; *cp++ = *ncp++;);
  2506                              <1> ;	ncp = &"SunMonTueWedThuFriSat"[3*t[6]];
  2507                              <1> ;	cp = cbuf;
  2508                              <1> ;	*cp++ = *ncp++;
  2509                              <1> ;	*cp++ = *ncp++;
  2510                              <1> ;	*cp++ = *ncp++;
  2511                              <1> ;	cp++;
  2512                              <1> ;	tp = &t[4];
  2513                              <1> ;	ncp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[(*tp)*3];
  2514                              <1> ;	*cp++ = *ncp++;
  2515                              <1> ;	*cp++ = *ncp++;
  2516                              <1> ;	*cp++ = *ncp++;
  2517                              <1> ;	cp = numb(cp, *--tp);
  2518                              <1> ;	cp = numb(cp, *--tp+100);
  2519                              <1> ;	cp = numb(cp, *--tp+100);
  2520                              <1> ;	cp = numb(cp, *--tp+100);
  2521                              <1> ;	cp =+ 2;
  2522                              <1> ;	cp = numb(cp, t[YEAR]);
  2523                              <1> ;	return(cbuf);
  2524                              <1> ;}
  2525                              <1> ;
  2526                              <1> ;dysize(y)
  2527                              <1> ;{
  2528                              <1> ;	if((y%4) == 0)
  2529                              <1> ;		return(366);
  2530                              <1> ;	return(365);
  2531                              <1> ;}
  2532                              <1> ;
  2533                              <1> ;
  2534                              <1> ;numb:
  2535                              <1> ;	
  2536                              <1> ;
  2537                              <1> ;numb(acp, n)
  2538                              <1> ;{
  2539                              <1> ;	register char *cp;
  2540                              <1> ;	cp = acp;
  2541                              <1> ;	cp++;
  2542                              <1> ;	if (n>=10)
  2543                              <1> ;		*cp++ = (n/10)%10 + '0';
  2544                              <1> ;	else
  2545                              <1> ;		*cp++ = ' ';
  2546                              <1> ;	*cp++ = n%10 + '0';
  2547                              <1> ;	return(cp);
  2548                              <1> ;}
  2549                              <1> ;
  1820                                  
  1821 00000882 [34150000]              brk:	dd _end + 512 ; (gstat:)
  1822                                  
  1823                                  ; directory name pointer
  1824 00000886 00000000                dnp:	dd 0 ; (do:)
  1825                                  
  1826 0000088A [92080000]              dotp:	dd dot
  1827                                  	;dotp:	dot
  1828 0000088E [2A0D0000]              euids:	dd uidbuf
  1829                                  	; euids: uidbuf
  1830 00000892 2E00                    dot:	db '.', 0		
  1831                                  	;dot:  <.\0>
  1832 00000894 0D0A00                  nl:	db 0Dh, 0Ah, 0
  1833                                  	; nl:  <\n\0>
  1834 00000897 746F74616C2000          totmes: db 'total ', 0
  1835                                  	; totmes: <total \0>
  1836 0000089E 202020                  space3: db 20h, 20h, 20h
  1837                                  	; space3: <  >
  1838 000008A1 2000                    space:	db 20h, 0
  1839                                  	; space: < \0>
  1840 000008A3 2F6574632F70617373-     passwd: db '/etc/passwd', 0
  1840 000008AC 776400             
  1841                                  	; passwd: </etc/passwd\0>
  1842 000008AF 3A0D0A00                colon:	db ':', 0Dh, 0Ah, 0
  1843                                  	; colon: <:\n\0>
  1844                                  
  1845 000008B3 00000000                eol:	dd 0 ; (pass3:)
  1846                                  
  1847                                  ; 22/01/2022
  1848 000008B7 16                      db 22
  1849 000008B8 01                      db 1
  1850 000008B9 E607                    dw 2022
  1851 000008BB 0000                    dw 0
  1852 000008BD A101                    dw 417
  1853                                  
  1854 000008BF 90                      align 4
  1855                                  
  1856                                  bss_start:
  1857                                  
  1858                                  ABSOLUTE bss_start
  1859                                  ;EVEN
  1860                                  ;bss:
  1861                                  	;count:	  resw 1
  1862                                  	;ocount:  resw 1
  1863                                  	; 12/01/2022
  1864 000008C0 ??                      	count:	  resb 1
  1865 000008C1 ??                      	ocount:   resb 1
  1866                                  	;
  1867 000008C2 ????                    	longf:	  resw 1
  1868                                  	;allflg:  resw 1
  1869                                  	;dirflg:  resw 1
  1870                                  	;isadir:  resw 1
  1871                                  	; 12/01/2022
  1872 000008C4 ??                      	allflg:   resb 1
  1873 000008C5 ??                      	dirflg:   resb 1
  1874 000008C6 ??                      	isadir:	  resb 1
  1875 000008C7 ??                      		  resb 1
  1876                                  	; 	 
  1877 000008C8 ????????                	tblocks:  resd 1
  1878 000008CC ????????                	sortoff:  resd 1
  1879 000008D0 <res 20h>               	filnam:   resb 32
  1880 000008F0 <res 22h>               	statb:	  resb 34
  1881                                  	; 12/01/2022
  1882 00000912 ????                    		  resb 2  ; dword alignment (not necessary)
  1883                                  	;
  1884 00000914 <res 208h>              	dbuf:	  resb 520 
  1885                                  	; 2 byte file descriptor, 2 byte buffer data size,
  1886                                  	; 4 byte buffer offset, 512 byte buffer data
  1887 00000B1C <res 208h>              	obuf:	  resb 520
  1888 00000D24 ????????????            	numbuf:   resb 6
  1889 00000D2A <res 400h>              	uidbuf:   resb 1024
  1890                                  	euidbuf:  
  1891 0000112A <res 208h>              	iobuf:	  resb 520
  1892                                  
  1893 00001332 ????                    alignb 4
  1894                                  	_end:
  1895                                  
  1896                                  	; .even
  1897                                  
  1898                                  	;.bss
  1899                                  
  1900                                  	;count:	  .=.+2
  1901                                  	;ocount:  .=.+2
  1902                                  	;longf:	  .=.+2
  1903                                  	;sortoff: .=.+2
  1904                                  	;allflg:  .=.+2
  1905                                  	;dirflg:  .=.+2
  1906                                  	;isadir:  .=.+2 
  1907                                  	;filnam:  .=.+32.
  1908                                  	;statb:	  .=.+34.
  1909                                  	;dbuf:	  .=.+518.
  1910                                  	;obuf:	  .=.+518.
  1911                                  	;numbuf:  .=.+6
  1912                                  	;tblocks: .=.+2
  1913                                  	;uidbuf:  .=.+1024.
  1914                                  	;euidbuf:
  1915                                  	;iobuf:	  .=.+518.
