wok rev 25564

Up memtest (6.20)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Thu May 11 15:58:49 2023 +0000 (12 months ago)
parents 41581d281860
children dfb00254cc7c
files BootProg/receipt BootProg/stuff/boot16.asm BootProg/stuff/boot32.asm BootProg/stuff/bootex.asm BootProg/stuff/bootprog.sh libjreen-dev/receipt libjreen/receipt memtest-efi32/receipt memtest-efi64/receipt memtest/receipt memtest/stuff/memtest86+-6-386.patch memtest64/receipt musl-libc-dev/receipt musl-libc/receipt urbackup-server/receipt usbutils/receipt warmux/receipt
line diff
     1.1 --- a/BootProg/receipt	Sat May 06 08:42:03 2023 +0000
     1.2 +++ b/BootProg/receipt	Thu May 11 15:58:49 2023 +0000
     1.3 @@ -14,16 +14,19 @@
     1.4  compile_rules()
     1.5  {
     1.6  	mkdir -p $src && cd $src
     1.7 -	bs="boot16 bootex boot32"
     1.8 +	bs="boot12 boot16 bootex boot32"
     1.9 +	cp $stuff/boot??.asm .
    1.10 +	cp boot16.asm boot12.asm
    1.11 +	sed -i 's|^FAT12.*|FAT12          equ       0|' boot16.asm
    1.12 +	sed -i 's|^FAT16.*|FAT16          equ       0|' boot12.asm
    1.13  	for i in $bs ; do
    1.14 -		cp $stuff/$i.asm .
    1.15  		nasm $i.asm -f bin -o $i.bin -l $i.lst || return 1
    1.16  	done
    1.17  	sed '1,2!d' $stuff/bootprog.sh > bootprog
    1.18  	{
    1.19  		sed "1,2d;s|FAT32SZ|$(stat -c %s boot32.bin)|" $stuff/bootprog.sh
    1.20  		cat ${bs// /.bin }.bin
    1.21 -	} | xz -z --format=lzma --lzma1=lc=0,pb=0,nice=33,dict=4k >> bootprog
    1.22 +	} | xz -z --format=lzma --lzma1=lc=0,pb=0,nice=100,dict=4k >> bootprog
    1.23  	chmod +x bootprog
    1.24  }
    1.25  
     2.1 --- a/BootProg/stuff/boot16.asm	Sat May 06 08:42:03 2023 +0000
     2.2 +++ b/BootProg/stuff/boot16.asm	Thu May 11 15:58:49 2023 +0000
     2.3 @@ -26,6 +26,14 @@
     2.4  ;; - cpu 8086 is supported                                                  ;;
     2.5  ;;                                                                          ;;
     2.6  ;;                                                                          ;;
     2.7 +;;                             Known Limitation:                            ;;
     2.8 +;;                             ~~~~~~~~~~~~~~~~~                            ;;
     2.9 +;; - Need a up to date field bpbHiddenSectors to work in a partition ;      ;;
    2.10 +;;   most formatters don't update it correcly in extended partitions.       ;;
    2.11 +;;                                                                          ;;
    2.12 +;; - Partition must fit in the first 8GB disk for CHS reads.                ;;
    2.13 +;;                                                                          ;;
    2.14 +;;                                                                          ;;
    2.15  ;;                                Known Bugs:                               ;;
    2.16  ;;                                ~~~~~~~~~~~                               ;;
    2.17  ;; - All bugs are fixed as far as I know. The boot sector has been tested   ;;
    2.18 @@ -85,12 +93,14 @@
    2.19  %define bx(label)       bx+label-boot
    2.20  %define si(label)       si+label-boot
    2.21  NullEntryCheck          equ     1               ; +2 bytes
    2.22 -ReadRetry               equ     1               ; +9 bytes
    2.23 +ReadRetry               equ     1               ; +9/+10 bytes
    2.24  LBAsupport              equ     1               ; +16 bytes
    2.25 -Over2GB                 equ     1               ; +5 bytes
    2.26 +CHSsanityCheck          equ     1               ; +12/+16 bytes 
    2.27  GeometryCheck           equ     1               ; +18 bytes
    2.28 +CheckAttrib             equ     0               ; +6 bytes
    2.29 +WaitForKey              equ     0               ; +5 bytes
    2.30  SectorOf512Bytes        equ     0               ; -4/-6 bytes
    2.31 -CheckAttrib             equ     0               ; +6 bytes
    2.32 +Always2FATs             equ     0               ; -1 bytes
    2.33  
    2.34  [BITS 16]
    2.35  [CPU 8086]
    2.36 @@ -115,10 +125,10 @@
    2.37  ;; BPB starts here ;;
    2.38  ;;;;;;;;;;;;;;;;;;;;;
    2.39  
    2.40 -bpbBytesPerSector       DW      0               ; 0x0B
    2.41 -bpbSectorsPerCluster    DB      0               ; 0x0D
    2.42 -bpbReservedSectors      DW      0               ; 0x0E
    2.43 -bpbNumberOfFATs         DB      0               ; 0x10
    2.44 +bpbBytesPerSector       DW      0               ; 0x0B 512, 1024, 2048 or 4096
    2.45 +bpbSectorsPerCluster    DB      0               ; 0x0D 1, 2, 4, 8, 16, 32 or 64
    2.46 +bpbReservedSectors      DW      0               ; 0x0E 1
    2.47 +bpbNumberOfFATs         DB      0               ; 0x10 2
    2.48  bpbRootEntries          DW      0               ; 0x11
    2.49  bpbTotalSectors         DW      0               ; 0x13
    2.50  bpbMedia                DB      0               ; 0x15
    2.51 @@ -134,7 +144,7 @@
    2.52  
    2.53  bsDriveNumber           DB      0               ; 0x24
    2.54  bsUnused                DB      0               ; 0x25
    2.55 -bsExtBootSignature      DB      0               ; 0x26
    2.56 +bsExtBootSignature      DB      0               ; 0x26 29
    2.57  bsSerialNumber          DD      0               ; 0x27
    2.58  bsVolumeLabel  times 11 DB      " "             ; 0x2B "NO NAME    "
    2.59  bsFileSystem   times 8  DB      " "             ; 0x36 "FAT12   " or "FAT16   "
    2.60 @@ -199,21 +209,23 @@
    2.61  ;;;;;;;;;;;;;;;;;;;;;;;;;;
    2.62  
    2.63  %if GeometryCheck != 0
    2.64 -        mov     ah, 8
    2.65 + %if ((main-boot) & 3Fh) != 0
    2.66 +        xchg    ax, cx                  ; ax & 3Fh == 0
    2.67 + %endif
    2.68 +        mov     ah, 8                   ; update AX,BL,CX,DX,DI, and ES registers
    2.69          int     13h                     ; may destroy SI,BP, and DS registers
    2.70  %endif
    2.71 -                                        ; update AX,BL,CX,DX,DI, and ES registers
    2.72          push    cs
    2.73          pop     ds
    2.74          xor     bx, bx
    2.75  
    2.76  %if GeometryCheck != 0
    2.77          and     cx, byte 3Fh
    2.78 -        cmp     [bx(bpbSectorsPerTrack)], cx
    2.79 -        jne     BadParams               ; verify updated and validity
    2.80 -        mov     al, dh
    2.81 -        inc     ax
    2.82 -        mov     [bpbHeadsPerCylinder], ax
    2.83 +        je      BadParams               ; verify updated and validity
    2.84 +        mov     [bx(bpbSectorsPerTrack)], cx
    2.85 +        mov     cl, dh
    2.86 +        inc     cx
    2.87 +        mov     [bx(bpbHeadsPerCylinder)], cx
    2.88  BadParams:
    2.89  %endif
    2.90  
    2.91 @@ -246,7 +258,11 @@
    2.92          xchg    ax, di                  ; di = root directory size in sectors, clear ah
    2.93  %endif
    2.94  
    2.95 +%if Always2FATs != 0
    2.96 +        mov     al, 2
    2.97 +%else
    2.98          mov     al, [bpbNumberOfFATs]
    2.99 +%endif
   2.100          mul     bp                      ; [bx(bpbSectorsPerFAT)], set by ReadDISectors
   2.101  
   2.102          push    es                      ; read root directory
   2.103 @@ -282,7 +298,7 @@
   2.104          pop     di
   2.105          je      FindNameFound
   2.106  %if NullEntryCheck != 0
   2.107 -        scasb				; Z == NC
   2.108 +        scasb                           ; Z == NC
   2.109          cmc
   2.110          lea     di, [di+31]
   2.111          dec     word [bx(bpbRootEntries)]
   2.112 @@ -327,6 +343,9 @@
   2.113          push    di                      ; up to 2 * 635K / BytesPerCluster = 2540 bytes
   2.114  %if FAT12 == 1
   2.115          mov     cl, 12
   2.116 +%else
   2.117 +        nop
   2.118 +        nop
   2.119  %endif
   2.120  ClusterLoop:
   2.121          mov     [di], si
   2.122 @@ -351,6 +370,9 @@
   2.123  %if FAT12 == 1
   2.124          add     si, [di]
   2.125          shr     si, 1                   ; si = cluster * 3 / 2
   2.126 +%else
   2.127 +        nop
   2.128 +        nop
   2.129  %endif
   2.130  %if FAT16 == 1
   2.131  ReadClusterFat16:
   2.132 @@ -502,11 +524,11 @@
   2.133          int     10h
   2.134          cmp     al, "."
   2.135          jne     PutStr
   2.136 -
   2.137 + %if WaitForKey != 0
   2.138          cbw
   2.139          int     16h                     ; wait for a key...
   2.140          int     19h                     ; bootstrap
   2.141 -
   2.142 + %endif
   2.143  Stop:
   2.144          hlt
   2.145          jmp     short Stop
   2.146 @@ -523,7 +545,7 @@
   2.147  ;;         CX    = 0                   ;;
   2.148  ;;         DI    = 0                   ;;
   2.149  ;;         DL    = drive number        ;;
   2.150 -;;         DX:BP = next LBA from FAT   ;;
   2.151 +;;         0:BP  = next LBA from FAT   ;;
   2.152  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   2.153  
   2.154  ReadDISectors:
   2.155 @@ -544,6 +566,7 @@
   2.156  ;;         BX    = 0                   ;;
   2.157  ;;         CX or DI = 0                ;;
   2.158  ;;         DL    = drive number        ;;
   2.159 +;; Keep:   BP, SI                      ;;
   2.160  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   2.161  
   2.162  ReadSectors:
   2.163 @@ -575,23 +598,25 @@
   2.164          push    di
   2.165  %endif
   2.166  
   2.167 -%if Over2GB != 0
   2.168          xchg    ax, cx                  ; save low LBA
   2.169          xchg    ax, dx                  ; get high LBA
   2.170          cwd                             ; clear dx (LBA offset <1TB)
   2.171          idiv    word [bx(bpbSectorsPerTrack)] ; up to 8GB disks
   2.172  
   2.173 + %if CHSsanityCheck != 0
   2.174 +        inc     ax
   2.175 +        cmp     ax, [bx(bpbHeadsPerCylinder)]
   2.176 +        ja      CHSoverflow
   2.177 +        dec     ax
   2.178 + %endif
   2.179          xchg    ax, cx                  ; restore low LBA, save high LBA / SPT
   2.180 -%else
   2.181 -        xor     cx, cx                  ; up to 2GB disks otherwise divide error interrupt !
   2.182 -%endif
   2.183          idiv    word [bx(bpbSectorsPerTrack)]
   2.184                  ; ax = LBA / SPT
   2.185                  ; dx = LBA % SPT         = sector - 1
   2.186          inc     dx
   2.187  
   2.188          xchg    cx, dx                  ; restore high LBA / SPT, save sector no.
   2.189 -        idiv    word [bx(bpbHeadsPerCylinder)]
   2.190 +        idiv    word [bx(bpbHeadsPerCylinder)] ; may overflow if SectorsPerTrack * HeadsPerCylinder < 256 or disk > 8GB
   2.191                  ; ax = (LBA / SPT) / HPC = cylinder
   2.192                  ; dx = (LBA / SPT) % HPC = head
   2.193  
   2.194 @@ -604,21 +629,43 @@
   2.195          mov     dh, dl
   2.196                  ; dh = head no.
   2.197  
   2.198 -ReadSectorRetry:
   2.199 +%if CHSsanityCheck != 0
   2.200 + %if LBAsupport != 0
   2.201 +        or      ah, [si+8+3]            ; 8GB max, last cylinder 1023
   2.202 + %else
   2.203 +        or      ah, [si+2+3]            ; 8GB max, last cylinder 1023
   2.204 + %endif
   2.205 +%endif
   2.206 +CHSoverflow:
   2.207          mov     dl, [bx(DriveNumber)]
   2.208                  ; dl = drive no.
   2.209          mov     si, sp
   2.210 +%if CHSsanityCheck != 0
   2.211 + %if ReadRetry != 0 || LBAsupport != 0
   2.212 +        pushf
   2.213 + %endif
   2.214 +%endif
   2.215 +
   2.216 +ReadSectorRetry:
   2.217  %if LBAsupport != 0
   2.218          mov     ah, 42h                 ; ah = 42h = extended read function no.
   2.219          int     13h                     ; extended read sectors (DL, DS:SI)
   2.220          jnc     ReadSectorNextSegment
   2.221  %endif
   2.222 +%if CHSsanityCheck != 0
   2.223 + %if ReadRetry != 0 || LBAsupport != 0
   2.224 +        popf
   2.225 +        pushf
   2.226 + %endif
   2.227 +        jne     SkipCHS
   2.228 +%endif
   2.229  
   2.230          mov     ax, 201h                ; al = sector count = 1
   2.231                                          ; ah = 2 = read function no.
   2.232          int     13h                     ; read sectors (AL, CX, DX, ES:BX)
   2.233  
   2.234          jnc     ReadSectorNextSegment
   2.235 +SkipCHS:
   2.236  %if ReadRetry != 0
   2.237          cbw                             ; ah = 0 = reset function
   2.238          int     13h                     ; reset drive (DL)
   2.239 @@ -627,29 +674,34 @@
   2.240          jnz     ReadSectorRetry         ; up to 15 extra attempt
   2.241  %endif
   2.242  
   2.243 +ReadError:
   2.244          call    Error
   2.245          db      "Read error."
   2.246  
   2.247  ReadSectorNextSegment:
   2.248 +%if CHSsanityCheck != 0 && (ReadRetry != 0 || LBAsupport != 0)
   2.249 +        popf
   2.250 +%endif
   2.251 +
   2.252 +%macro adjust_es 2
   2.253 + %if SectorOf512Bytes != 0
   2.254 +        add     word %1, byte 32    ; adjust segment for next sector
   2.255 + %else
   2.256 +  %if %2 != 0
   2.257 +        mov     al, %2
   2.258 +  %endif
   2.259 +        mul     byte [bx(bpbBytesPerSector)+1] ;  = (bpbBytesPerSector/256)*16
   2.260 +        add     %1, ax              ; adjust segment for next sector
   2.261 + %endif
   2.262 +%endmacro
   2.263  
   2.264  %if LBAsupport != 0
   2.265          pop     ax                      ; al = 16
   2.266 - %if SectorOf512Bytes != 0
   2.267 -        add     word [si+6], byte 32    ; adjust segment for next sector
   2.268 - %else
   2.269 -        mul     byte [bx(bpbBytesPerSector)+1] ;  = (bpbBytesPerSector/256)*16
   2.270 -        add     [si+6], ax              ; adjust segment for next sector
   2.271 - %endif
   2.272 +        adjust_es       [si+6], 0
   2.273          pop     cx                      ; sector count = 1
   2.274          pop     bx
   2.275  %else
   2.276 - %if SectorOf512Bytes != 0
   2.277 -        add     word [si], byte 32      ; adjust segment for next sector
   2.278 - %else
   2.279 -        mov     al, 16
   2.280 -        mul     byte [bx(bpbBytesPerSector)+1] ;  = (bpbBytesPerSector/256)*16
   2.281 -        add     [si], ax                ; adjust segment for next sector
   2.282 - %endif
   2.283 +        adjust_es       [si], 16
   2.284  %endif
   2.285          pop     es                      ; es:0 updated
   2.286          pop     ax
     3.1 --- a/BootProg/stuff/boot32.asm	Sat May 06 08:42:03 2023 +0000
     3.2 +++ b/BootProg/stuff/boot32.asm	Thu May 11 15:58:49 2023 +0000
     3.3 @@ -25,6 +25,14 @@
     3.4  ;;   instruction and lets the BIOS continue bootstrap.                      ;;
     3.5  ;;                                                                          ;;
     3.6  ;;                                                                          ;;
     3.7 +;;                             Known Limitation:                            ;;
     3.8 +;;                             ~~~~~~~~~~~~~~~~~                            ;;
     3.9 +;; - Need a up to date field bpbHiddenSectors to work in a partition ;      ;;
    3.10 +;;   most formatters don't update it correcly in extended partitions.       ;;
    3.11 +;;                                                                          ;;
    3.12 +;; - Requires i80386 or better CPU.                                         ;;
    3.13 +;;                                                                          ;;
    3.14 +;;                                                                          ;;
    3.15  ;;                                Known Bugs:                               ;;
    3.16  ;;                                ~~~~~~~~~~~                               ;;
    3.17  ;; - All bugs are fixed as far as I know. The boot sector has been tested   ;;
    3.18 @@ -86,13 +94,15 @@
    3.19  NonMirroredFATs         equ     1               ; +18 bytes
    3.20  ReadRetry               equ     1               ; +7 bytes
    3.21  LBA48bits               equ     1               ; +15 bytes
    3.22 -CHSsupport              equ     1               ; +27 bytes max 16MB, 32MB or 8GB
    3.23 -CHSupTo32MB             equ     1               ; +6 bytes
    3.24 -CHSupTo8GB              equ     1               ; +14 bytes
    3.25 +CHSsupport              equ     1               ; +27 bytes max 8GB
    3.26 +CHSgeometryCheck        equ     1               ; +18 bytes
    3.27 +CHSsanityCheck          equ     1               ; +5 bytes 
    3.28  SectorOf512Bytes        equ     0               ; -5 bytes
    3.29  Always2FATs             equ     0               ; -4 bytes
    3.30 +WaitForKey              equ     0               ; +5 bytes
    3.31  
    3.32  [BITS 16]
    3.33 +[CPU 386]
    3.34  
    3.35  ImageLoadSeg            equ     60h     ; <=07Fh because of "push byte ImageLoadSeg" instructions
    3.36  StackSize               equ     512
    3.37 @@ -115,14 +125,14 @@
    3.38  ;; BPB1 starts here ;;
    3.39  ;;;;;;;;;;;;;;;;;;;;;;
    3.40  
    3.41 -bpbBytesPerSector       DW      0               ; 0x0B
    3.42 -bpbSectorsPerCluster    DB      0               ; 0x0D
    3.43 -bpbReservedSectors      DW      0               ; 0x0E
    3.44 -bpbNumberOfFATs         DB      0               ; 0x10
    3.45 -bpbRootEntries          DW      0               ; 0x11
    3.46 -bpbTotalSectors         DW      0               ; 0x13
    3.47 -bpbMedia                DB      0               ; 0x15
    3.48 -bpbSectorsPerFAT        DW      0               ; 0x16
    3.49 +bpbBytesPerSector       DW      0               ; 0x0B 512, 1024, 2048 or 4096
    3.50 +bpbSectorsPerCluster    DB      0               ; 0x0D 1, 2, 4, 8, 16, 32, 64 or 128
    3.51 +bpbReservedSectors      DW      0               ; 0x0E 32
    3.52 +bpbNumberOfFATs         DB      0               ; 0x10 2
    3.53 +bpbRootEntries          DW      0               ; 0x11 0
    3.54 +bpbTotalSectors         DW      0               ; 0x13 0
    3.55 +bpbMedia                DB      0               ; 0x15 F8, F0
    3.56 +bpbSectorsPerFAT        DW      0               ; 0x16 0
    3.57  bpbSectorsPerTrack      DW      0               ; 0x18
    3.58  bpbHeadsPerCylinder     DW      0               ; 0x1A
    3.59  bpbHiddenSectors        DD      0               ; 0x1C
    3.60 @@ -145,7 +155,7 @@
    3.61  bsreserved             times 12 DB      0               ; 0x34
    3.62  bsDriveNumber                   DB      0               ; 0x40
    3.63  bsreserved1                     DB      0               ; 0x41
    3.64 -bsExtendedBootSignature         DB      0               ; 0x42
    3.65 +bsExtendedBootSignature         DB      0               ; 0x42 29
    3.66  bsVolumeSerialNumber            DD      0               ; 0x43
    3.67  bsVolumeLabel          times 11 DB      " "             ; 0x47 "NO NAME    "
    3.68  bsFileSystemName       times 8  DB      " "             ; 0x52 "FAT32   "
    3.69 @@ -200,23 +210,44 @@
    3.70  %else
    3.71          push    byte main
    3.72  %endif
    3.73 -        push    es
    3.74 -        pop     ds
    3.75          retf
    3.76  
    3.77  %if ExtraBootSector != 0
    3.78  %macro MovedCode 0
    3.79  %endif
    3.80  main:
    3.81 -        xor     ebx, ebx
    3.82  %if ExtraBootSector != 0
    3.83          add     al, 32
    3.84 -        mov     es, ax
    3.85 -        mov     eax, [bx(bpbHiddenSectors)]
    3.86 -        inc     eax
    3.87 - %if LBA48bits != 0
    3.88 -        mov     [bx(HiLBA)], bx
    3.89 - %endif
    3.90 +        push    ax
    3.91 +%endif
    3.92 +;;;;;;;;;;;;;;;;;;;;;;;;;;
    3.93 +;; Get drive parameters ;;
    3.94 +;; Update heads count   ;;
    3.95 +;; for current BIOS     ;;
    3.96 +;;;;;;;;;;;;;;;;;;;;;;;;;;
    3.97 +
    3.98 +%if CHSgeometryCheck != 0
    3.99 +        mov     ah, 8                   ; update AX,BL,CX,DX,DI, and ES registers
   3.100 +        int     13h                     ; may destroy SI,BP, and DS registers
   3.101 +%endif
   3.102 +        push    cs
   3.103 +        pop     ds
   3.104 +        xor     ebx, ebx
   3.105 +
   3.106 +%if CHSgeometryCheck != 0
   3.107 +        and     cx, byte 3Fh
   3.108 +        je      BadParams               ; verify updated and validity
   3.109 +        mov     [bx(bpbSectorsPerTrack)], cx
   3.110 +        mov     cl, dh
   3.111 +        inc     cx
   3.112 +        mov     [bx(bpbHeadsPerCylinder)], cx
   3.113 +        xor     cx, cx
   3.114 +BadParams:
   3.115 +%endif
   3.116 +%if ExtraBootSector != 0
   3.117 +        pop     es
   3.118 +        mul     ebx                     ; edx:eax = 0
   3.119 +        inc     ax
   3.120          call    ReadSectorBoot
   3.121          push    ds
   3.122          pop     ss
   3.123 @@ -258,9 +289,9 @@
   3.124          mov     cl, NameLength
   3.125          mov     si, ProgramName         ; ds:si -> program name
   3.126          repe    cmpsb
   3.127 -%if CheckAttrib != 0
   3.128  VolumeLabel     equ  8
   3.129  SubDirectory    equ  10h
   3.130 +%if CheckAttrib != 0
   3.131          jnz     SkipFindName
   3.132          test    byte [es:di], VolumeLabel+SubDirectory
   3.133  SkipFindName:
   3.134 @@ -277,6 +308,10 @@
   3.135  ErrFind:
   3.136          call    Error                   ; end of root directory (dir end reached)
   3.137          db      "File not found."
   3.138 +%if ExtraBootSector != 0
   3.139 +%endm
   3.140 +%macro BootFileName 0
   3.141 +%endif
   3.142  FindNameFound:
   3.143          push    word [es:di+14h-11]
   3.144          push    word [es:di+1Ah-11]
   3.145 @@ -331,7 +366,7 @@
   3.146          jmp     short Run
   3.147  %if ExtraBootSector != 0
   3.148  %endm
   3.149 -%macro BootFileName 0
   3.150 +%macro BootCode 0
   3.151  %endif
   3.152  
   3.153  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   3.154 @@ -400,9 +435,11 @@
   3.155          int     10h
   3.156          cmp     al, '.'
   3.157          jne     puts
   3.158 +%if WaitForKey != 0
   3.159          cbw
   3.160          int     16h                     ; wait for a key...
   3.161          int     19h                     ; bootstrap
   3.162 +%endif
   3.163  
   3.164  Stop:
   3.165          hlt
   3.166 @@ -428,7 +465,7 @@
   3.167          mov     bp, [bx(bpbBytesPerSector)]
   3.168          shr     bp, 4                           ; bp = paragraphs per sector
   3.169  %endif
   3.170 -        mov     dx, 1                           ; adjust LBA for next sector
   3.171 +        inc     eax                             ; adjust LBA for next sector
   3.172          inc     cx
   3.173          loop    ReadSectorLBA
   3.174  
   3.175 @@ -444,17 +481,17 @@
   3.176  
   3.177          imul    si, dx, byte 4                  ; si=entry # in sector, clear C
   3.178  %if NonMirroredFATs != 0
   3.179 -        cwde
   3.180 +        cdq
   3.181          or      dl, byte [bx(bsExtendedFlags)]
   3.182          jns     MirroredFATs                    ; Non-mirrored FATs ?
   3.183          and     dl, 0Fh
   3.184          imul    edx, dword [bx(bsSectorsPerFAT32)] ; we need to read the active one
   3.185          add     eax, edx
   3.186  MirroredFATs:
   3.187 -        cwde
   3.188 +        cdq
   3.189  %else
   3.190   %if LBA48bits != 0
   3.191 -        xor     dx, dx
   3.192 +        cdq
   3.193   %endif
   3.194  %endif
   3.195          call    ReadSectorLBAfromFAT            ; read 1 FAT32 sector
   3.196 @@ -475,45 +512,48 @@
   3.197          movzx   ecx, byte [bx(bpbSectorsPerCluster)] ; 8..128
   3.198          mul     ecx                             ; edx:eax=sector number in data area
   3.199          add     eax, edi
   3.200 -%if LBA48bits != 0
   3.201 -        adc     dx, bx
   3.202 -%endif
   3.203  
   3.204  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   3.205  ;; Reads a sector form the start of FAT ;;
   3.206  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   3.207  
   3.208  ReadSectorLBAfromFAT:
   3.209 -        add     eax, [bx(bpbHiddenSectors)]
   3.210  %if LBA48bits != 0
   3.211 -        adc     dx, bx
   3.212 -        mov     word [bx(HiLBA)], dx
   3.213 +        push    dx
   3.214  %endif
   3.215          mov     dx, [bx(bpbReservedSectors)]
   3.216 +        add     eax, edx
   3.217 +ReadSectorLBAfromFAT:
   3.218 +        pop     dx                              ; 16TB FAT32 max
   3.219 +        adc     dx, bx
   3.220 +ReadSectorBoot:
   3.221 +        mov     [bx(HiLBA)], dx
   3.222 +%endif
   3.223  
   3.224  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   3.225  ;; Reads a sector using BIOS Int 13h fn 42h ;;
   3.226  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   3.227 -;; Input:  EAX = LBA                        ;;
   3.228 -;;         CX    = sector count             ;;
   3.229 +;; Input:  EAX+EDX = LBA                    ;;
   3.230  ;;         ES:BX -> buffer address          ;;
   3.231 +;; Keep:   ESI = next cluster               ;;
   3.232 +;;         EDI = data cluster               ;;
   3.233 +;;         BP  = paragraphs / sector        ;;
   3.234 +;;         CX  = sector count               ;;
   3.235  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   3.236  
   3.237  ReadSectorLBA:
   3.238 -        add     eax, edx
   3.239  %if LBA48bits != 0
   3.240 -        adc     word [bx(HiLBA)], bx
   3.241 +        mov     dx, [bx(HiLBA)]
   3.242 +%else
   3.243 +        xor     dx, dx                          ; 2TB FAT32 max
   3.244 +ReadSectorBoot:
   3.245  %endif
   3.246 -ReadSectorBoot:
   3.247 -        mov     dx, [bx(DriveNumber)]   ; restore BIOS boot drive number
   3.248 -        pusha
   3.249 +        pushad
   3.250  
   3.251 -        push    bx
   3.252 -%if LBA48bits != 0
   3.253 -        push    word [bx(HiLBA)]        ; 48-bit LBA
   3.254 -%else
   3.255 -        push    bx
   3.256 -%endif
   3.257 +        add     eax, [bx(bpbHiddenSectors)]
   3.258 +        adc     dx, bx                          ; 2TB partition offset max
   3.259 +
   3.260 +        push    edx
   3.261          push    eax
   3.262          push    es
   3.263          push    bx
   3.264 @@ -521,58 +561,56 @@
   3.265          push    byte 16 ; packet size byte = 16, reserved byte = 0
   3.266  
   3.267  %if CHSsupport != 0
   3.268 - %if CHSupTo8GB != 0
   3.269 -        push    eax
   3.270 -        pop     cx                      ; save low LBA
   3.271 -        pop     ax                      ; get high LBA
   3.272 -        cwd                             ; clear dx (assume LBA offset <1TB)
   3.273 -        idiv    word [bx(bpbSectorsPerTrack)] ; up to 8GB disks, avoid divide error
   3.274 -
   3.275 -        xchg    ax, cx                  ; restore low LBA, save high LBA / SPT
   3.276 - %else
   3.277  ; Busybox mkdosfs creates fat32 for floppies.
   3.278  ; Floppies may support CHS only.
   3.279 -  %if CHSupTo32MB != 0
   3.280 -        xor     dx, dx                  ; clear dx (LBA offset <32MB)
   3.281 -  %else
   3.282 -        cwd                             ; clear dx (LBA offset <16MB)
   3.283 -  %endif
   3.284 -        xor     cx, cx                  ; high LBA / SPT = 0
   3.285 + %if LBA48bits != 0
   3.286 +; The following check is only useful with bpbSectorsPerTrack < 8 with disk > 4TB...
   3.287 +;       setnz   dl                      ; force cylinder overflow without divide error
   3.288   %endif
   3.289 -        idiv    word [bx(bpbSectorsPerTrack)]
   3.290 -                ; ax = LBA / SPT
   3.291 -                ; dx = LBA % SPT         = sector - 1
   3.292 +        movzx   ecx, word [bx(bpbSectorsPerTrack)]
   3.293 +        idiv    ecx
   3.294 +                ; eax = LBA / SPT
   3.295 +                ; edx = LBA % SPT         = sector - 1
   3.296          inc     dx
   3.297 -
   3.298 -        xchg    cx, dx                  ; restore high LBA / SPT, save sector no.
   3.299 -        idiv    word [bx(bpbHeadsPerCylinder)]
   3.300 -                ; ax = (LBA / SPT) / HPC = cylinder
   3.301 -                ; dx = (LBA / SPT) % HPC = head
   3.302 +        push    dx                      ; save sector no.
   3.303 +        cdq
   3.304 +        mov     cx, word [bx(bpbHeadsPerCylinder)]
   3.305 +        idiv    ecx
   3.306 +        pop     cx
   3.307 +                ; eax = (LBA / SPT) / HPC = cylinder
   3.308 +                ; dl  = (LBA / SPT) % HPC = head
   3.309  
   3.310          xchg    ch, al                  ; clear al
   3.311                  ; ch = LSB 0...7 of cylinder no.
   3.312 - %if CHSupTo8GB != 0 || CHSupTo32MB != 0
   3.313 -        shr     ax, 2
   3.314 -        or      cl, al
   3.315 + %if CHSsanityCheck != 0
   3.316 +        shl     eax, 6
   3.317 + %else
   3.318 +        shl     ax, 6
   3.319 + %endif
   3.320 +        or      cl, ah
   3.321                  ; cl = MSB 8...9 of cylinder no. + sector no.
   3.322 - %endif
   3.323          mov     dh, dl
   3.324                  ; dh = head no.
   3.325 -        mov     dl, [bx(DriveNumber)]   ; restore BIOS boot drive number
   3.326  %endif
   3.327  
   3.328  ReadSectorRetry:
   3.329 +        mov     dl, [bx(DriveNumber)]   ; restore BIOS boot drive number
   3.330          mov     si, sp
   3.331          mov     ah, 42h                 ; ah = 42h = extended read function no.
   3.332          int     13h                     ; extended read sectors (DL, DS:SI)
   3.333          jnc     ReadSuccess             ; CF = 0 if no error
   3.334  
   3.335  %if CHSsupport != 0
   3.336 + %if CHSsanityCheck != 0
   3.337 +        cmp     eax, 0FFFFh             ; max cylinder = 1023
   3.338 +        ja      SkipCHS
   3.339 + %endif
   3.340          mov     ax, 201h                ; al = sector count = 1
   3.341                                          ; ah = 2 = read function no.
   3.342          int     13h                     ; read sectors (AL, CX, DX, ES:BX)
   3.343  
   3.344          jnc     ReadSuccess             ; CF = 0 if no error
   3.345 +SkipCHS:
   3.346  %endif
   3.347  %if ReadRetry != 0
   3.348   %if CHSsupport != 0
   3.349 @@ -592,11 +630,13 @@
   3.350  ReadSuccess:
   3.351  
   3.352          popa                            ; sp += 16
   3.353 -        popa
   3.354 +        popad
   3.355 +        mov     dx, [bx(DriveNumber)]   ; restore BIOS boot drive number
   3.356          ret
   3.357  
   3.358  %if ExtraBootSector != 0
   3.359          MovedCode
   3.360 +        BootCode
   3.361  %endif
   3.362  
   3.363  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   3.364 @@ -616,11 +656,11 @@
   3.365  ;; End of the sector ID ;;
   3.366  ;;;;;;;;;;;;;;;;;;;;;;;;;;
   3.367  
   3.368 -                dw      0AA55h          ; BIOS checks for this ID
   3.369 +        dw      0AA55h                  ; BIOS checks for this ID
   3.370  
   3.371  %if ExtraBootSector != 0
   3.372 -                dd      61415252h       ; "RRaA"
   3.373 -                BootFileName
   3.374 -                times (996-($-$$)) db 0
   3.375 -;                dd      41617272h       ; "rrAa"
   3.376 +        dd      61415252h               ; "RRaA"
   3.377 +        BootFileName
   3.378 +        times (996-($-$$)) db 0
   3.379 +;       dd      41617272h               ; "rrAa"
   3.380  %endif
     4.1 --- a/BootProg/stuff/bootex.asm	Sat May 06 08:42:03 2023 +0000
     4.2 +++ b/BootProg/stuff/bootex.asm	Thu May 11 15:58:49 2023 +0000
     4.3 @@ -82,6 +82,9 @@
     4.4  ReadRetry               equ     1               ; +8 bytes
     4.5  SectorOf512Bytes        equ     0               ; -11 bytes
     4.6  CheckAttrib             equ     0               ; +18 bytes
     4.7 +WaitForKey              equ     0               ; +5 bytes
     4.8 +TfatSupport             equ     1               ; +10 bytes
     4.9 +CheckLBAsupport         equ     0               ; +11/21 bytes
    4.10  
    4.11  [BITS 16]
    4.12  [CPU 386]
    4.13 @@ -117,11 +120,11 @@
    4.14  bpbVolumeSerial         DD      0               ; 0x64 volume serial number
    4.15  bpbFSVersionMinor       DB      0               ; 0x68
    4.16  bpbFSVersionMajor       DB      0               ; 0x69
    4.17 -bpbVolumeStateFlags     DW      0               ; 0x6A 
    4.18 +bpbVolumeStateFlags     DW      0               ; 0x6A bit0 = fat used, bit1 = dirty, bit2 = media error 
    4.19  bpbSectorSizeBits       DB      0               ; 0x6C sector size as (1 << n)
    4.20  bpbSectorPerClusterBits DB      0               ; 0x6D sector per cluster as (1 << n)
    4.21 -bpbNumberOfFATs         DB      0               ; 0x6E always 1
    4.22 -bpbDriveNumber          DB      0               ; 0x6F alaways 0x80
    4.23 +bpbNumberOfFATs         DB      0               ; 0x6E always 1 or 2 (Tfat case)
    4.24 +bpbDriveNumber          DB      0               ; 0x6F always 0x80
    4.25  bpbAllocatedPercent     DB      0               ; 0x70 percentage of allocated space
    4.26  
    4.27  ;;;;;;;;;;;;;;;;;;;
    4.28 @@ -170,7 +173,21 @@
    4.29          push    word main
    4.30          retf
    4.31  
    4.32 +%if CheckLBAsupport != 0
    4.33 +%macro BootFileName 0
    4.34  main:
    4.35 +        mov     ah, 41h                 ; clobbers AX, BX, CX, DH
    4.36 +        mov     bx, 55AAh
    4.37 +        int     13h
    4.38 +        jc      ReadError
    4.39 +;       xor     bx, 0AA55h
    4.40 +;       jnz     ReadError
    4.41 +;       shr     cx, 1                   ; function 42h support ?
    4.42 +;       jnc     ReadError
    4.43 +        xor     cx, cx
    4.44 +%else
    4.45 +main:
    4.46 +%endif
    4.47          push    cs
    4.48          pop     ds
    4.49  
    4.50 @@ -205,46 +222,45 @@
    4.51  FindNameCycle:
    4.52          pusha
    4.53  
    4.54 +%if NullEntryCheck != 0
    4.55 +        xor     ax, ax
    4.56 +        or      al, [es:di]
    4.57 +        je      FindNameFailed
    4.58 + %define curtag al 
    4.59 + %define chktag al 
    4.60 +%else
    4.61 + %define curtag byte [es:di] 
    4.62 + %define chktag ax
    4.63 +%endif
    4.64 +        cmp     curtag, 0c0h            ; EXFAT_ENTRY_FILE_INFO ?
    4.65 +        jne     NotFileInfo
    4.66 +
    4.67 +        mov     bl, 32
    4.68 +CopyInfo:
    4.69 +        mov     [bx], al
    4.70 +        dec     bx
    4.71 +        mov     al, [es:di+bx]
    4.72 +        jnz     CopyInfo                ; keep BIOS boot drive number
    4.73 +
    4.74 +NotFileInfo:
    4.75  %if CheckAttrib != 0
    4.76  Attributes      equ  0Bh                ; 1 byte
    4.77 -        cmp     byte [es:di], 85h       ; EXFAT_ENTRY_FILE ?
    4.78 +        cmp     curtag, 85h             ; EXFAT_ENTRY_FILE ?
    4.79          jne     NotEntryFile
    4.80          mov     al, [es:di+Attributes]
    4.81          mov     [ProgramName+NameLength+1], al
    4.82  NotEntryFile:
    4.83  %endif
    4.84 -%if NullEntryCheck != 0
    4.85 -        xor     ax, ax
    4.86 -        or      al, [es:di]
    4.87 -        je      FindNameFailed
    4.88 -        cmp     al, 0c0h                ; EXFAT_ENTRY_FILE_INFO ?
    4.89 -%else
    4.90 -        cmp     byte [es:di], 0c0h      ; EXFAT_ENTRY_FILE_INFO ?
    4.91 -%endif
    4.92 -        jne     NotFileInfo
    4.93 -
    4.94 -        mov     bl, 31
    4.95 -CopyInfo:
    4.96 -        mov     al, [es:di+bx]
    4.97 -        mov     [bx], al
    4.98 -        dec     bx
    4.99 -        jnz     CopyInfo                ; keep BIOS boot drive number
   4.100 -
   4.101 -NotFileInfo:
   4.102 -%if NullEntryCheck != 0
   4.103 -        mov     al, 0c1h                ; EXFAT_ENTRY_FILE_NAME ?
   4.104 -%else
   4.105 -        mov     ax, 0c1h                ; EXFAT_ENTRY_FILE_NAME ?
   4.106 -%endif
   4.107 +        mov     chktag, 0c1h            ; EXFAT_ENTRY_FILE_NAME ?
   4.108          mov     cx, NameLength+1
   4.109          mov     si, ProgramName         ; ds:si -> program name
   4.110  CheckName:
   4.111          scasw                           ; compare UTF-16
   4.112          lodsb                           ; with ASCII
   4.113          loope   CheckName
   4.114 -%if CheckAttrib != 0
   4.115  VolumeLabel     equ  8
   4.116  SubDirectory    equ  10h
   4.117 +%if CheckAttrib != 0
   4.118          jnz     SkipFindName
   4.119          test    byte [si], VolumeLabel+SubDirectory
   4.120  SkipFindName:
   4.121 @@ -370,6 +386,9 @@
   4.122  ;; All done, transfer control to the program now ;;
   4.123  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   4.124          retf
   4.125 +%if CheckLBAsupport != 0
   4.126 +%endm
   4.127 +%endif
   4.128  
   4.129  ;;;;;;;;;;;;;;;;;;;;;;;;;;
   4.130  ;; Error Messaging Code ;;
   4.131 @@ -385,11 +404,11 @@
   4.132          int     10h
   4.133          cmp     al, "."
   4.134          jne     PutStr
   4.135 -
   4.136 +%if WaitForKey != 0
   4.137          cbw
   4.138          int     16h                     ; wait for a key...
   4.139          int     19h                     ; bootstrap
   4.140 -
   4.141 +%endif
   4.142  Stop:
   4.143          hlt
   4.144          jmp     short Stop
   4.145 @@ -398,6 +417,7 @@
   4.146  ;; Reads a exFAT cluster         ;;
   4.147  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   4.148  ;; Input:  EDX:EAX = LBA         ;;
   4.149 +;;         EBX     = 0           ;;
   4.150  ;;         CX      = sector cnt  ;;
   4.151  ;;         ESI     = cluster no  ;;
   4.152  ;;         ES:0   -> buffer adrs ;;
   4.153 @@ -406,7 +426,6 @@
   4.154  ;;         ESI     = cluster no  ;;
   4.155  ;;         EBP     = bytes/sector;;
   4.156  ;; Keep:   EDI     = 0           ;;
   4.157 -;;         EBX     = 0           ;;
   4.158  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   4.159  
   4.160  ReadCluster:
   4.161 @@ -418,9 +437,11 @@
   4.162          mul     ebx                             ; edx:eax = 0
   4.163  %if SectorOf512Bytes != 0
   4.164          mov     al, 128
   4.165 +%define SectorPerClusterBits    [bx(bpbSectorPerClusterBits)]
   4.166  %else
   4.167          mov     ah, 40h
   4.168          mov     cx, [bx(bpbSectorSizeBits)]
   4.169 +%define SectorPerClusterBits    ch
   4.170          rol     ax, cl                          ; eax=# of exFAT entries per sector
   4.171  %endif
   4.172          lea     edi, [esi-2]                    ; edi=cluster #-2
   4.173 @@ -431,15 +452,17 @@
   4.174  
   4.175          cdq
   4.176          add     eax, [bx(bpbFatSectorStart)]    ; sector # relative to exFAT
   4.177 +%if TfatSupport
   4.178 +        test    byte [bx(bpbVolumeStateFlags)], 1
   4.179 +        jz      UseFat0
   4.180 +        add     eax, [bx(bpbFatSectorCount)]
   4.181 +UseFat0:
   4.182 +%endif
   4.183          call    ReadSectorFAT                   ; read 1 exFAT sector, keep edx=0, set C
   4.184  
   4.185          mov     esi, [es:si]                    ; esi=next cluster #
   4.186  
   4.187 -%if SectorOf512Bytes != 0
   4.188 -        mov     dl, [bx(bpbSectorPerClusterBits)]
   4.189 -%else
   4.190 -        mov     dl, ch
   4.191 -%endif
   4.192 +        mov     dl, SectorPerClusterBits
   4.193          xor     ecx, ecx
   4.194          bts     ecx, edx                        ; 10000h max (32MB cluster)
   4.195          xchg    eax, edi                        ; get cluster #-2
   4.196 @@ -455,12 +478,12 @@
   4.197  ;; Reads a sector using BIOS Int 13h ;;
   4.198  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   4.199  ;; Input:  EDX:EAX = LBA             ;;
   4.200 +;;         EBX     = 0               ;;
   4.201  ;;         ES:0   -> buffer address  ;;
   4.202  ;; Output: EBP     = bytes/sector    ;;
   4.203  ;; Keep:   ESI     = cluster         ;;
   4.204  ;;         EDI     = FAT sector or 0 ;;
   4.205  ;;         ECX     = sector count    ;;
   4.206 -;;         EBX     = 0               ;;
   4.207  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   4.208  
   4.209  %if SectorOf512Bytes != 0
   4.210 @@ -503,6 +526,7 @@
   4.211   %endif
   4.212  %endif
   4.213  
   4.214 +ReadError:
   4.215          call    Error
   4.216          db      "Read error."
   4.217  
   4.218 @@ -515,6 +539,10 @@
   4.219          popad                           ; real registers
   4.220          ret
   4.221  
   4.222 +%if CheckLBAsupport != 0
   4.223 +        BootFileName
   4.224 +%endif
   4.225 +
   4.226  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   4.227  ;; Fill free space with zeroes ;;
   4.228  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     5.1 --- a/BootProg/stuff/bootprog.sh	Sat May 06 08:42:03 2023 +0000
     5.2 +++ b/BootProg/stuff/bootprog.sh	Thu May 11 15:58:49 2023 +0000
     5.3 @@ -19,15 +19,15 @@
     5.4  	esac | $w=499 count=11
     5.5  	case "$f" in
     5.6  	*32)	$w=$(($(od -An -j50 -N2 -d $1)<<9)) if=$1 count=$s;;
     5.7 -	E*)	$r=11 bs=1b | od -vAn -tu1 -w1 - | LANG=C awk 'BEGIN { a=0;i=-1;m=0xFFFFFFFE }
     5.8 -{ if (++i!=106 && i!=107 && i!=112) a=or(and(lshift(a,31),m),and(rshift(a,1),m/2))+$1 }
     5.9 +	E*)	$r=11 bs=1b | od -vAn -tu1 -w1 - | LANG=C awk '
    5.10 +{ if (++i!=107 && i!=108 && i!=113) a=or(lshift(and(a,1),31),$1+a/2) }
    5.11  END { b=a/256;c=b/256; for (;i>0;i-=44) printf "%c%c%c%c",a%256,b%256,c%256,(c/256)%256 }' | $w=5632
    5.12  	esac
    5.13  	exit 0
    5.14  done<<S 2>/dev/null
    5.15  54	59	0	512	FAT12
    5.16 -54	59	0	512	FAT16
    5.17 -3	113	512	512	EXFAT
    5.18 -82	87	1024	FAT32SZ	FAT32
    5.19 +54	59	512	512	FAT16
    5.20 +3	113	1024	512	EXFAT
    5.21 +82	87	1536	FAT32SZ	FAT32
    5.22  S
    5.23  exit 1
     6.1 --- a/libjreen-dev/receipt	Sat May 06 08:42:03 2023 +0000
     6.2 +++ b/libjreen-dev/receipt	Thu May 11 15:58:49 2023 +0000
     6.3 @@ -6,7 +6,7 @@
     6.4  SHORT_DESC="Qt jabber library, written in C++ - development files."
     6.5  MAINTAINER="devl547@gmail.com"
     6.6  LICENSE="GPL2"
     6.7 -WEB_SITE="http://qutim.org/jreen"
     6.8 +WEB_SITE="https://github.com/euroelessar/jreen"
     6.9  
    6.10  DEPENDS="libjreen pkg-config"
    6.11  WANTED="libjreen"
     7.1 --- a/libjreen/receipt	Sat May 06 08:42:03 2023 +0000
     7.2 +++ b/libjreen/receipt	Thu May 11 15:58:49 2023 +0000
     7.3 @@ -6,10 +6,10 @@
     7.4  SHORT_DESC="Qt jabber library, written in C++."
     7.5  MAINTAINER="devl547@gmail.com"
     7.6  LICENSE="GPL2"
     7.7 -WEB_SITE="http://qutim.org/jreen"
     7.8 +WEB_SITE="https://github.com/euroelessar/jreen"
     7.9  
    7.10 -TARBALL="$PACKAGE-$VERSION.tar.bz2"
    7.11 -WGET_URL="http://qutim.org/dwnl/73/$TARBALL"
    7.12 +TARBALL="$PACKAGE-$VERSION.tar.gz"
    7.13 +WGET_URL="https://github.com/euroelessar/jreen/archive/refs/tags/v$VERSION.tar.gz"
    7.14  
    7.15  DEPENDS="libidn libQtCore libQtNetwork qca"
    7.16  BUILD_DEPENDS="cmake gsasl-dev libidn-dev qca-dev qmake Qt4-dev"
    7.17 @@ -17,8 +17,8 @@
    7.18  # What is the latest version available today?
    7.19  current_version()
    7.20  {
    7.21 -	wget -O - http://qutim.org/jreen 2>/dev/null | \
    7.22 -	sed "/latest/d;/$PACKAGE-[0-9]/!d;/tar/!d;s|.*$PACKAGE-\\(.*\\).tar.*|\\1|" | sort -Vr | sed q
    7.23 +	wget -O - $WEB_SITE/tags 2>/dev/null | \
    7.24 +	sed '/archive.*tar/!d;s|.*/v*\(.*\).tar.*|\1|;q'
    7.25  }
    7.26  
    7.27  # Rules to configure and make the package.
     8.1 --- a/memtest-efi32/receipt	Sat May 06 08:42:03 2023 +0000
     8.2 +++ b/memtest-efi32/receipt	Thu May 11 15:58:49 2023 +0000
     8.3 @@ -1,7 +1,7 @@
     8.4  # SliTaz package receipt.
     8.5  
     8.6  PACKAGE="memtest-efi32"
     8.7 -VERSION="6.10"
     8.8 +VERSION="6.20"
     8.9  CATEGORY="base-system"
    8.10  SHORT_DESC="Memory failures detection tool."
    8.11  MAINTAINER="pascal.bellard@slitaz.org"
     9.1 --- a/memtest-efi64/receipt	Sat May 06 08:42:03 2023 +0000
     9.2 +++ b/memtest-efi64/receipt	Thu May 11 15:58:49 2023 +0000
     9.3 @@ -1,7 +1,7 @@
     9.4  # SliTaz package receipt.
     9.5  
     9.6  PACKAGE="memtest-efi64"
     9.7 -VERSION="6.10"
     9.8 +VERSION="6.20"
     9.9  CATEGORY="base-system"
    9.10  SHORT_DESC="Memory failures detection tool."
    9.11  MAINTAINER="pascal.bellard@slitaz.org"
    10.1 --- a/memtest/receipt	Sat May 06 08:42:03 2023 +0000
    10.2 +++ b/memtest/receipt	Thu May 11 15:58:49 2023 +0000
    10.3 @@ -1,7 +1,7 @@
    10.4  # SliTaz package receipt.
    10.5  
    10.6  PACKAGE="memtest"
    10.7 -VERSION="6.10"
    10.8 +VERSION="6.20"
    10.9  CATEGORY="base-system"
   10.10  SHORT_DESC="Memory failures detection tool."
   10.11  MAINTAINER="pascal.bellard@slitaz.org"
   10.12 @@ -74,7 +74,7 @@
   10.13  	objdump -t boot/startup.o | \
   10.14  	awk '/patch/ { print "sed -i \"s|" $5 "|0x" $1 "|\" ../boot/setup.S" }' | sh
   10.15  	make memtest.bin
   10.16 -	tune_lzma memtest.bin 195,mf=bt2 LC 3 PB 2
   10.17 +	tune_lzma memtest.bin 255,mf=bt2 LC 3 PB 2
   10.18  } 
   10.19  
   10.20  
    11.1 --- a/memtest/stuff/memtest86+-6-386.patch	Sat May 06 08:42:03 2023 +0000
    11.2 +++ b/memtest/stuff/memtest86+-6-386.patch	Thu May 11 15:58:49 2023 +0000
    11.3 @@ -1,17 +1,17 @@
    11.4  --- system/cpuinfo.c
    11.5  +++ system/cpuinfo.c
    11.6 -@@ -848,6 +848,12 @@
    11.7 +@@ -846,6 +846,12 @@
    11.8         default:
    11.9           // Unknown processor - make a guess at the family.
   11.10           switch (cpuid_info.version.family) {
   11.11  +          case 3:
   11.12 -+            cpu_model = "386";
   11.13 ++            cpu_model = "386-class CPU (unknown)";
   11.14  +            break;
   11.15  +          case 4:
   11.16 -+            cpu_model = "486";
   11.17 ++            cpu_model = "486-class CPU (unknown)";
   11.18  +            break;
   11.19             case 5:
   11.20 -             cpu_model = "586";
   11.21 +             cpu_model = "586-class CPU (unknown)";
   11.22               break;
   11.23  --- system/cpuid.c
   11.24  +++ system/cpuid.c
   11.25 @@ -165,7 +165,7 @@
   11.26       // Nothing before this should access the boot parameters, in case they are located above 4GB.
   11.27       // This is the first region we map, so it is guaranteed not to fail.
   11.28       boot_params_addr = map_region(boot_params_addr, sizeof(boot_params_t), true);
   11.29 -@@ -282,8 +286,8 @@
   11.30 +@@ -284,8 +288,8 @@
   11.31   
   11.32       size_t program_size = (_stacks - _start) + BSP_STACK_SIZE + (num_enabled_cpus - 1) * AP_STACK_SIZE;
   11.33   
   11.34 @@ -176,7 +176,7 @@
   11.35   
   11.36       trace(0, "program size %ikB", (int)(program_size / 1024));
   11.37       trace(0, " low_load_addr %0*x", 2*sizeof(uintptr_t),  low_load_addr);
   11.38 -@@ -420,7 +424,7 @@
   11.39 +@@ -422,7 +426,7 @@
   11.40                   // Relocation may disrupt the test.
   11.41                   window_num = 1;
   11.42               }
   11.43 @@ -185,7 +185,7 @@
   11.44                   // Avoid unnecessary relocation.
   11.45                   window_num = 1;
   11.46               }
   11.47 -@@ -443,10 +447,10 @@
   11.48 +@@ -445,10 +449,10 @@
   11.49               switch (window_num) {
   11.50                 case 0:
   11.51                   window_start = 0;
    12.1 --- a/memtest64/receipt	Sat May 06 08:42:03 2023 +0000
    12.2 +++ b/memtest64/receipt	Thu May 11 15:58:49 2023 +0000
    12.3 @@ -1,7 +1,7 @@
    12.4  # SliTaz package receipt.
    12.5  
    12.6  PACKAGE="memtest64"
    12.7 -VERSION="6.10"
    12.8 +VERSION="6.20"
    12.9  CATEGORY="base-system"
   12.10  SHORT_DESC="Memory failures detection tool."
   12.11  MAINTAINER="pascal.bellard@slitaz.org"
   12.12 @@ -65,7 +65,8 @@
   12.13  # Rules to configure and make the package.
   12.14  compile_rules()
   12.15  {
   12.16 -	tune_lzma memtest64.bin 55,mf=bt2 LC 3 PB 2
   12.17 +	tune_lzma memtest64.bin 144,mf=bt3 LC 3 PB 2
   12.18 +
   12.19  } 
   12.20  
   12.21  # Rules to gen a SliTaz package suitable for Tazpkg.
    13.1 --- a/musl-libc-dev/receipt	Sat May 06 08:42:03 2023 +0000
    13.2 +++ b/musl-libc-dev/receipt	Thu May 11 15:58:49 2023 +0000
    13.3 @@ -6,7 +6,7 @@
    13.4  SHORT_DESC="A lightweight, fast, simple, free libc - development files."
    13.5  MAINTAINER="pascal.bellard@slitaz.org"
    13.6  LICENSE="MIT"
    13.7 -WEB_SITE="https://www.musl-libc.org/"
    13.8 +WEB_SITE="https://musl.libc.org/"
    13.9  
   13.10  DEPENDS="musl-libc"
   13.11  WANTED="musl-libc"
    14.1 --- a/musl-libc/receipt	Sat May 06 08:42:03 2023 +0000
    14.2 +++ b/musl-libc/receipt	Thu May 11 15:58:49 2023 +0000
    14.3 @@ -6,7 +6,7 @@
    14.4  SHORT_DESC="A lightweight, fast, simple, free libc."
    14.5  MAINTAINER="pascal.bellard@slitaz.org"
    14.6  LICENSE="MIT"
    14.7 -WEB_SITE="https://www.musl-libc.org/"
    14.8 +WEB_SITE="https://musl.libc.org/"
    14.9  REPOLOGY="musl"
   14.10  
   14.11  SOURCE="musl"
    15.1 --- a/urbackup-server/receipt	Sat May 06 08:42:03 2023 +0000
    15.2 +++ b/urbackup-server/receipt	Thu May 11 15:58:49 2023 +0000
    15.3 @@ -1,7 +1,7 @@
    15.4  # SliTaz package receipt.
    15.5  
    15.6  PACKAGE="urbackup-server"
    15.7 -VERSION="2.4.12"
    15.8 +VERSION="2.4.15"
    15.9  CATEGORY="network"
   15.10  TAGS="backup"
   15.11  SHORT_DESC="An easy to setup Open Source client-server backup system."
    16.1 --- a/usbutils/receipt	Sat May 06 08:42:03 2023 +0000
    16.2 +++ b/usbutils/receipt	Thu May 11 15:58:49 2023 +0000
    16.3 @@ -8,7 +8,7 @@
    16.4  LICENSE="GPL2"
    16.5  TARBALL="$PACKAGE-$VERSION.tar.xz"
    16.6  WEB_SITE="https://linux-usb.sourceforge.net/"
    16.7 -WGET_URL="http://deb.debian.org/debian/pool/main/u/usbutils/usbutils_$VERSION.orig.tar.xz"
    16.8 +WGET_URL="https://mirrors.edge.kernel.org/pub/linux/utils/usb/usbutils/$TARBALL"
    16.9  HOST_ARCH="i486 arm"
   16.10  
   16.11  TAGS="usb"
    17.1 --- a/warmux/receipt	Sat May 06 08:42:03 2023 +0000
    17.2 +++ b/warmux/receipt	Thu May 11 15:58:49 2023 +0000
    17.3 @@ -1,14 +1,15 @@
    17.4  # SliTaz package receipt.
    17.5  
    17.6  PACKAGE="warmux"
    17.7 +GITHASH="01f2d0071011bae5785d7a8d4502db4370c7de5a" # 20191201
    17.8  VERSION="11.04.1"
    17.9  CATEGORY="games"
   17.10  SHORT_DESC="Warmux game"
   17.11  MAINTAINER="slaxemulator@gmail.com"
   17.12  LICENSE="GPL2"
   17.13 -WEB_SITE="https://web.archive.org/web/20221203051925/https://www.warmux.org/"
   17.14 -TARBALL="$PACKAGE-$VERSION.tar.bz2"
   17.15 -WGET_URL="$WEB_SITE$TARBALL"
   17.16 +WEB_SITE="https://github.com/fluxer/warmux"
   17.17 +TARBALL="$PACKAGE-$VERSION.zip"
   17.18 +WGET_URL="https://github.com/fluxer/warmux/archive/$GITHASH.zip"
   17.19  PROVIDE="wormux"
   17.20  SUGGESTED="warmux-music"
   17.21  
   17.22 @@ -16,18 +17,20 @@
   17.23  curl freetype libxml2 libxml++ gcc-lib-base gettext-base"
   17.24  BUILD_DEPENDS="libsdl-dev libsdl-gfx-dev libsdl-image-dev libsdl-mixer-dev \
   17.25  libsdl-net-dev libsdl-ttf-dev curl-dev freetype-dev libxml2-dev libxml++-dev \
   17.26 -pkg-config"
   17.27 +automake pkg-config"
   17.28  
   17.29  # What is the latest version available today?
   17.30  current_version()
   17.31  {
   17.32 -	wget -O - https://www.warmux.org/ 2>/dev/null | \
   17.33 -	sed "/latest/d;/$PACKAGE-[0-9]/!d;/tar/!d;s|.*$PACKAGE-\\(.*\\).tar.*|\\1|" | sort -Vr | sed q
   17.34 +	wget -O - $WEB_SITE/commits/master 2>/dev/null | \
   17.35 +	sed '/Commits on/!d;s|.*on |"|;s|<.*|"|;q' | xargs date +%Y -d
   17.36  }
   17.37  
   17.38  # Rules to configure and make the package.
   17.39  compile_rules()
   17.40  {
   17.41 +	./autogen.sh
   17.42 +
   17.43  	sed -i 's/test -z "$(pkgdatadir)"/test -d "$(pkgdatadir)"/' data/Makefile.in
   17.44  	sed -i 's|if USE_X11|if SKIP_USE_X11|' src/tool/copynpaste.cpp
   17.45  	sed -i "s|test -d \"\\\$(pkgdatadir|test -d \"\\\$(DESTDIR)\\\$(pkgdatadir|" data/Makefile*