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.
Videos
Click on the video thumbnail picture above to watch videos of Linus Torvalds' early software (dated 1986) performing on an original Sinclair QL and see Linus reminding his QL days...(offsite-link).
Story
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 (MC68008 CPU, 128KB RAM).
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 170 REMark DELETE MDV1_GMOVE:SBYTES MDV1_GMOVE,A,702
171 DELETE MDV1_GMOVE:SBYTES MDV1_GMOVE,A,704
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"
GMOVE is a software blitter for the Sinclair QL, implemented as a BASIC extension, programmed by Linus B Torvalds, (C) 1986 LBT-soft.
Syntax
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
e.g.
GMOVE#2,xsrc%,ysrc%,xobj%,yobj% TO xdst%,ydst%
More details (source code, another demo) coming soon.
Update 2016-05-04: Back in 2009 I wrote "soon". ;-) BTW: GMOVE is part of QL IS 30 2014 - THE DISTRIBUTION, so if you already have that one then you don't need to download it separately.