One of these projects that might not be useful for anybody, but it was educational for me at least 🙂 For some time I had been looking for a bit nicer and easier way to code for Sinclair QL than just pure asm. There used to be a GCC hack, which can’t even be compiled these days. The other 68k-friendly alternative is vbcc, which has support for various related architectures such as Atari ST and Amiga, but no QDOS. Hacking GCC is nothing I’d love to do in my spare time, so I checked out vbcc instead.
The aim was simple enough: get compiled C code to run on QL at an absolute address (0x30000 in this case, right after the video ram). Dealing with nasty stuff such as executable headers wasn’t necessary, since vlink supports rawbin1 output, which is just good clean binary code and data. In addition to that there was a need for a trivial startup routine, which doesn’t do much more than call _main. The correct way would be to call libvc’s __main, which initializes the stack, the heap and the C library, but since the implementation here is so incomplete anyway, I decided to omit that at this point. The biggest challenge was to create the needed linker script to join different object files and sections to a coherent executable. The example scripts can bring tears to your eyes with their complexity, but to join the three required aout sections (.text, .data and .bss) wasn’t that bad after some orientation.
So, with about five hours of work I got to the point where I could compile and run C code on the QL using my own little Arduino-based transfer cable and software. Plain C without any standard stuff such as includes, stdlib and math isn’t very useful yet, so next it was time to look into that. To my surprise I found out that libvc is not part of the distribution at all. Fortunately, the TOS includes seemed to be almost generic, and since the libs are in aout format as well, I gave them a go as-is. Everything I tried seems to work just fine — of course excluding i/o — so there is no immediate need for a real libvc implementation. A kludge on top of another kludge doesn’t decrease the overall quality significantly 😛
The necessary files are here: vbcc-qdos-poc.zip. In order to compile anything, you need to install vbccm68k, copy the archive contents to /usr/local/vbcc, and then add +qdos to the compiler command line. There’s a lot of broken stuff, questionable hacks and so on, which is why I call it a proof of concept. Anyone willing to take the work further is most welcome to do so. This is enough for my humble purposes, probably coupled with a few additions to deal with the keyboard, screen mode etc.
January 14th, 2012
Kasibittikokoelman jatkoksi saapui “Ammu” eli Amstrad CPC 6128. Jokseenkin siisti yksilö, mutta sisäinen levari ei kylläkään toimi kunnolla — noissa kun on vanhemmiten tyyppivikana levarin hihnan sulaminen ja hapertuminen. Ammu ei ole koneena helpoimmasta päästä: hankalat 3″ korput ovat jo käymässä harvinaisiksi samoin kuin itse laitteet, pihalle ei saa kuin tasan RGB:tä (RF ja composite, mitä ne ovat?), virtaa tarvii syöttää kahta eri piuhaa pitkin ja eri videopiireistä seuraa omat ongelmansa. Videomonitori sentään syö SCARTin kautta RGB:tä, mutta videotykki onkin sitten toinen juttu, jollei omista vanhoja videoita tai muuta konvertteripurkkia. Alkujaanhan CPC:t myytiin aina näytön kanssa, ja näyttö toimi samalla virtalähteenä, joten mitään tarvetta ei pitänyt olla telkkarin kanssa käyttämiselle.
Levariongelma ratkesi lopulta varsin näppärästi HxC:llä. HxC lukee normaalilta SD-kortilta levytiedostoja ja emuloi sitten levaria piuhan toisessa päässä olevalle laitteelle. Tukea löytyy Atarista Amigaan ja Amstradista PC:hen, joten laite käy potentiaalisesti monenlaiseen käyttöön. Itse tilasin Lotharekin kaupitteleman version, jonka hinta etenkään koteloituna ei ole järin kukkaroystävällinen. Periaatteessa homma ei ole mutkikasta: SD-kortti formatoidaan FAT32:ksi, kopioidaan sinne asetustiedosto ja sen jälkeen HFE-muotoisia levytiedostoja, joita voi selailla laitteen napeista (tai joillakin alustoilla myös tietokoneelta itseltään). HFE-filuja voi konvertoida lukuisista emulaattorien käyttämistä formaateista Windows-softalla. Laiskalle Mäkki- tai Linux-käyttäjälle tiedoksi, että kikkare toimii riittävästi Winellä. Sorsista voi periaatteessa kääntää komentorivityökalun myös Linuxille, mutta viimeisin versio on rikki. Sain kääntymään lopulta vasta lataamalla viimekesäisen version (178) osapuilleen näin:
svn co https://hxcfloppyemu.svn.sourceforge.net/svnroot/hxcfloppyemu hxcfloppyemu -r {2011-06-01}
cd hxcfloppyemu/HxCFloppyEmulator/HxCFloppyEmulator_software/trunk/linux
make hxcfloppyemulator_convert
edit: Onnistuu samalla loitsulla myös OSX:llä
Itse päädyin nyppäämään sisäisestä levarista kaapelit kokonaan irti, minkä jälkeen jumpperoin HxC:n A-asemaksi (ahkerat harrastajat ovat jopa modanneet HxC:n CPC:n koteloon sisälle). Sisäinen levari ei tykkää olla B-asema ilman eri kolvausta, mihin en halunnut lähteä, minkä lisäksi softat eivät ilmeisesti aina toimi B-asemalta ajettuna. Melkein kaikki kokeilemani demot toimivatkin hienosti tämän järjestelyn jälkeen, paitsi että…
Ammuissa on käytetty eri valmistajien videopiirejä, eikä pelkästään konetta vilkaisemalla voi tarkalleen tietää, mikä sisuksissa majailee. Hyväkäytöksiset ohjelmat toimivat kyllä, mutta demot eivät niitä suinkaan aina ole. Nettiä penkomalla olen alkanut päästä hommasta hiljalleen jyvälle, vaikka piirien vivahde-eroja en väitäkään ymmärtäväni. Tarkkaa ajastusta vaativat demot on tehty joko CRTC0:lle tai CRT1:lle, jotka eivät ole keskenään samanlaisia. CRTC2 tuntuu olevan “välttäkää kuin ruttoa” -osastoa. CRTC 3 ja 4 olivat käytössä uudemmissa Plus-sarjan koneissa ja niissä oli lisätoimintoja kuten enemmän värejä. Hevosmiesten tietotoimiston mukaan 3 ja 4 muistuttavat muuten lähinnä CRTC0:aa. Ihannetilanteessa koneessa olisi sekä 0 että 1, jotka voisi kytkimellä valita, mutta olkoon nyt toistaiseksi näin, vaikka From Scratch jääkin näkemättä.
January 11th, 2012
Pari vuotta on nyt menty osana Aalto-yliopistoa, eikä meno vieläkään vakuuta näin taikkilaisen näkökulmasta. Käytännön tasolla Aalto on näkynyt lähinnä epäoleellisen työmäärän kasvuna: uutta järjestelmää, säädöstä, organisaatiouudistusta jne. putoaa niskaan tasaisin väliajoin, mikä on kaikki pois sen varsinaisen oman duunin tekemisestä. Aiheesta voi joko stressaantua — tai toisena vaihtoehtona lyödä läskiksi ja lakata välittämästä. Ehtiihän niitä uusia kuvioita sitten opetella, kun on aivan äärimmäinen pakko.
Ei Taikin/valtion vanhoissakaan urajärjestelmissä kehumista ollut, mutta nyt huippuyliopiston myötä on menty kenties vielä yksisilmäisempään suuntaan. Ulkomailta, niistä hienoista kouluista, on napattu tenure track -järjestelmä, jota leimaa totaalinen tohtori- ja professorikeskeisyys. Ilmeisesti tulevassa huippuopistossa ei juuri ketään muita enää työskentelekään. Lehtoreille on sentään keksitty pari porrasta, mutta tutkijoille tai muulle henkilökunnalle ei edes sitä vähää. Professori tai ei mitään.
Kun uutta kerran lähdetään tekemään, niin laitetaan varmuuden vuoksi kaikki uusiksi. Entisen taidekoululaisen silmään on pahiten sattunut Aallon mitäänsanomaton graafinen ilme, jonka rumuus tiivistyy kammottavissa käyntikorteissa. Kauhulla odotan Aallon äänilogokilpailun lopputuloksia. Taikin arvokas brändi heitettiin surutta roskikseen ja tilalle keiteltiin väkinäinen Taiteen ja suunnittelun korkeakoulu sekä sille jotain aivan muuta tarkoittavat käännökset. Pessimistisempi sielu saattaisi ajatella, että jostain puuttuu tyylitajua ja näkemystä.
Koko menoa leimaa siis edelleen keinotekoisuus ja sekavuus. Kolme koulua on saatu joten kuten naitettua yhteen, mutta entäs nyt? Kukaan ei oikein tunnu tietävän ja todellinen johtajuus tuntuu olevan hukassa. Paljon vaivaa laitetaan strategioiden, arvojen ym. korupuheiden sorvaamiseen, mutta käytännön tasolle ne eivät heijastu, saatika että arkisen työn edellytykset jotenkin paranisivat.
Noh, sainhan minä sentään uuden läppärin. Kiitos siitä.
January 8th, 2012
Ja sitten sama toisin päin eli kuinka toimivat edellisen listan produt ZX Evolutionilla (perusasetuksilla)? Mahdollisuuksien mukaan ajettu scl-versioita, muussa tapauksessa tappeja.
- Mescaline Synesthesia (Demarche). Ok.
- Aeon (Triebkraft & 4th Dimension). Ok.
- Ahh… The Tape loading Era! (Ate Bit). Toimii wavina kasettiporttiin soitettuna.
- Your Song Is Quiet, Pt. 2 (Inward, TPOLM & CPU). Ok.
- Machined (Triebkraft & 4th Dimension). Tappi toimii hienosti.
- Bomb (Ate Bit). Ok.
- Your Song Is Quiet (Inward & CPU). Ok.
- Weed (Triebkraft & 4th Dimension). Ok.
- Paralacktica (Demarche). Kilahtaa sekä trd:stä että tapista suoraan ladattuna. TR-DOSista erikseen ladattuna toimii (ja vilkkuu asianmukaisesti kuin hullu).
- Justin Beeper (Hooy-Program). Ok.
- Goa 4k (Extreme Entertainment). Ok.
- MCMXCVII (Thesuper). Ok.
- Nyantro (Hooy-Program). Ok.
- I’am the Seed (CPU & Inward). Ok.
- Traumwerk (Triebkraft & 4th Dimension). Ok.
- Electrogodzilla & Pink Socks (Triebkraft & 4th Dimension). Ok.
- Melange (4th Dimension & Light Future). Ok.
- Hackerz Top 2010 Invitation (Target Team). Ok.
- Koopaville (UKscene Allstars). Pari osaa hiukan pielessä, etenkin rasterikikkailu.
- Brightpast (Thesuper). Ok.
- Kkolor (Triebkraft & 4th Dimension). Ok.
- Detroyt (Triebkraft & 4th Dimension). Ok.
- Scroller (Demarche). Ok. Vaatii Covoxin, jota Evo kuitenkin osaa emuloida.
- 40% (Mr. Plop & Dr. Kvetch). Ok.
- Reliable Fraud. Ok.
- <3 Krunk (Ate Bit). Ok.
- Ugly Kid, Magic Star (Triebkraft & 4th Dimension). Ok.
Selvä tapaushan tämä on: kaikki tuoreemman pään demot toimivat hyvin itäkoneella, siinä missä länsikoneilla ehkä noin puolet. Hyvin vanhan kaman tai fiksaamattomien klassikkopelien kohdalla tilanne voi toki olla toinen.
December 26th, 2011
Tähän mennessä kaapintäytteeksi on kertynyt aika lailla peruskamaa, mutta uusin tulokas onkin sitten aika lailla eksoottisempi tekele: ZX Evolution eli käytännössä Pentagonin työnjatkaja, moderni neuvosto-Spectrum. Parhaista spekudemoista ei toimi kuin ehkä puolet länsikoneilla, joten pistin elämän risaiseksi ja tilasin valmiiksi kootun emolevyn 3600 ruplalla (n. 90 euroa). Päälle piti vielä haalia mini-ITX-kotelo ja sopiva pikkunäppis, sekä kolvata kasaan RGB-piuha. 90 eurolleen saa hyvin vastinetta: laite sisältää kortinlukijan, VGA-ulostulon, laajennuspaikkoja, Covoxin, stereo-AY:n, 14 MHz turbon, neljä megaa muistia ja ties mitä muuta. Edellisessä versiossa oli myös composite-ulostulo, mutta se on valitettavasti poistettu viimeisimmästä. SCARTia varten piti vetää emolta piikkirimasta oma johto, joten laiskalle ainoa vaihtoehto on VGA, joka ei sekään ole aivan ongelmaton. Oma littunäyttöni ei synkannut riittävän alas, mutta videotykki sentään taajuuden kelpuutti. VGA:n ja RGB:n välillä voi vaihtaa SysRq-napilla.
Kunhan omalaatuisesta käyttöliittymästä pääsee selville, niin on lopulta varsin helppo latailla scl- ja trd-levytiedostoja ja viimeisimmillä firmiksillä jopa tap-tiedostoja. Buuttirommeja on valmiinakin kolme ja sivuilta saa vielä lisää, minkä lisäksi varsinaisen Spectrumin puolella voi käyttää 48k-, 128- ja TR-DOS-moodeja. Neuvostodemoista toimii suorilta suurin osa, mutta osa vaatii vielä vähän asetusten säätämistä tai vastaavaa. Ominaisuuksia on kaiken kaikkiaan niin paljon, että opettelussa menee vielä pitkään. Dokumentaatio ja keskustelupalstat ovat pääosin venäjäksi, mistä tulee oma lisähaasteensa. Yhtä kaikki: hauska laite ja mielenkiintoinen kurkistus itäisten Spectrumien omintakeiseen maailmaan.
December 24th, 2011
Vuosi sitten olisin kirjoittanut tätä merkintää epäilemättä paljon positiivisemmassa sävyssä: näyttihän edelleen siltä, että kohta kauppojen hyllyt olisivat väärällään virtatehokkaita ja muutenkin mielenkiintoisia Linux-kykyisiä ARM-laitteita miniläppäreistä työasemiin. Näin ei kuitenkaan näytä käyneen, ja kolme eri laitetta (Efika MX, Efika MX Smartbook ja Trim-Slice) omistaneena en voi kuin lyödä hanskat tiskiin. Se todellinen ARM-Linuxin läpilyönti on kylläkin tapahtunut ja edelleen mennään nousujohteessa, mutta ainoastaan tasan ja tarkalleen Android-kännyköiden osalta. Edes Android-tableteista ei ole vielä tullut vakavasti otettavaa alustaa, puhumattakaan perinteisemmistä laitteista kuten läppäreistä.
ARM-Linuxia, vaikkapa sitten tuttua Ubuntua, vaivaavat monet lastentaudit, joista omalla kohdallani pahiten on iskenyt grafiikkaraudan surkea tuki. Ongelma on yhtäällä alustojen monenkirjavuudessa ja toisaalla siinä, että piirivalmistajat panttaavat dokumentaatiota: kaikki pitäisi tehdä valmistajan toimittaman bugisen binäärikikkareen kautta. Toimivan HDMI-tuen tekeminen näyttää sekin täysin mahdottomalta, kun testaus jää väistämättä vajavaiseksi ja mitään yhteistyötä ei näytetä tekevän aiheen tiimoilta. Androidin suuri kaupallinen merkitys on pitänyt sen ohjelmistotuen käyttökelpoisena, mutta työpöytä-Linux saa tyytyä pöydältä pudonneisiin murusiin. Kirjavuus vaivaa tunnetusti Linux-jakelujakin, joten sama työ tehdään moneen kertaan eri leireissä. Grafiikan lisäksi kaikki muukin on pykälän tukkoista (liukulukurautaa ei käytetä kunnolla, SSD:t ovat hitaita, kääntäjäasetukset tehottomia), joten kokonaisfiilis on helposti epärealistisen tukkoinen — kaiken järjen mukaan gigahertsin tuplaydinprosessorilla pitäisi pyörittää työpöytää ihan sutjakkaasti.
Pienen laitevalmistajan, kuten tässä tapauksessa Genesin ja CompuLabin, on verrattain helppoa lyödä kasaan valmiisiin piireihin tai jopa emolevyyn perustuva tuote, mutta rauta on tätä nykyä kovin pieni osa kokonaisuutta. Nopean etenemisen huumassa voidaan lupailla yhtä sun toista, kuten kiihdytettyä videotoistoa, Flashia, Android-tuke jne. jne. Käytännössä pikkufirmalla ei kuitenkaan ei ole resursseja kaikkea tehdä, joten lupaukset jäävät lunastamatta. Tilannetta parantaa, jos innokas harrastajayhteisö ottaa laitteen omakseen, kuten näyttää käyneen vaikkapa Pandaboardin kanssa, mutta ei yhteisökään joka paikkaan repeä. Isot kumppanitkaan eivät ole helppoja, sillä niiltä ei välttämättä liikene juuri tukea nyrkkipajoille ja päätöksenteko tapahtuu yksipuolisesti. Viimeisimpänä esimerkkinä tästä Adoben päätös lopettaa mobiili-Flashin tekeminen, mikä samalla käytännössä tuhosi ARM-Flashin tulevaisuuden.
Jos tällä hetkellä haluaa askarrella sulautettujen purkkien ja Linuxin äärellä, niin ei ole juuri järkeä hankkia mitään muuta kuin perinteinen x86-PC. x86-Linuxin momentti on suuri, laitetuki hyvä ja jakelut testattuja. Kunhan selviän tästä pettymyksestä, niin saatan vielä kokeilla Pandaboardia, mutta ainakin paljon realistisemmin odotuksin. Linaron virallinen tuki vaikuttaa paljon uskottavammalta kuin keskivertofirman omat näpellykset.
Edit: Itse asiassa viime aikojen kiintoisin tulokas on Raspberry Pi, jonka julkaisu on kuitenkin viivästynyt. Toivottavasti tulee pian pihalle, ettei hankkeesta tule uusi Pandora.
December 17th, 2011
Again, there seem to be a lot of differing opinions and unclarity concerning a simple thing: how to load tap/tzx programs to your Spectrum using a computer or, say, some media player? This is how I got it to work:
- Get tape2wav (no link here, since it’s available on so many platforms)
- Convert your favourite game to a wav with it: tape2wav beli.tap beli.wav. The volume should be maximum by default.
- Load the sound file to your favorite music player
- Connect the EAR port to the PC sound output. I got the best results by using a stereo to mono converter cable (left and right connected to the tip). YMMV.
- Crank the volume up
- Type LOAD “” [enter] on the Spectrum
- Start playback on the music player. You should hear the loading noise and see flashing stripes in the border. Crank the volume up if not.
That should do it. Notice that on newer models, such as +2 this method won’t work. Use a tape adapter — or better, just get a divIDE.
December 14th, 2011
What she said: “We need to talk.”
What he heard: “I’m leaving you.”
What she said: “I’ve been thinking …”
What he heard: “I’m leaving you.”
What she said: “At this point in life …”
What he heard: “I’m leaving you.”
What she actually meant: “I’m leaving you.”
December 12th, 2011
After some real trouble with three Spectrum +2s I’ve at least learnt a thing or two (not only about the build quality of those dogs). Most often the problems are caused by failing transistors, with other probable failures on top. Here’s for those who struggle with their Speccy:
- Power supply busted? They’re still available on eBay and elsewhere too, but any sturdy enough (2A) PSU will probably do. Nominally the voltage should be 9V DC, but you can also feed it a bit higher voltage, because a regulator will turn it into 5V anyway. Personally I’ve used two +2s with a generic 12V transformer. Note that the plug is shield positive.
- Still no voltage? Check the power connector on the PCB. The solder points don’t seem to last.
- Power LED doesn’t light up? Time to change the regulator that is attached to the big heat sink. 7805 is the one. Note that they are not all the same: if you intend to use expansions such as divIDE, get one with a high throughput (~2A).
- Still no picture?
- There are three ways to get video out: RF, composite and RGB (SCART). RGB is the least fragile of these, so if RF and composite fail, you might at least see something and confirm that the machine is otherwise sane.
- RGB works, the rest don’t? Most likely TR9 has failed. Replace it with another ZTX650/651.
- According to some account, it might do some good to change TR8, too. It’s a ZTX213.
- Distorted composite output? If you can get some dark output from TEA2000 pin 6, things are looking up! Most likely TR4 has failed and needs to be changed. This time you need a 2N3904. The markings on the PCB are upside down: install the transistor the other way around for a bit better image quality.
- Still no RF output? The RF modulator seems to crack off the PCB by time. The tiny wires bringing the signal in might suffer at that point.
- Constant noise in the audio output? This is not even a problem per se, but a feature of the +2 design. The tape drive head is connected to the sound output and it picks up all sorts of noise for your enjoyment. If you don’t need the drive, just snap off the white wire coming from it to the PCB. A bit more elegant solution is to place a switch on the wire, which lets you choose between sound quality and a working tape drive.
I hope this blurb is of use for someone. Let me know if there are any additions or errors.
December 8th, 2011
The sound “capabilities” of Sinclair QL are controlled through a single call to the IPC. You pass it two pitches, plus numerous strange parameters that distort the sound in more or less useful ways. To my great surprise I couldn’t find any description of the pitch parameter in any book or web page. For example, The SuperBASIC handbook goes to great detail with other parameters, but doesn’t explain how the pitch is calculated. I’m starting to feel like nobody really understood it and just quoted some technical manuals 🙂 Well, here’s my take on it, based on FFT analysis and a bit of math.
Pitch and frequency are inversely related, like on the Amiga, where you use periods. The highest tone you can output is pitch 0, which, according to Audacity’s FFT is 1313 Hz. At the other extreme there’s pitch 255, which produces a 43 Hz tone. Assuming that the formula is of the form a/(x+c), we get approximately the following relationship between frequency (f) and pitch (p):
- f = 11336.256 / (p + 8.634)
- p = 11336.256 / f – 8.634
When dealing with integer numbers you get a good enough approximation with p=11336/f-8. You can download a precalculated list of note pitches and frequencies here.
December 6th, 2011
Next Posts
Previous Posts