Anachro-mputing blog

retro and not-so-retro computing topics
Related links:
  • homebrew games, demos, and misc software
  • Old links
  • buy my rad t-shirts on Zazzle shirt 1 shirt 2

  • Updates

    2018 Dec 10 IMGTOOL version 0.94

    New version of my bitmap editor IMGTOOL. Has a lot of loose ends at the moment, but also many new features like tile/pixel editor modes. Time for a release! Includes FreeBASIC source and DOS/Win32 executables. Download the complete archive.


    2018 Dec 4 NOWUT compiler released

    This is the first release of the NOWUT cross compiler for the low-level NOWUT language. It runs on Win32 and targets x86, Amiga 68K, X68000, Sega 32x and Saturn. Check the documentation. Download the complete archive.

    And be sure to get Go Link from Go Tools website.



    2018 Dec 1 delayed immediates

    RISC CPUs sometimes employ a delayed branch, where the instruction immediately after the branch instruction is always executed, hence avoiding some disruption of the pipeline.

    RISC CPUs also tend not to allow immediate data (data following the opcode) to be used as operands. This is regrettable from a programming standpoint, and seems like it would be a mixed-bag from a performance standpoint, since a memory access has to occur somewhere else to load that data. So... what if, like a delayed branch, we had delayed immediate data? You could load a DWORD into a register with one instruction, but the data could go further down the stream.

    To be more specific, imagine that your CPU used a general purpose register as the program counter (eg. R15), and that you had a post-increment register-indirect addressing mode available to commonly used instructions. Loading from (R15+) would be the same thing as loading immediate data conceptually. You just have to assume that R15 was pointing at the location following the opcode, and that the post-increment would cause it to skip over the data before the next instruction fetch. Those assumptions wouldn't hold on a pipelined CPU, but perhaps the "delayed immediate" would make the situation workable, by lining up the data load and the "skip" with the proper pipeline stage of the opcode that needed it.


    2018 Apr 14 video card framebuffer memory bandwidth

    From my post on VOGONS:

    486DX4-100, Trident 8900 ISA - 5.4MB/s
    486DX4-100, Trident 9440 VLB - 31MB/s
    Pentium II-350, i440BX, Trident 9680 PCI - 38MB/s
    Pentium II-350, i440BX, Trident 9680 PCI - 62MB/s (write combining enabled)
    Pentium III-600e, i440BX, GeForce FX5200 AGP - 47MB/s
    Pentium III-600e, i440BX, GeForce FX5200 AGP - 240MB/s (write combining enabled)
    Pentium M-1200, i855PM, Radeon 7500 AGP - 50MB/s
    Pentium M-1200, i855PM, Radeon 7500 AGP - 169MB/s (write combining enabled)
    Athlon XP, ViaKT333, GeForce FX5700 AGP - 83MB/s
    Athlon XP, ViaKT333, GeForce FX5700 AGP - 192MB/s (write combining enabled)
    Phenom II, AMD770, Radeon 5670 PCIe - 189MB/s
    Phenom II, AMD770, Radeon 5670 PCIe - 2500MB/s (write combining enabled)
    

    These tests use the REP STOSD instruction to fill video memory with a constant. My guess is that the higher AGP 4X/8X speeds aren't enabled under DOS, since I haven't seen any AGP system beat this 440 board. (The Pentium M and Athlon are AGP 4X)


    2018 Mar 18 SuperPi

    From my post on VOGONS:

    Athlon II X2 260 (3.2GHz, DDR2-800 CL5) - 25s
    Athlon X2 7850 (2.8GHz, DDR2-800 CL5) - 28s
    Core2 SU9600 (1.6GHz, 1.8GHz turbo, DDR2-667) - 34s
    Athlon X2 4850e (2.5GHz, DDR2-800 CL5) - 36s
    Turion X2 1.6GHz (DDR2-667) - 57s
    Athlon XP 2800+ (2083MHz, KT333, DDR-333 CL3) - 1m
    Athlon XP 2500+ (1833MHz, KT333, DDR-333 CL2) - 1m1s
    Sempron 2300+ (1583MHz, KT333, DDR-333 CL2) - 1m15s
    Pentium M 1MB 1.0GHz (i855pm, DDR-266) - 1m25s
    Pentium M 2MB 1.2GHz (i855pm, DDR-266) - 1m4s
    Pentium M 2MB 1.2GHz (i915gm, DDR2-400) - 1m1s
    Pentium M 1MB 1.7GHz (i855pm, DDR-333) - 56s
    Pentium M 2MB 1.6GHz (i855pm, DDR-333) - 53s
    Pentium 3 933MHz (PC-133) - 2m17s
    Pentium 3M 800 (i830gm, PC-133 CL2) - 2m35s
    Pentium 3M 1333MHz (i830gm, PC-133 CL3) - 2m20s
    Pentium 3M 1333MHz (i830gm, PC-133 CL2) - 2m06s
    Pentium 3M 1333MHz (i830gm, PC-133 CL2) - 1m57s (screen mode at 800x600x16 instead of 1024x768x32)
    Pentium 3 600e (PC-100) - 3m21s
    Pentium MMX 166 (256KB L2) - 15m2s
    


    2018 Jan 16 some old 3DMark2001SE benchmarks
    Socket 5 (Packard Bell C 115, i430VX chipset, Win98)
    Pentium MMX Overdrive 200, GeForce 2MX 200 PCI = 290 3dmarks
    
    Socket 7 (Shuttle HOT-591p, VIA MVP3 chipset, 512KB cache, Win98)
    IDT Winchip 200, Radeon 9200 = 892 3dmarks
    Pentium 166 at 188, Radeon 9200 = 1071 3dmarks
    Cyrix M2 PR400 (285MHz), Radeon 9200 = 1535 3dmarks
    K6-2 380, Radeon 9200 = 1891 3dmarks
    K6-3 380, Radeon 9200 = 2304 3dmarks
    K6-3 380, GeForce 2 GTS = 683 3dmarks
    K6-3 380, Matrox G250 (800x600) = 308 3dmarks
    
    Slot 1 (Intel SE440BX2, PC100 CL2 SDRAM, Win98)
    Pentium 3 600e, SiS 6326 (640x480) = 203 3dmarks
    Pentium 3 600e, S3 Savage 4 (16-bit color) = 870 3dmarks
    Pentium 3 600e, nVidia TNT (800x600) = 976 3dmarks
    Pentium 3 600e, S3 Savage 2000 (16-bit color) = 1098 3dmarks
    Pentium 3 600e, Voodoo 3 3000 (16-bit color, unofficial drivers) = 1243 3dmarks
    Pentium 3 600e, GeForce 4MX 420 = 2495 3dmarks
    Pentium 3 600e, GeForce FX 5200 64-bit = 3100 3dmarks
    Pentium 3 600e, GeForce FX 5700LE = 4438 3dmarks
    Pentium 3 550, GeForce FX 5200 64-bit = 2785 3dmarks
    Pentium 3 550, Radeon 9200 = 3530 3dmarks
    Pentium 2 350, Radeon 9200 = 2643 3dmarks
    
    Socket 370 (i815 chipset, Win98/2k)
    Celeron 533, GeForce 2 GTS = 1381 3dmarks
    Pentium 3 733, nVidia TNT (800x600) = 1011 3dmarks
    Pentium 3 733, nVidia TNT2 M64 (800x600) = 1162 3dmarks
    Pentium 3 733, Matrox G450 (800x600)= 1150 3dmarks
    Pentium 3 733, Matrox G450 = 896 3dmarks
    Pentium 3 933, i815 integrated (16-bit color) = 660 3dmarks
    Pentium 3 933, GeForce 2MX 200 = 1533 3dmarks
    Pentium 3 933, GeForce 4MX 420 = 3213 3dmarks
    Pentium 3 933, GeForce 2 GTS = 3106 3dmarks
    Pentium 3 933, GeForce FX 5200 64-bit = 3794 3dmarks
    Pentium 3 933, Radeon 9200 = 5059 3dmarks
    Pentium 3 933, GeForce FX 5700LE = 5230 3dmarks
    
    Socket A (Biostar M7VIP-pro, VIA KT333 chipset, DDR333, Win2k)
    Sempron 2300+ (1583MHz), nVidia TNT2 M64 (800x600) = 1884 3dmarks
    Sempron 2300+ (1583MHz), GeForce 2MX = 2913 3dmarks
    Sempron 2300+ (1583MHz), GeForce 4MX 420 = 3450 3dmarks
    Sempron 2300+ (1583MHz), GeForce 4MX 420 195MHz RAM = 3900 3dmarks
    Sempron 2300+ (1583MHz), GeForce 2 GTS = 4171 3dmarks
    Sempron 2300+ (1583MHz), Radeon 9200 = 6666 3dmarks
    Sempron 2300+ (1583MHz), GeForce 6200 = 7291 3dmarks
    Sempron 2300+ (1583MHz), GeForce FX 5700LE = 7790 3dmarks
    Athlon XP 2500+ (1833MHz), GeForce FX 5200 64-bit = 4884 3dmarks
    Athlon XP 2500+ (1833MHz), GeForce FX 5700LE = 8425 3dmarks
    Athlon XP 2500+ (1833MHz), GeForce FX 5700LE 20% overclock = 9280 3dmarks
    
    Socket A (nForce2 chipset, Win2k)
    Athlon XP 2800+ (2083MHz), GeForce 4MX integrated = 3683 3dmarks
    Athlon XP 2800+ (2083MHz), GeForce FX 5700LE = 8977 3dmarks
    Athlon XP 2800+ (2083MHz), Quadro FX 1000 = 10771 3dmarks
    
    Socket 479 (Itox mini-ITX board, i855GM chipset, DDR333, Win2k)
    Pentium M 2MB 1.6GHz, i855 integrated = 2500 3dmarks
    Pentium M 2MB 1.6GHz, GeForce 4MX PCI = 4080 3dmarks
    Pentium M 2MB 1.6GHz, GeForce 8400GS PCI = 9200 3dmarks
    
    Socket AM2 (nForce 430 chipset, DDR2-800, Win2k)
    Athlon X2 4850e (2.5GHz), GeForce 6150 integrated = 5481 3dmarks
    Athlon X2 4850e (2.5GHz), Quadro NVS 285 = 9125 3dmarks
    Athlon X2 4850e (2.5GHz), Radeon X1300 64-bit = 10291 3dmarks
    Athlon X2 4850e (2.5GHz), Quadro NVS 290 = 13944 3dmarks
    Athlon X2 4850e (2.5GHz), GeForce 210 520/600 = 17900 3dmarks 
    Athlon X2 4850e (2.5GHz), GeForce 9500 DDR2 450/400 = 19887 3dmarks
    Athlon X2 4850e (2.5GHz), GeForce GT220 625/700 = 21626 3dmarks
    
    Socket AM2+ (Biostar A770-A2+, AMD 770 chipset, DDR2-800, Win2k)
    Athlon X2 4850e (2.5GHz), GeForce 7600GT = 23001 3dmarks
    Athlon X2 7850 (2.8GHz), GeForce 7600GT = 29945 3dmarks
    Athlon II X2 260 (3.2GHz), GeForce 7600GT = 29055 3dmarks
    Athlon II X2 260 (3.2GHz), Radeon HD 4550 600/800 = 24945 3dmarks
    Athlon II X2 260 (3.2GHz), GeForce 9500 DDR2 450/400 = 25815 3dmarks
    Athlon II X2 260 (3.2GHz), Radeon HD 7510 650/700 = 31000 3dmarks
    Athlon II X2 260 (3.2GHz), Radeon HD 5570 650/700 = 32828 3dmarks
    Athlon II X2 260 (3.2GHz), GeForce GT220 625/700 = 32602 3dmarks
    Athlon II X2 260 (3.2GHz), GeForce GT240 550/1000 = 32689 3dmarks
    Athlon II X2 260 (3.2GHz), Radeon HD 3850 = 34945 3dmarks
    
    Laptops (Win2k/XP)
    Dell Lattitude C400, Pentium 3M 1.33GHz, i830 integrated = 1080 3dmarks
    Fujitsu Lifebook B6110D, Pentium M 2MB 1.2GHz, i915 integrated = 3565 3dmarks
    NEC Versa S820, Pentium M 1MB 1.0GHz, Mobility Radeon 7500 64-bit = 4060 3dmarks
    Fujitsu Lifebook S series, Turion 64 X2 1.6GHz, DDR2-667, Radeon Xpress 200m = 4200 3dmarks
    Toshiba Portege M200, Pentium M 1MB 1.7GHz, GeForce Go 5200 64-bit = 4765 3dmarks
    Fujitsu Lifebook S series, Turion 64 2.0GHz, DDR2-800, Radeon Xpress 200m = 5300 3dmarks
    

    2017 Dec 20 power consumption
    Video cards at idle:
    GeForce 7600GT (560MHz) - 15W
    GeForce 9500 DDR2 (450MHz) - 10W
    
    cards that throttle to a lower speed at idle:
    GeForce 210 (135MHz) - 2.5W
    GeForce GT 220 (135MHz) - 7.5W
    GeForce GT 240 (135MHz) - 7.5W
    Radeon HD 3850 (300MHz) - 12W
    Radeon HD 4550 (110MHz) - 2.5W
    Radeon HD 5570 (400MHz) - 10W
    

    I also tested an IBM AT (286) loaded up with ISA memory board, VGA, sound, disk controller, and 3.5" harddisk. It drew 32W. A VLB 486DX4-100 system drew 28W.

    I test power consumption using a shunt resistor (10 ohms) in the AC supply and calculating the current and power draw from the voltage drop. (In the case of video cards, it's necessary to estimate and subtract out the power for the rest of the system.)


    2017 Oct 21 registry tweaks

    Use HDDs larger than 128GB in Windows 2000 by creating this DWORD registry key and setting the value to 1:

    HKLM\System\CurrentControlSet\Services\Atapi\Parameters\EnableBigLba 
    


    2017 Jan 17 GUI thought experiment