Saturday, 12 June 2010

Well, I did have a blog on MySpace, but no one reads it and I've neglected it, so I posted some items on FaceBook using the 'notes' thingy which was okay but only people on my friends list could read it or something, so I thought I'd start a blog here. All the best writers have them apparently, so why not me? Well, maybe because my writing is generally the best aspects of mediocrity, and probably because I'll again neglect this, but never mind.

Anyway, a bit about myself: I'm a part-time freelance writer for the magazine Micro Mart (http://www.micromart.co.uk/) published weekly in the United Kingdom and available every Thursday for a partly £2 from your local news agents. I've just finished the first year of my Foundation Degree in Computer Enterprise and work part-time in social care. I have a young daughter, called Ruby Mae, who is fast approaching her second birthday. It's good now she's growing up a bit because it means that we can have a laugh.

But the important thing to know, as this is a gaming blog, is what games I'm playing at the moment... and to be honest, I've not had chance to indulge myself in any binary worlds lately, so here is some Z80 machine code which will happily work on the Sinclair ZX Spectrum for you to look at:

SCR EQU 16384 ; Screen Ram locationORG $6000 ; This is where we want our program to start in RAM (6*4096)LD BC,STRING ; Right, let's get the location of where the text is that'll be written; the screenLD DE,SCR ; and let's get the locator for the screen and put it into a register; DE (or in otherwords LET DE=SCR)LOOP ; Here is our first label, called LOOPLD A,(BC) ; Let's put the first byte at BC into A, or in otherwords; LET A=PEEK (BC)CP 0 ; Compare this to zero, which is the marker for the end of; the data which we're writing to the screenJR Z,EXIT ; If A does equal zero then let's go to the label EXITRST $10 ; Print A to the screenINC BC ; Let's increase BC by one so to get the next byte from our; DATA stringINC DE ; We'll increase DE as well to put the next char one step to the; right of the previous outputted characterJR LOOP ; This simply jumps back to the label LOOP to repeat the processEXIT ; Here's our EXIT labelLD BC,0 ; Let's clear the register BC to zeroRET ; RET simply returns to BASICSTRING ; Here's our STRING label (or in other words, where out text is)DEFB "Hello World!"DEFB 13,0 ; 13 is a new line or carriage return, and zero says "end of data"

Good, innit? When assembled, load it into your favourite Speccy emulator and PRINT USR 24576 - amazing eh? But why do you get the zero displayed on the next line after Hello World! is drawn to the screen? Well, you could also try RANDOMIZE USR 24576, but you won't see anything. So, try INK 0: RANDOMIZE USR 24576 - there, it works without the zero being printed... so if you're going to execute the code using the latter method then you need to tell the Speccy to set a colour for what it's going to output first, whic of course you can do in the code itself. But how do you do that? Answers on a post-card.