Table of Contents
IBM Thinkpad 240
- Intel Celeron 300 / 366 / 400MHz
- 64MB PC66 RAM onboard + 1 SODIMM socket (maximum of 192MB, or 230MB - with low density modules)
- Intel 440DX chipset
- NeoMagic 128XD 2MB video
- ESS Solo-1 sound
- 1x PCMCIA/Cardbus, 1x Parallel, 1x Serial, 1x IRDA, 1x USB, Line-in/Mic-in/Headphone out
- IBM Floppy connector
Bought December 2024 with a cracked screen (which I knew about). Fortunately it is all working, as tested via the VGA output:
LCD Parts ComparisonType A LCD
From the Thinkpad 240 Hardware Reference Manual:
There are two models of LCD panel used with the ThinkPad 240: LCD Type A and LCD Type B. Check the last five letters of the unit's serial number you are servicing to determine the model.
LCD Type A:
All ThinkPad 240 computers that have serial numbers whose last five alphanumeric characters are “00001” to “YZZZZ” are fitted with Type A panels.
Note: The number range is from 00001 to 99999, and the letter range is from AAAAA to YZZZZ.
LCD Type B:
All ThinkPad 240 computers that have serial numbers whose last five letters are “ZAAAA” to “ZZZZZ” are fitted with Type B panels.
The servicer need only check the fifth letter from the end.
If the fifth letter from the end is “0 — Y” (inclusive), then the LCD panel is Type A. If the fifth letter from the end is “Z”, then the LCD panel is Type B.
Part | Thinkpad 240 Type A LCD | Thinkpad 240 Type B LCD | Thinkpad 240X Type A LCD | Thinkpad 240X Type B LCD |
---|---|---|---|---|
Misc parts | 10L1955 | 10L1955 | | |
Bezel | 10L1941 | 10L1941 | | |
LCD unit | 05K9523 (Sharp LQ104S1LH11) | 05k9589 (Hitachi TX26D31VC1CAA) | | |
LCD Cable | 05K2859 | 27L0489 | | 27L0489 |
Hinge | 10L1943 | 10L1943 | 10L1943 | 10L1943 |
Rear cover | 10L1939 | 08K5820 | | 08K5820 |
Inverter | 10L1306 | 10L1431 | | 10L1431 |
tldr; The screens are not swappable between Type A and Type B systems. It is the entire lid that is needed.
Fixed Screen
Audio Setup
The ESS 1946 Solo-1E is a PCI sound chip that is Soundblaster Pro compatible. It is the last variation from ESS which contained their excellent ESFM technology for great-sounding FM music. Everything after this (both the ESS Allegro and ESS Maestro parts) sounds very poor in comparison.
This did take me a while to figure out, as I was trying to configure the ESS chip not to use the standard MPU401 port (since my Roland SCP-55 MIDI card also wanted it). I initially tried to disable the use of that port by the ESS drivers, but on doing so it would block access to the IBM keyboard! So, if you do have a Thinkpad 240 AND a Roland SCP-55, do not configure the ESS .ini file to disable MPU401, but instead move it to a different port (e.g. 0x300 instead of the standard 0x330>
You need the following three files to configure the ESS card fully:
- ESSOLO.SYS - loaded in config.sys
- ESSOLO.COM - loaded in autoexec.bat
- ESSOLO.INI - configuration file to set resources used
If the ESS card is configured correctly it should not leave behind a driver or TSR in memory (at least in real mode - YMMV with EMM386). Note that ESSOLO.INI is a binary file and needs to be edited with a hex editor
BYTE POSITION / MEANING 00: Sound Blaster IO (20 = 220, 40 = 240) 01: Sound Blaster IO (02 = 2xx (Cannot be changed)) 02: DMA (00, 01, 03) 03: DMA (Not used and don't change, default 00) 04: FM Address (Default is 88 for 388h (Cannot be changed)) 05: FM Address (Default is 03 for 388h (Cannot be changed)) 06: IRQ (05, 07, 09, 10 (0A), 11-14 (0B-0E, serialized IRQ only)) 07: IRQ (Not used and do not change, default 00) 08: Gameport Address (Default 01 for 201h (Cannot be changed))) 09: Gameport Address (Default 02 for 2xxh, change this to anything else to disable the Gameport) 0A: MPU401 Address (Default 30 for 330h, can be 00, 20, 30, 40) 0B: MPU401 Address (Default 03 for 3xxh, change this to anything else to disable MPU401) 0C: DDMA/TDMA/SB-Link (00 (DDMA), 01 (TDMA), 02 (SB-Link aka PC/PCI, set to this if using SB-Link connector on board)) 0D: DDMA/TDMA/SB-Link (Not used and don't change, default 00) 0E: Not Used 0F: Not Used
Note: definition of ESSOLO.INI taken from: https://www.vogons.org/viewtopic.php?t=79832
It seems that on the Thinkpad 240 IBM wired up the ESS Solo-1E in PC/PCI mode, which gives it the highest level of compatibility possible.
Drivers and config for my ESS configuration (Address: 0x220, Interrupt: 5, DMA: 1, MPU: 0x300, Game Port: Disabled, DMA mode: PC/PCI), of course you should also set a BLASTER line in autoexec.bat (e.g. SET BLASTER=A220 D1 I5 T4):
PCMCIA Setup
The PCMCIA chipset in the Thinkpad 240 is supported by Cardsoft drivers, and is available via from the IBM driver repository for the Thinkpad 240. The following entries are needed in config.sys to enable PCMCIA support (tested with several network cards as well as the Roland SCP-55):
DEVICEHIGH=C:\DRIVERS\CARDSOFT\CARDXTND.SYS DEVICEHIGH=C:\DRIVERS\CARDSOFT\SSCBTI.SYS /numada:1 /ada1skts:1 DEVICEHIGH=C:\DRIVERS\CARDSOFT\CS.SYS DEVICEHIGH=C:\DRIVERS\CARDSOFT\CSALLOC.EXE
Note that the Cardsoft installer adds extra entries (CS_APM.EXE and CARDID.SYS), but these do not appear to be necessary for normal operation and take up more precious base / upper memory.
Here is a copy of the IBM-distributed Cardsoft drivers for the Thinkpad 240, extracted from the floppy-disk .exe they use, and compressed into a simple .zip:
DOS Memory Management Optimisation
XMS / Real Mode
In non-EMS mode you can use UMBPCI.SYS to enable upper memory blocks to enable device driver loading, since the 440DX/ZX chipset of the Thinkpad 240 is well supported by those drivers.
DEVICE=C:\DRIVERS\UMBPCI\UMBPCI.SYS /i=cc00-d7ff /i=dc00-dfff
The inclusion ranges above map to the free areas that MSD shows as not being used. CheckIt shows other areas as potentially being free, but this is not the case once all of the PCMCIA drivers are loaded. The best way to test this is to boot without any memory manager loaded (neither HIMEM/EM386), but with all of the device drivers loaded… then run UMBCHK from UMBPCI and/or MSD… it should show that the above ranges are effectively the only ones available. The in-use areas include:
a000 - b000 : 64KB VGA b000 - b800 : 32KB MDA b800 - c000 : 32KB CGA c000 - ca00 : 40KB Neomagic video bios ca00 - e000 : 88KB NOTHING (but there IS actually something here!!! Do not trust CheckIt!) e000 - e800 : 32KB Unknown ROM e800 - ea00 : 8KB NOTHING ea00 - 0000 : 88KB System ROM
SO my config.sys becomes:
DEVICE=C:\TOOLS\JEMM386\himemx.exe DEVICE=C:\DRIVERS\UMBPCI\UMBPCI.SYS /i=cc00-d7ff /i=dc00-dfff DEVICEHIGH=C:\DRIVERS\CARDSOFT\CARDXTND.SYS DEVICEHIGH=C:\DRIVERS\CARDSOFT\SSCBTI.SYS /numada:1 /ada1skts:1 DEVICEHIGH=C:\DRIVERS\CARDSOFT\CS.SYS DEVICEHIGH=C:\DRIVERS\CARDSOFT\CSALLOC.EXE
Sadly, for some reason I am unable to loaded all of the PCMCIA drivers high (despite enough UMB to do so). So I am left with 594KB of base memory, rather than the 620KB or so which would be available if all of the PCMCIA drivers were able to be mapped high.
EMS Mode
The lack of space in upper memory becomes more of an issue if you want to run EMM386 (or JEMM386 or similar)… since there isn't enough free space with all of the option ROMs to set the 64KB EMS page frame.
Benchmarks
Test | Base Config | +FASTVID |
---|---|---|
3DBench 1.0c | 205.8 fps | 362.5 fps |
Chris 3D Bench | 195.6 fps | 238.8 fps |
Chris 3D Bench SVGA | Mode not supported | Mode not supported |
PC Player VGA | 80.4 fps | 86.3 fps |
PC Player SVGA | 21.7 fps | 36.5 fps |
Doom (low detail) | 259 realtics | 246 realtics |
Doom (high detail) | 1041 realtics | 991 realtics |
Quake (320×200) | 66.3 fps | 70.1 fps |
Quake (360×480) | 27.4 fps | 27.3 fps |
Quake (640×480) | 13.4 fps | 27.5 fps |
Norton SI | 747.1 | 747.1 |
Landmark CPU | 2865 MHz | 2865 MHz |
Landmark FPU | 4862 MHz | 4862 MHz |
Landmark Video | 15360 | 22861 |
Fastvid: FASTVID.EXE 011 2 F5000000
Benchmarks (Slowdown)
Benchmarks using 3DBench 1.0c and various slowdown techniques.
Using a combination of the SETMUL utility and the IBM PS2 Speed option:
PS2 Speed FixedMax (300MHz) | PS2 Speed FixedMedium (225MHz) | PS2 Speed FixedSlow (150MHz) | PS2 Speed FixedMin (3) | |
---|---|---|---|---|
SETMUL L1E L2E | 205.8 fps | 154.3 | 91.3 | ??? |
SETMUL L1E L2D | 183.2 fps | 137.3 | 91.3 | ??? |
SETMUL L1D L2E | 12.5 | 61.7 (1) | 35.3 (2) | ??? |
SETMUL L1D L2D | 12.5 | 61.7 (1) | 35.3 (2) | ??? |
- Although reported as 61.7fps, this was in reality much, much slower. More likely single-digit fps speeds. Possible bug in the benchmark?
- Reported as 35.3fps, but was actually much, much slower.
- Although the lowest possible value set by the PS2 tool, 'FixedMin' seems to result in a processor clock equal to 'FixedMedium'.
Using a combination of the CPUSPD utility, along with SETMUL:
Default | SETMUL L2D | SETMUL L1D | |
---|---|---|---|
CPUSPD T8 | 206.2 | 183.2 | 12.5 |
CPUSPD T7 | 180.3 | 160.5 | 9.0 |
CPUSPD T6 (1) | 154.4 | 137.6 | TOO SLOW |
CPUSPD T5 (1) | 128.5 | 114.5 | TOO SLOW |
CPUSPD T4 (1) | 102.7 | 91.5 | TOO SLOW |
CPUSPD T3 (1) | 76.8 | 68.5 | TOO SLOW |
CPUSPD T2 (1) | 51.0 | 45.5 | TOO SLOW |
CPUSPD T1 (1) | 25.1 | 22.4 | TOO SLOW |
- Using the PS2 Speed utility, to access states at T6 and below, you must have set PS2 SPEED FIXEDMEDIUM or less. If the PS2 tool has been set to FIXEDMAX the new state will not stick.
This gives the following approximate speed levels:
Configuration | 3DBench 1.0c Score | Nearest Equivalent |
---|---|---|
Default + Fastvid | 362 | |
Default | 205 | |
SETMUL L2D | 183 | Pentium II 233 |
CPUSPD T7 + SETMUL L2D | 160 | Pentium MMX 233 |
CPUSPD T6 | 154 | Pentium MMX 200 |
CPUSPD T6 + SETMUL L2D | 137 | Pentium MMX 166 |
CPUSPD T5 | 128 | Pentium MMX 133 |
CPUSPD T5 + SETMUL L2D | 114 | Pentium 150 |
CPUSPD T4 | 102 | Pentium 133 |
CPUSPD T4 + SETMUL L2D | 91 | Pentium 100 |
CPUSPD T3 | 76 | Am5x86 133 |
CPUSPD T3 + SETMUL L2D | 68 | 486 DX4 100 |
CPUSPD T2 | 51 | 486 DX2 66 (upper range) |
CPUSPD T2 + SETMUL L2D | 45 | 486 DX2 66 (lower range) |
CPUSPD T1 | 25 | 486 DX 33 |
CPUSPD T1 + SETMUL L2D | 22 | 486 SX 33 |
SETMUL L1D L2D | 12.5 | 386 SX 40 |
CPUSPD T7 + SETMUL L1D | 9 | 286 20 |