* * * Linus Torvalds 40th birthday surprise page! * * *

Added: December 30th 2009 | Last updated: January 12th 2010

In 2009 we celebrated the 25th anniversary of the Sinclair QL. Even only around 150’000 QL’s were made and sold, one user became very important to the industry. Linus Torvalds used and programmed a Sinclair QL before he created what became Linux. While hacking on the QL, Linus wrote quite a few programs for it. For many years none of them seemed to have survived. After a huge research I'm very proud to present at least one piece of QL software written by Linus Torvalds. As Linus had his 40th birthday two days ago (I know I'm 2 days late) my birthday surprise is this page and the YouTube video showing GMOVE a software blitter for the Sinclair QL.


Click on the picture above to view how Linus Torvalds early software (dated 1986) is performing on an original Sinclair QL and how Linus reminds his QL days...(offsite-link).


Way back in the 80s Linus Torvalds made his first conceptional and system programming experiences on the Sinclair QL with its preemptive multitasking operating system QDOS.

In 1986 he wrote a software blitter "GMOVE" as an extension to the SuperBASIC language of the QL. It was published as a printed listing in the Finnish computer magazine MIKRO BITTI in November 1986.

This vid shows how GMOVE performs on an unmodified standard QL system (68008 CPU, 128KB RAM).

Linus explored the QL deeply before choosing to buy a 80386 CPU based PC. Read a NewsGroup message thread of Linus dated 1992...

In the QL-is-25 bash Linus blogged about his QL experience in retrospective (13-01-2009 12:30)... (warning: page will take a while to load due to *roboted* comments)

Listings, Manual and Downloads

Hexloader as published in BITTI Nov '86

10 REMark ***************************
20 REMark * *
30 REMark * GMOVE *
40 REMark * a BASIC extension *
50 REMark * made by *
60 REMark * Linus B Torvalds *
70 REMark * (C) 1986 LBT-soft *
80 REMark * *
90 REMark ***************************
100 A=RESPR(704):R$="123456789ABCDEF"
110 RESTORE 1000:FOR T=0 TO 21
120 READ H$:TOT=H$(65 TO):H$=H$(1 TO 64):S=0:FOR Y=0 TO 31
130 H=H$(Y*2+1) INSTR R$*16+H$(Y*2+2) INSTR R$
140 POKE A+T*32+Y,H:S=S+H
150 END FOR Y: IF TOT<>S THEN PRINT "error in line"!T*10+1000:STOP
160 PRINT 1000+10*T:END FOR T
169 REMark 20091228 KU: Bug by Linus, his statement only saves 702 bytes instead of 704 bytes so 2 bytes of code would be missing on media
1000 DATA "43FA0008347801104ED20001027C05474D4F5645000000000000000070FA4E751873"
1010 DATA "41FA005620BC0001000170004E75BACB67EE08360007B80167E62F0D4BEB00082625"
1020 DATA "347801124E922A5F508B4A8066CE3036980054892D490058C0FC0028206E00302636"
1030 DATA "D1C0B1EE00346CB4203688006DAE41FA0008208070004E7500000000000000002451"
1040 DATA "000000002F09207AFFF076FF700945FA00084E43225F4E7543FAFFE222E800183083"
1050 DATA "22E8001C70004E7548E703007400140602020007E44E02860000007E028700001765"
1060 DATA "00FFEF8FDE8606870002000020474CDF00C04E750000000000000000000000001925"
1070 DATA "70F14E7570FC4E75347801124E924A8066EE0C43000666E845FAFFDA740534F63694"
1080 DATA "9800548951CAFFF82D49005845FAFFC616390002803408030003670C76FEC7523180"
1090 DATA "C76A0004C76A000874054A5A6BB651CAFFFA45FAFFA03C123E2A0002DC6A00043232"
1100 DATA "DE6A000641FAFF3ABC506298BE68000262923C2A00083E2A000ADC6A0004DE6A2902"
1110 DATA "0006BC506200FF7EBE6800026200FF7670004E750000000000000000287AFFF62490"
1120 DATA "41FAFF523C183E183618381853446100FF1843FAFFE4228843FAFFDE205106913535"
1130 DATA "000000801218E14912280001E569E04918C11218E14912280001E569E04918C12622"
1140 DATA "51436AE043FAFF0E3629000451CCFFCA4E7541FAFF0638183C183E18534461003174"
1150 DATA "FEC843FAFF942288287AFF8A43FAFF8A2051069100000080363AFEDE7C080C433800"
1160 DATA "000762023C03121C610E121C610A51436AEA51CCFFD84E75E149303CFF002E3C2686"
1170 DATA "00FF0000ECAFC047C247E469E4680A40FFFFC0280002800111400002E048E0493482"
1180 DATA "C010800110C04E7543FAFE8E32190281000001FFE489548134110282000000FF2949"
1190 DATA "5482C2C274FF70184E414A80661843FAFF0422886100FF066100FF58207AFEF63778"
1200 DATA "70194E414E754E756100FDA44A8066F66100FDF24A8066EE6100FE4E4A8066E63831"
1210 DATA "43FAFDDA45FAFE2E3C113E290002DD52DF6A0002DD6A0008DF6A000A608A08383195"

Loader as published in BITTI Nov '86

1 REMark (C) LBT-software
10 A=RESPR(704)


GMOVE is a software blitter for the Sinclair QL implemented as a BASIC extension
made by Linus B Torvalds, (C) 1986 LBT-soft

GMOVE(#chnl),xsrc%,ysrc%,xobj%,yobj% TO xdst%,ydst%

chnl = Channel number of window
xsrc% = X source position within window
ysrc% = Y source position within window
xobj% = X block size to be moved
yobj% = Y block size to be moved
xdst% = X destination position within window
ydst% = Y destination position within window

GMOVE#2,xsrc%,ysrc%,xobj%,yobj% TO xdst%,ydst%


  • GMOVE package including Demo application

    More details (source code, another demo) coming soon.

    Happy birthday Linus and QL forever!

    Urs König (aka QLvsJAGUAR)

    Urs König's "QL is 25" mailbox

    site produced (p) and copyright (c): 1999-2010, Urs König

    Return to main "QL" page | Return to top of "QL & Linus" page | Return to Home page