Meta tags:
author= Mark Moxon;
description= Fully documented source code disassembly for Lander on the Acorn Archimedes, with lots of deep dive articles explaining how every aspect of the game works.;
Headings (most frequently used words):
the, lander, on, acorn, archimedes, code, for, fully, documented, source, suggestions, your, visit, if, you, want, to, play, with, similar, projects, 100, handcrafted,
Text of the page (most frequently used words):
the (393), and (78), for (63), lander (61), particle (49), code (48), #source (43), part (42), object (40), that (38), draw (38), game (35), buffer (28), graphics (28), this (28), from (26), screen (26), address (20), landscape (20), data (19), into (18), objects (18), subroutines (17), buffers (16), with (16), drawing (16), how (16), routine (15), table (15), blueprint (15), variables (14), random (14), main (14), start (14), particles (14), you (14), unused (13), add (13), site (13), triangle (12), archimedes (11), micro (11), all (11), pixel (11), player (11), its (11), drawtriangle (11), line (11), map (11), bbc (10), coordinates (10), process (10), using (10), project (10), calculate (10), more (9), end (9), acorn (9), score (9), number (9), runimage (9), fully (9), mark (8), moxon (8), memory (8), each (8), mouse (8), lookup (8), two (8), about (8), entry (7), point (7), when (7), colour (7), ship (7), out (7), loop (7), building (7), want (7), documented (7), details (6), software (6), archaeology (6), are (6), first (6), bar (6), top (6), explosion (6), distance (6), command (6), just (6), addresses (6), clipped (6), horizontal (6), bank (6), working (6), sites (5), indexes (5), every (5), variable (5), used (5), have (5), specified (5), current (5), moveanddrawplayer (5), starting (5), rocks (5), set (5), very (5), rotation (5), coordinate (5), can (5), drawobject (5), but (5), braben (5), deep (5), your (5), writing (4), elite (4), category (4), they (4), index (4), jump (4), check (4), down (4), new (4), text (4), row (4), position (4), being (4), velocity (4), has (4), rock (4), over (4), moveanddrawparticles (4), according (4), place (4), adds (4), one (4), which (4), vertex (4), onto (4), vector (4), polar (4), vectors (4), below (4), drawlandscapeandbuffers (4), rows (4), between (4), triangles (4), smoking (4), remains (4), way (4), faces (4), files (4), exploring (4), might (4), own (4), david (4), history (4), dive (4), articles (4), good (4), projects (4), sentinel (3), revs (3), aviator (3), list (3), analysis (3), fuel (3), level (3), four (3), print (3), second (3), single (3), left (3), bullet (3), exhaust (3), collisions (3), movement (3), moving (3), store (3), altitude (3), white (3), then (3), big (3), coloured (3), small (3), off (3), element (3), lifespan (3), counter (3), front (3), create (3), matrix (3), get (3), square (3), division (3), numbers (3), life (3), offset (3), tiles (3), these (3), not (3), containing (3), shadow (3), isn (3), jumping (3), relevant (3), world (3), 17th (3), words (3), file (3), copy (3), blueprints (3), tree (3), right (3), found (3), drawobjects (3), contains (3), some (3), play (3), development (3), useful (3), read (3), commentary (3), page (3), find (3), use (3), been (3), computers (3), handcrafted (3), any (3), classic (3), 100 (3), original (3), homepage (2), contact (2), tubewalker (2), tube (2), foot (2), walking (2), land (2), john (2), groats (2), travel (2), 6502 (2), other (2), where (2), usage (2), click (2), show (2), stack (2), was (2), run (2), location (2), associated (2), prints (2), digit (2), hexadecimal (2), os_word (2), block (2), resetting (2), 511 (2), spawn (2), plume (2), see (2), launchpad (2), sea (2), spray (2), sky (2), droprocksfromthesky (2), whose (2), fades (2), red (2), time (2), hot (2), them (2), randomly (2), drop (2), spawning (2), slightly (2), nearer (2), black (2), correct (2), last (2), adding (2), spark (2), cloud (2), explosions (2), splashes (2), sparks (2), sine (2), cosine (2), arctan (2), value (2), getmouseinpolarcoordinates (2), delta (2), uses (2), trigonometry (2), matrices (2), maths (2), root (2), seed (2), generator (2), tables (2), generate (2), newly (2), lose (2), crash (2), animation (2), our (2), core (2), visible (2), fit (2), landscapeconfig (2), configuration (2), tile (2), drawn (2), behind (2), corner (2), contents (2), secrets (2), undulating (2), values (2), change (2), graphicsbufferendaddr (2), graphicsbufferaddr (2), know (2), edge (2), slope (2), grey (2), hidden (2), switching (2), pixels (2), drawlinesegment (2), routines (2), absolute (2), maps (2), types (2), leafy (2), bend (2), gazebo (2), through (2), vertices (2), workspaces (2), commented (2), annotated (2), versions (2), version (2), hacking (2), arm1 (2), arm (2), miscellaneous (2), coding (2), sorting (2), make (2), flying (2), flight (2), simple (2), program (2), structure (2), dives (2), works (2), under (2), hood (2), playing (2), links (2), explore (2), terminology (2), came (2), quick (2), guide (2), home (2), visit (2), tools (2), course (2), modern (2), disc (2), functionality (2), old (2), may (2), try (2), keep (2), don (2), what (2), like (2), also (2), interested (2), repository (2), emulator (2), buildable (2), straight (2), who (2), released (2), reconstructed (2), instruction, counts, stats, statistics, label, cross, references, subroutine, analyses, above, workspace, workspaceaddr, stores, pointer, stackpointeronentry, stackaddr, ensure, enough, memorytestaddr, return, desktop, returntodesktop, initialise, initialiseparticledata, error, abort, abortwithmemoryerror, initialising, shutting, initialscore, high, load, initialhighscore, initialfuellevel, word, fuelbarcolour, column, printscoreinbothbanks, character, printhexnumber, printhexdigit, printcurrentscore, showing, drawfuellevel, updating, mouseparametersaddr, parameters, mouseparameters, reset, ready, resetmouseposition, placeplayeronlaunchpad, fire, button, pressed, engine, engaged, update, reading, landed, landonlaunchpad, unique, based, controls, storeparticledata, splash, creating, splashparticleintosea, spawns, half, spawnrock, flags, give, cools, setparticlecolourtofade, hit, destroy, scoring, points, processobjectdestruction, checking, including, 800, albeit, droparockfromthesky, large, drawparticletobuffer, drawparticleshadowtobuffer, 3x2, draw3x2particlefrombuffer, 3x1, draw3x1particlefrombuffer, 2x2, draw2x2particlefrombuffer, 2x1, draw2x1particlefrombuffer, 1x1, draw1x1particlefrombuffer, delete, move, take, deleteparticledata, bounce, ground, bounceparticle, starts, static, addstaticparticletobuffer, addsprayparticletobuffer, addsparkparticletobuffer, 150, addsparkcloudtobuffer, smoke, addsmokeparticletobuffer, addsmallexplosiontobuffer, cluster, addshipexplosiontobuffer, initially, drifts, addrisingparticletobuffer, addmovingparticletobuffer, addexplosiontobuffer, addexhaustparticletobuffer, debris, purple, brownish, green, bounces, adddebrisparticletobuffer, addbulletparticletobuffer, falling, sintableaddr, sintable, arctantableaddr, arctantable, transposes, transposerotationmatrix, projectvertexontoscreen, projectparticleontoscreen, multiply, rotationmatrix, rotating, multiplyvectorbymatrix, multiplies, constant, multiplyvectorbyconstant, convert, calculating, angle, dot, product, getdotproduct, calculaterotationmatrix, rotated, space, addvectortovertices, updates, feedback, addvectorswithfeedback, self, modifying, results, addvectors, geometry, squareroottableaddr, squareroottable, randomseed2, randomseed1, divisiontableaddr, divisiontable, pseudo, seeds, getrandomnumbers, roots, arithmetic, brand, full, lives, generated, startnewgame, mainloop, detected, processing, loselifefromparticleloop, display, loselife, message, gameover, finish, endgame, runs, landscapeoffsetaddr, apply, push, away, nicely, landscapeoffset, landscapeconfigaddr, currently, getlandscapetilecolour, directly, getlandscapebelowvertex, given, getlandscapealtitude, remaining, back, updated, graphicsbuffersend, graphicsbuffers, same, graphicsbuffendaddr2, commands, bufferjump, drawgraphicsbuffer, terminators, ends, stop, addterminatorstobuffers, draws, order, drawtriangletobuffer, drawtriangleshadowtobuffer, drawtrianglefrombuffer, clipping, bottom, slopes, partly, sloping, side, ordering, quadrilateral, drawquadrilateral, screenbanknumber, screenbank2addr, screenbank1addr, screenaddr, greycolourwordsaddr, greycolourwords, switch, banks, clear, switchscreenbank, smooth, linejump, drawhorizontalline, lines, gamecodeendaddr, gamecodeaddr, unencrypted, gamecode, absoluteaddr, runimageentry, placeholder, decrypt, 8000, decryptgamebinary, hiding, prying, eyes, protection, objecttypes, tall, objecttallleafytree, objectsmokingremainsright, objectsmokingremainsleft, objectsmokinggazebo, objectsmokingbuilding, objectsmallleafytree, rocket, objectrocket, objectrockaddr, objectrock, pyramid, objectpyramid, objectplayeraddr, objectplayer, objectgazebo, fir, objectfirtree, objectbuilding, avoiding, placeobjectsonmap, destroyed, portion, looking, visibility, such, trees, buildings, ships, risc, overview, structured, different, information, huge, landscapes, faster, machines, creation, influenced, origins, tight, even, brother, compares, predecessor, comparing, zarch, author, article, user, algorithm, evaluation, system, important, piece, understanding, vidc, colours, converts, projecting, nothing, clever, bin, hack, correctly, displays, another, depth, detecting, crashed, shot, bullets, thrust, challenges, travelling, plumes, clouds, placing, storing, definitions, normals, simulating, physics, converting, altitudes, fourier, synthesis, generating, explanation, fundamental, aspects, camera, luscious, created, tasks, performs, iteration, around, squeezing, unexpanded, 305, discover, weaves, magic, analysed, here, 21st, century, could, benefit, bit, website, short, giants, shoulders, stands, acknowledgements, collection, pages, during, build, before, story, need, beginning, written, 1987, rights, reserved, 2021, built, too, typically, emulators, imagers, replicate, rather, than, providing, themselves, free, obviously, exist, disassemblies, hacks, love, fact, things, help, manuals, environment, doesn, happy, delegate, honest, there, reason, attractions, possible, person, understand, layer, electrons, logic, gates, ics, cpus, operating, systems, games, commanders, electron, commodore, apple, nes, similar, produce, loaded, experiment, assembled, enjoy, accompanying, github, prefer, lighter, theme, explorations, scheme, clicking, icons, knows, though, explain, notes, lots, browser, journey, following, suggestions, note, hasn, instead, lovingly, disassembly, binaries, produces, identical, names, invention, itself, matches, hope, will, those, learn, makes, tick, provided, educational, non, profit, basis, aim, helping, people, appreciate, legend, processor, both, milestone, masterpiece, epic, most, explained, skip, navigation,
Text of the page (random words):
e found on the object map placeobjectsonmap randomly place a number of objects on the map avoiding the sea and the launchpad variables objectbuilding object blueprint for the building objectfirtree object blueprint for the fir tree objectgazebo object blueprint for the gazebo objectplayer object blueprint for the player s ship objectplayeraddr the address of the object blueprint for the player s ship objectpyramid object blueprint for a pyramid objectrock object blueprint for a rock objectrockaddr the address of the object blueprint for a rock objectrocket object blueprint for the rocket objectsmallleafytree object blueprint for the small leafy tree objectsmokingbuilding object blueprint for the smoking remains of a building objectsmokinggazebo object blueprint for the smoking remains of a gazebo objectsmokingremainsleft object blueprint for the smoking remains that bend to the left objectsmokingremainsright object blueprint for the smoking remains that bend to the right objecttallleafytree object blueprint for the tall leafy tree objecttypes a table that maps object types to object blueprints copy protection hiding the lander code from prying eyes subroutines decryptgamebinary runimage placeholder routine to decrypt game code to 8000 so it can be run runimageentry runimage entry point for the runimage absolute file variables absoluteaddr runimage the address of the start of the absolute file gamecode runimage the unencrypted game code gamecodeaddr runimage the address of the game code gamecodeendaddr runimage the address of the end of the game code drawing lines the core horizontal line drawing routines subroutines drawhorizontalline draw a horizontal line drawlinesegment draw a horizontal line of between 0 and 17 pixels by jumping to the relevant entry point variables linejump jump table for drawing a horizontal line of between 0 and 17 pixels using the relevant entry point in drawlinesegment drawing the screen smooth animation using screen switching subroutines switchscreenbank switch screen banks and clear the newly hidden screen bank to black variables greycolourwords an unused table of grey four pixel colour words greycolourwordsaddr the unused address of the unused table of grey four pixel colour words screenaddr the screen address for the start of the 17th pixel line in the current bank i e the line just below the two rows of text screenbank1addr the screen address for the start of the 17th pixel line in screen bank 1 i e the line just below the two rows of text screenbank2addr the screen address for the start of the 17th pixel line in screen bank 0 i e the line just below the two rows of text screenbanknumber the number of the current screen bank 0 or 1 drawing triangles the main building block of the 3d world subroutines drawquadrilateral draw a quadrilateral i e two triangles drawtriangle part 1 of 11 draw a triangle starting by ordering the coordinates and jumping to the relevant part of the routine drawtriangle part 2 of 11 calculate the slope of x1 y1 to x2 y2 drawtriangle part 3 of 11 calculate the slope of x1 y1 to x3 y3 drawtriangle part 4 of 11 draw a triangle that isn t clipped and has a sloping first side drawtriangle part 5 of 11 draw a triangle with a horizontal edge between x1 y1 and x2 y2 drawtriangle part 6 of 11 draw a clipped triangle that s partly off screen drawtriangle part 7 of 11 calculate the slopes of x1 y1 to x2 y2 and x1 y1 to x3 y3 for a clipped triangle drawtriangle part 8 of 11 draw the bottom part of a clipped triangle drawtriangle part 9 of 11 draw the top part of a clipped triangle drawtriangle part 10 of 11 draw a clipped triangle with a horizontal edge between x1 y1 and x2 y2 drawtriangle part 11 of 11 draw a triangle clipping it to the screen as we go drawtrianglefrombuffer process the draw triangle command from the graphics buffer drawtriangleshadowtobuffer draw a triangle shadow into the correct graphics buffer according to its distance drawtriangletobuffer draw a coloured triangle into a slightly nearer graphics buffer according to its distance graphics buffers how lander draws objects in distance order subroutines addterminatorstobuffers add terminators to the ends of the graphics buffers so we know when to stop drawing drawgraphicsbuffer draw the contents of the specified graphics buffer variables bufferjump the jump table for drawing commands that we store in the graphics buffers graphicsbuffendaddr2 the addresses of the tables containing the graphics buffer addresses same as graphicsbufferendaddr and graphicsbufferaddr graphicsbufferaddr the address of the table containing the addresses of the graphics buffers graphicsbufferendaddr the address of the table containing the end addresses of the graphics buffers graphicsbuffers the addresses of each of the graphics buffers these values do not change graphicsbuffersend the end addresses of each of the graphics buffers these values get updated as objects are drawn into the buffers landscape the secrets of lander s undulating landscape subroutines drawlandscapeandbuffers part 1 of 4 draw the landscape and the contents of the graphics buffers from the back of the screen to the front drawlandscapeandbuffers part 2 of 4 draw a row of landscape tiles drawlandscapeandbuffers part 3 of 4 draw the objects in the graphics buffers for two rows behind the current corner row drawlandscapeandbuffers part 4 of 4 draw the remaining graphics buffers getlandscapealtitude calculate the altitude of the landscape for a given coordinate getlandscapebelowvertex calculate the landscape altitude directly below an object s vertex getlandscapetilecolour calculate the colour of the landscape tile currently being drawn variables landscapeconfig the configuration data for each tile row in the landscape landscapeconfigaddr the address of the landscapeconfig table landscapeoffset the offset we apply to the on screen landscape to push it away from us and to the left so the visible tiles fit nicely on screen landscapeoffsetaddr the address of the landscape offset main loop the core game loop that runs lander subroutines endgame finish the game gameover print a game over message and start a new game loselife display a crash animation when we lose a life and end the game if this is our last life loselifefromparticleloop lose a life when a crash is detected in the particle processing loop mainloop the main game loop startnewgame start a brand new game with a full set of lives and a newly generated set of objects maths arithmetic division square roots and random numbers subroutines getrandomnumbers generate pseudo random numbers from the random number seeds variables divisiontable division lookup tables divisiontableaddr the address of the division lookup table randomseed1 the first random seed for the random number generator randomseed2 the second random seed for the random number generator squareroottable square root lookup table squareroottableaddr the address of the square root lookup table maths geometry trigonometry vectors and rotation matrices subroutines addvectors an unused routine that adds two vectors and uses self modifying code to store the results in a specified location addvectorswithfeedback an unused routine that adds a delta vector to a coordinate and updates the delta with feedback from the coordinate value addvectortovertices add a vector to the rotated vertex coordinates to get the vertex coordinates in 3d space calculaterotationmatrix calculate the rotation matrix getdotproduct calculate the dot product of two 3d vectors getmouseinpolarcoordinates part 1 of 2 convert the mouse x and y coordinates into polar coordinates starting by calculating the polar angle getmouseinpolarcoordinates part 2 of 2 calculate the polar distance multiplyvectorbyconstant an unused routine that multiplies a vector by a constant value multiplyvectorbymatrix multiply a 3d vector by the rotation matrix in rotationmatrix if the object is a rotating object projectparticleontoscreen project a 3d particle coordinate onto the screen projectvertexontoscreen project a vertex coordinate from a 3d object onto the screen transposerotationmatrix an unused routine that transposes the rotation matrix variables arctantable arctan lookup table arctantableaddr the address of the arctan lookup table sintable sine cosine lookup table sintableaddr the address of the sine cosine lookup table particles explosions splashes sparks and falling rocks subroutines addbulletparticletobuffer add a bullet particle to the particle data buffer adddebrisparticletobuffer add a debris particle to the particle data buffer which is a purple brownish green particle that bounces out of an explosion addexhaustparticletobuffer add one of the moving particles in the exhaust plume to the particle data buffer addexplosiontobuffer create a big explosion of particles and add it to the particle data buffer addmovingparticletobuffer add a moving particle to the particle data buffer adding a random element to its velocity and lifespan counter addrisingparticletobuffer add a particle to the particle data buffer that initially drifts up with a random element to its velocity and lifespan counter addshipexplosiontobuffer an unused routine that adds a 50 cluster explosion cloud to the particle data buffer just front of the player s ship addsmallexplosiontobuffer add a small explosion to the particle data buffer addsmokeparticletobuffer add a smoke particle to the particle data buffer addsparkcloudtobuffer an unused routine that adds a cloud of 150 spark particles to the particle data buffer just in front of the player s ship addsparkparticletobuffer add a spark particle to the particle data buffer that fades from white hot to red over time addsprayparticletobuffer add a spray particle to the particle data buffer addstaticparticletobuffer add a particle to the particle data buffer that starts off static adding a random element to its velocity and lifespan counter bounceparticle bounce a particle off the ground deleteparticledata delete a particle from the particle data buffer and move the last particle s data down to take its place draw1x1particlefrombuffer process the draw 1x1 pixel specified command from the graphics buffer draw2x1particlefrombuffer process the draw 2x1 pixel particle command from the graphics buffer draw2x2particlefrombuffer process the draw 2x2 pixel particle command from the graphics buffer draw3x1particlefrombuffer process the draw 3x1 pixel particle command from the graphics buffer draw3x2particlefrombuffer process the draw 3x2 pixel particle command from the graphics buffer drawparticleshadowtobuffer draw a small black particle into the correct graphics buffer according to its distance drawparticletobuffer draw a large coloured particle into a slightly nearer graphics buffer according to its distance droparockfromthesky drop a rock from the specified coordinates by spawning it as a particle albeit a very big particle with an associated 3d object droprocksfromthesky if the score is 800 or more then randomly drop rocks from the sky by spawning them as particles moveanddrawparticles part 1 of 4 process particle movement and draw the particles into the graphics buffers starting with the movement of particles moveanddrawparticles part 2 of 4 draw particles including rocks into the graphics buffers moveanddrawparticles part 3 of 4 process rocks by checking for collisions and drawing them as 3d objects moveanddrawparticles part 4 of 4 draw particles into the graphics buffers processobjectdestruction if this particle has hit an object destroy the object and the particle in an explosion scoring points if it s a bullet setparticlecolourtofade set the flags for a particle whose colour fades from white to red over time to give a white hot explosion particle that cools down spawnrock an unused routine that spawns a rock in the sky at half the altitude of the rocks in the droprocksfromthesky routine splashparticleintosea splash a particle into the sea creating a spray particle storeparticledata store the data for a new particle in the particle data buffer player moving the player using unique mouse based controls subroutines landonlaunchpad check to see if the player has landed on the launchpad moveanddrawplayer part 1 of 5 process player movement and draw the player s ship into the graphics buffers starting with reading the mouse position moveanddrawplayer part 2 of 5 update the player s velocity and coordinates moveanddrawplayer part 3 of 5 check for collisions and draw the ship moveanddrawplayer part 4 of 5 spawn the particles in the exhaust plume if the engine is engaged moveanddrawplayer part 5 of 5 spawn a bullet particle if the fire button is being pressed placeplayeronlaunchpad the main entry point for the game resetmouseposition reset the mouse position to 511 511 ready for the game variables mouseparameters the parameters for os_word 21 3 for resetting the mouse position mouseparametersaddr the address of the os_word block for resetting the mouse position score bar updating the score at the top of screen subroutines drawfuellevel draw the bar at the top of the screen showing the current fuel level printcurrentscore print the current score at the left end of the score bar printhexdigit an unused routine that prints a single digit hexadecimal number in the score bar printhexnumber an unused routine that prints an 8 digit hexadecimal number on the second character row of the screen printscoreinbothbanks print a number at a specified text column in the score bar variables fuelbarcolour a four pixel colour word for the colour of the fuel bar initialfuellevel the fuel level at the start of each new game initialhighscore the high score when we first load the game initialscore the score at the start of each game start and end initialising the game and shutting it down subroutines abortwithmemoryerror show a memory error and abort the game entry the main entry point for the game initialiseparticledata initialise the particle data buffer and associated variables returntodesktop return to the desktop variables memorytestaddr the memory location to check to ensure we have enough memory for the game stackaddr the address of the game s stack stackpointeronentry stores the stack pointer from when the game was run workspaceaddr the address of the game s variable workspace show me a random routine or click above to jump into the source code indexes and code analyses indexes to the source code a z indexes code usage analysis and more a z indexes a z index of the source code an index of every subroutine entry point and variable in the source code source code cross references every label and variable in the source code and where they are used indexes by category list of all subroutines by category subroutines in lander list of all variables by category variables in lander code statistics for lander instruction counts and other source code stats my software archaeology sites mark moxon s software archaeology ...
|