headline
Screenshot Amiga Demo: Anarchy | Stolen Data #3

Stolen Data #3

Anarchy

Diskmag 1990


Code: Kreator
Grafik: Kreator & The Dark Lord
Sound: Gonzo & 4-Mat

Charts
Music Competition: Caress/Mr Fancy of Giants * Live inside Paula/Gonzo of Flash Productions * Fantastic by Mr Fanxy of Giants
Magazine: The Editors Bit * Partyscene * Interview with Pheonix * Computer Quiz * Interview with the Crusaders * Dear Mr Drokk * Classified Ads and BBS Number * Interview with FARC/ClONES * Stolen Data Music Comp Results * Interesting Telephone Numbers Pte * Kreators Coding Page


Amiga Diskfile Image (ADF)

Downloadcode eingeben:

Downloadcode


Textauszug generiert aus ADF-Image:

(Text gehört zur ganzen Disk, nicht immer zwangsläufig zum angezeigten Demo!)


| usage: jumptype [filename] [0-9] | filename = file of your text | 0-9 = speed of bound (0 fast, 9 slow, * extra slow) | this new command types text on the screen. it jumps hide, | cleans the cli-window, and then types your text. after that | it shows up again. note: it cleans screen before printing | your text!!! (no need to | hclean it yourself) | amigaman designs / w i z z c a t | not enough memory!!. please, switch your amiga off. | uur 5eccmifj | stolen data #3 | 4mtorsten juergeleit | 7;42musage : border [on] [off] | ; stolen data issue #3 | ; blitter shift scroller | ; copyright anarchy 1990 | ; written on 3.6.90 by kreator of anarchy | ; this type of scroller is generally used for things like sinescrollers etc. | ; it is reasonably stable, but uses a considerable amount more raster time | ; than a double buffered scroller. it is still not so easy t | o alter the speed | ; of such a scroller, as it really needs to be a power of 2 (1,2,4,8,...) but | ; this limitation can be eliminated by shifting the character before plotting | ; as you would if creating a proportional scroller. i'll leave that to you to | ; experiment with. another way would be to compromise between the two, using | ; the hardware shift registers and only moving the screen when there is space | ; for a whole new character (probably some source for this scroller on the | aswell) again this one is unsuitable then for sinescrolling, but doesnt | ; need double buffering, and allows easy,immediate speed changes. | ; general notes - at all times (unless specified) a6 points to the custom | ; chip registers ($dff000) and a5 points to the list of variables.this allows | ; indirect addressing modes to be used, which are much faster than absolute | ; addressing and consume less memory. if these registers are needed in the | ; course of a routine simply stick them on | rvthe stack, and pop them back off | include source/newcustomreg ; custom register label equates | section scroller,code_c ; assemble into chip mem if > | test = 1 ; set this if you are only testing the menu | ; as it will then return to devpac | move.l #start,$80.w ; trap vector 0 | trap #0 ; execute trap 0 to giv | e full control of the | bsr killsys ; disable the operating system | bsr setup ; setup the demo | bsr main ; now run the main demo routines | bsr sysreturn ; return the system to its original state | moveq.l #0,d0 ; no errors !! a number of people neglect to | ; do this, and that causes batch files (such | ; as the startup sequence) to bomb out. | rte ; return from exception ie. to the instruction after | ;killsys - disable operating system and interrupts | move.l $4.w,a6 ; execbase vector | lea gfxname(pc),a1 ; pointer to "graphics.library" into a1 | jsr oldopen(a6) ; open this library | lea variables,a5 ; get a pointer to the variable space | lea $dff000,a6 ; pointer to custom chips | move.l d0,a0 ; address of the graphics library | move.l 38(a0),sys_copl(a5) ; remember the system copperlist | move intenar(a6),int_set(a5) ; system interrupts | move #$7fff,intena(a6) ; now switch off all interrupts | move.l $6c.w,vbl_vec(a5) ; system vertical blanking int. | move dmaconr(a6),dma_set(a5) ; system dma | move #$87c0,dmacon(a6) ; now set the required dma channels | ;sysreturn - re-enable operating system and interrupts | move #$7fff,intena(a6) ; clear all interrupts | move.l vbl_vec(a5),$6c.w ; restore vbl interrupt | move int_set(a5),d0 | move d0,intena(a6) ; restore system interrupts | move dma_set(a5),d0 | move d0,dmacon(a6) ; restore system dma | move.l sys_copl(a5),cop1lch(a6) ; restore system copperlis | ;setup - setup the menu system | ;-- remove the sprite data (prevents sprite streaks down the screen) | lea spr0data(a6),a0 | ;-- clear the scroll area | lea screen,a0 | ; stolen data issue #3 | ; blitter shift scroller | ; copyright anarchy 1990 | ; written on 3.6.90 by kreator of anarchy | ; this type of scroller is generally used for things like sinescrollers etc. | ; it is reasonably stable, but uses a considerable amount more raster time | ; than a double buffered scroller. it is still not so easy t | ***** custom chip register table ***** | ;general registers | ;blitter registers | ; stolen data issue #3 | ; double buffered one bitplane scroller | ; copyright anarchy 1990 | ; written on 3.6.90 by kreator of anarchy | ; this type of scroller is very efficient speedwise, but causes a number of | ; problems, for instance it is difficult to implement variable speeds because | ; the charcters are read a long time before | ; stolen data issue #3 | ; double buffered one bitplane scroller | ; copyright anarchy 1990 | ; written on 3.6.90 by kreator of anarchy | ; this type of scroller is very efficient speedwise, but causes a number of | ; problems, for instance it is difficult to implement variable speeds because | ; the charcters are read a long time before | ; stolen data issue #3 | ; double buffered base relief scroller | ; copyright anarchy 1990 | ; written on 3.6.90 by kreator of anarchy | ; general notes - at all times (unless specified) a6 points to the custom | ; chip registers ($dff000) and a5 points to the list of variables.this allows | ; indirect addressing modes to be used, which | are much faster than absolute | ; addressing and consume less memory. if these registers are needed in the | ; course of a routine simply stick them on the stack, and pop them back off | include source/newcustomreg ; custom register label equates | section scroller,code_c ; assemble into chip mem if > | move.l #start,$80.w ; trap vecto | ; stolen data issue #3 | ; double buffered base relief scroller | ; copyright anarchy 1990 | ; written on 3.6.90 by kreator of anarchy | ; general notes - at all times (unless specified) a6 points to the custom | ; chip registers ($dff000) and a5 points to the list of variables.this allows | ; indirect addressing modes to be used, which | ; stolen data issue #3 | ; non-double buffered hardware scroller | ; copyright anarchy 1990 | ; written on 3.6.90 by kreator of anarchy | ; probably the most useful scroller in general use as it allows variable | ; speeds, and instant scroller controllables. | ; general notes - at all times (unless specified) a6 points to the custom | ; stolen data issue #3 | ; non-double buffered hardware scroller | ; copyright anarchy 1990 | ; written on 3.6.90 by kreator of anarchy | ; probably the most useful scroller in general use as it allows variable | ; speeds, and instant scroller controllables. | ; general notes - at all times (unless specified) a6 points to the custom | *** sine scroller source (c) 1989 del/mayhem *** | bitmap1 equ $70000 ;screen 1 at $70000 | bitmap2 equ $72800 ;screen 2 at $72800 | ** try changing the following 5 equates for cool fx! ** | speed equ 2 ;scrolly speed (1,2,4 or 8) | yspace1 equ 2 ;sine spacing (max 512) | yspeed1 equ 6 ;sine wibble speed (max 512) | sinesize equ 160 ;depth of sinescroller (max 22 | *** sine scroller source (c) 1989 del/mayhem *** | bitmap1 equ $70000 ;screen 1 at $70000 | bitmap2 equ $72800 ;screen 2 at $72800 | ** try changing the following 5 equates for cool fx! ** | speed equ 2 ;scrolly speed (1,2,4 or 8) | yspace1 equ 2 ;sine spacing (max 512) | yspeed1 equ 6 ;sine wibble speed (max 512) | sinesize equ 160 ;depth of sinescroller (max 22 | * we are looking for more * | * cool contacts around * | * the world! for elite * | * trading write to * | ! amiga contacts wanted ! | ! for the latest warez ! | 2600 lille hammer | ! contact vision ! | ! for the latest ! | ! vision factory warez ! | west germany | ! for hot trading ! | contact boba fett | of mastercrew | are looking for a real | wizard with graphics | if you think you are qualified | contact us at | oure raelingsu. 80b | send your adverts to | stolen data - adverts | 49 kirkstall road | new lodge estate | south yorkshire | ads are free in | stolen data | computer quiz answers | 1> pleurged ento a franch cermpeuter. (he he he) | 2> it mated with her. | 3> there all dogs. | 4> to calculate, to work out. | 5> just four letters ' s h i t ' | 6> the company which he started was ' atari ' | 7> true, his robot weaving machines used the first ever punch cards | 8> in 1981 1k of internal memory would have set you back | 99 pounds inc vat. | 9> under no cir | ** call these bbs's for the latest ** | ** warez from around the globe ** | pirates heaven / quartex | central europe / thrust hq | pleasure dome - (+46) 161 272 63 | seventh heaven - (+46) 40 455 784 | eagles nest - (+46) 255 114 77 | the crime zone - +46) 871 26 040 | kreators coding section | well i'm sorry to say but the work | load here at uni finally got on top of | me (ooh err!!) and i've had to | relinquish my post as editor of the | disk-magazine. as you will by now | know, mr-big has taken over and i'm | confident he'll do a great job, good | luck mate and sorry for springing it on | you so suddenly ! now for the | speedy bobs | 1) the first area you should | concentrate on optimising is the screen | clear routine. how you may ask, i use | the blitter so isnt that fast enough? | well the blitter when clearing areas | only uses one channel, thus most of the | processor time is left free. this is | often used to perform lengthy | calculations with the processor whilst | the blitter is busy, during which time | the processor runs at almost top s | we can also use this time to clear part | of the screen with the processor. the | fastest way is to use a movem.l | eg. suppose the blitter is clearing | the top part of the screen, and a0 | points to its start | lea screensize(a0),a0 | with experimentation you can find a | point at which both the blitter and the | processor require the same amount of | time to clear their respective areas of | 2) setting blitter nasty - when using | the blitter for plotting bobs, you | require the full 4 channels enabled. | this leaves almost no processor time | left over, and for reasonable sized | bobs it is unnecessary to wait for the | blitter to finish. | aindirect with index for the x and y | sine lookup tables, use address | register indirect with displacement and | precalculate the offsets. | thanks must go to del for bringing | to my attention how useful this little | opcode can be. its main use is in | defining data structures, but its also | very handy for creating variable lists | and allocating areas of memory. | the way in which the rs opcode | operates is qu | difference between using rs to create | variable lists rather than dc. | remember these labels we have created | are just offsets, but if we reserve an | area of memory large enough to | accomodate the variables, and then | assign an address register to this | memory area, we can refer to the | variables via the address register. so | instead of move xcoord,d0 we might have | move xcoord(a5),d0 ,this is much faster | than absolute addressing (although the | this way you don't need to keep | tabs on your memory situation, just let | creating code which is more expandable, | and easier to follow. if you need some | space for a table theres no need to | hunt through lists of addresses trying | to find a suitable space, just append | the block onto the end of the list, | it's as simple as that. | i hope you find this as useful as i | have, its yet another reason to give up | on seka which is after all a very | inferior assembler. now onto the main | article of this section. | the scroller is by far the most | common ( and most hated ) routine you | will find in a demo. it rears its ugly | head in many forms from the simple | horizontal scroller, to bob scrollers, | vector scrollers, vector bob scrollers, | the list is endless. obviously i | haven't the time nor space to cover | every possible variant, so i'll stick | to just a couple of the more common | horizontal scroller and the | sine-scroller. there will be source on | this disk covering both. | horizontal scrollers | i'm sure you all know what i mean | by this, but there are a number of ways | of tackling this p | it is to be displayed is only 46 bytes | across you must tell the video chip to | skip 34 bytes after displaying every | line. this is accomplished through | setting the modulo values to 34. for | more information see the relevant | manual ( systems guide or hardware | taking the above example a little | further (the included source is based | on this) we will consider how to write | such a double buffered scroller. we | can only traverse 34 bytes (272 pixe | move scrollpt(a5),d0 | add speed(a5),d0 | sub #256,d0 ;reset counter | move.l display(a5),d7 ;swap buffers | move d0,scrollpt(a5) | move d0,planelow | move d0,planehigh | move d1,scrollreg | of the display buffer into the front | end of the update buffer, then plot the | new characters into the remaining | section. the scroll counter runs up to | 256 pixels (32 bytes) which means | copying the remaining 48 bytes. i copy | 4 bytes per line every frame, so for a | 16*16 scroller in one bitplane this | involves a copy of just 32 words (64 | bytes) with the blitter, and it takes | 12 frames to copy the lot. then we get | to plotting the new characters, again | exists a utility by turbo slug of thr | which takes a normal screen and | converts it into this format for you. | i however prefer to use a standard | screen layout (320 pixels wide) iff | converted to the modulo format, such | that every line of the font contains | one line from each bitplane of the | original font. in this way a whole | character can be blitted in a single | operation. to use this format of font | requires a reference table however, | must now multiply the code by 2 (add to | itself) to convert it into a word | offset from the start of the table, but | if using the former method multiply by | the size of a character. | thats a pretty basic explanation of | the ideas behind double buffered | scrollers, i hope i haven't been too | simplistic in my ramblings. | i mentioned early on that there are | several methods for doing such | scrollers. the other common type is | the blitter scroller, which relie | >c5have produced a sine-scrolling intro in | their time, and the idea behind them is | quite simple. i wont go into all the | gory details, after all you'll never | learn to code if you don't put in some | effort, so you'll have to figure out | the technical details for yourselves. | the main idea behind these things | is to use bltafwm and bltalwm to mask | out a portion of a normal blitter | scroller, be it a single pixel width | line or more, and then or it onto a | e 1) the standard technique for speeding | up a routine is to remove all loops, | this is best achieved here by | generating your sine-scroll routines as | part of the setup routine. | 2) generally your sine-waves have | constant seperation, that is the amount | you add to your sine-pointer between | lines doesn't change during the course | of the scroller. therefore it is | quicker to calculate these offsets | before you run the routine, in the | setup. if you com | bine this with the | previous idea, and use indirect | addressing with displacement, with the | displacements as the offsets just | mentioned a saving is made in speed | 3) this method only works if you use | techniques 1 and 2, it only makes a | small saving but if you rearrange the | order of plotting the sine-scroller so | that all the segments using the same | bltafwm value are plotted sequentially | then you only need to set bltafwm at | the start of each bloc | 4) of course it goes without saying | always use indirect addressing modes | for every operation. in my fastest | sine scroller, i used every address | t of the setup routine. | 2) generally your sine-waves have | constant seperation, that is the amount | you add to your sine-pointer between | lines doesn't change during the course | of the scroller. therefore it is | quicker to calculate these offsets | before you run the routine, in the | setup. if you com | register including the stack as a | pointer which means references only | take 4 cycles. also use data registers | to hold commonly used data such as the | value placed in bltsize, which is the | same for every operation, and remeber | there are in excess of 300 blitter | operations, so every bit of | optimisation helps. | 5) use the fast blitter-processor | clear routine i outlined earlier. | now its down to you, if you want to | contact me for coding queries wr | interesting telephone numbers part # 2 | by jester of quartex | with the onslaught of the modem menace | i take the chance to let some of the | less ' crucial ' guys on the scene | know the facts about some of the toll | free international calls. | at&t - american telephone & telegraph | 0800 - 89 0011 - operator services | 89 0211 - operator services | 550 madison avenue. | new york, ny | 0800 - 89 0202 - operator services | - 89 1852 - customer services | 205 north michigan. | cccs - credit card calling system | 0800 - 89 1800 - operator services | new york, ny | iti - international telecharge inc. | 0800 - 89 1816 - operator services | here is the run down on the method of | payment for the afformentioned | at&t - at&t calling card only!!! | mci - mci or at&t calling cards | cccs - visa, mastercard, diners club | or american express. | iti - visa, mastercard, diners club | or american express. | to the best of my knowledge these are | the only telecommunication companys | that do toll free international calls. | the best lines are normally acheived | at off-peak t | imes (usa) or by catching | a fibre-optic line into iti, getting | this gives you a perfectly clear line | into the states. | contrary to popular belief nobody has | ever been prosecuted in the uk for | using one of the above, but this does | not mean that they can't. a more | likely argument would be that they | make so much money that the small sum | they lose by fraudulent calls does | not match up to enough to bother | installing sophisticated equipment | to trace callers. the only way would | be for someone to grass!! on someone | then have at&t and british telecom | monitor that line sufficiently to | gather evidence needed to prosicute. | any rumours floating about at&t are | just the imagination of sick pirates | who like to spoil the fun of others. | conferences have been controlled by | the likes of excalibur / fairlight | zodact / razor 1911 and myself!! | not only can this pastime be fun but | can be a good source of gossip among | the pirate fraternity, conferences | last for 5 hours ( this is the | maximum amount of time you are allowed | to use the alliance teleconferencing | system ). alliance is owned (suprise | suprise) by at&t (thus making their | profits even higher). the way to run | a radius is simply a system run by mci | that allows you to ring certain | countries, you can call most european | countries except sweden and w.germany. | you dial via at&t or mci and give them | type direct line number of the radius, | they contact you and you have to put | in a five digit code then the number | you want to call, very easy but again | hard to get. | thanks jester for the article, i'm | ---------------------- stolen data issue #3 ----------------------- | a tristar - dcs - anarchy co-production | page title author | 2 the editors bit mr big - anarchy | 3 partyscene mole - anarchy | f2 - 4-7 interview with phoenix jud | interview with lazerbrain/crusaders | by mole of anarchy | q: how old are you and how long have | you been in computers ? | a: i am 20 years old, and i have yet | to experience being in a computer! | oh, except once, when i was trying | to dig out the agnus and my codligs | got stuck in the serial port! no | seriously, ive been into computing | for about seven winters now. it | didn't take off though until | i got my amiga about two years ago. | q: can you give me a members list and | what they all do ? | whats your job in the group ? | a: ok, ill give em to you in a-z: | dr. shitface -coder | el cubo - coder | lazerbrain - swapper (thats me!) | swapperboy - take a wild guess! | zeb - hardware support | q: who"s your favourite: | group?, musician?, graphics artist? | musician: well, i actually think | are the best around, but there are | some other good ones as well, like | uncle tom, romeo knight, allister | brimble, and jesper kyd. | "beanbag" holmes, thomas richter. | and reward of scoopex. | stolen data #3 | other guys in kefrens obviously | know what they are doing. also the | fellas in rsi have gotten great | work done. | q: what are the crusaders future | a: right now were working on a new | music disk called bacteria, and | there is a megademo coming up | soon. apart from that we intend | to continue making some nifty | that way we get loads of votes | coming in, and i think that makes | the results more reliable. what we | do is count the votes, and present | the result to all amiga freaks | around the globe. this is done | every second month. | q: who's yor best contact (member and | a: it is very difficult to pick one | in particular. but i'd like to say | hi to dr.c, thanks for all the | great graphics. amongst the others | just a bunch of guys who decided | to get together as the crusaders. | q: who in your opinion are the top 3 | groups in norway? | a: in my opinion, it, razor, and | q: how would you describe the scene | in norway? | a: well, just like any other country | there are loads of lamers, but | there are a few groups who have | been in the game for a while, | these good few groups seem to be | able to stay at a good | 3d vectors in a demo. (they were | wern't they?) the norwegian soft- | ware business is rather small | though, so we depend much on what | comes from abroad. | q: what setup have you got (printer | everything a swapper needs! | q: what game do you play the most, | and which utility do you use the | a: games: empire ( the old classic | dear!!) in the first version. | i know some f the other guys use | q: what advice would you give to all | the freaks out there? | a: well that must be: keep your nob | shiny and your codlings fruitful | and look out for the forthcoming | crusaders productions comingm your | way really soon. meanwhile, why | dont you call up the crusaders bbs | norways biggest amiga bbs with | ------ dear mr drokk ----- | ----the soloution to your confusion---- | welcome to the first disk appearence of | the page designed to iron out the | wrinkles of a high pressure nineties | lifestyle. the page to turn to if you | think you can take no more. | and the man with the wet hankerchief is | none other than drokk, ..mr drokk! | dear mr drokk, | i need your help!!! i"m desperate, you | have to do something about my problem! | i'm the leader of and | that i, empire of the awsome powerlords | corp am the sexiest, hunkiest, bestest, | hottest, fastest, and of course, | coolest guy on the scene! people call | me an "egoistical wanker" and say that | "if my head swells any larger i'll | topple over" what the hell are they | talking about? i admit i used to have | the problem of being concieted, but | dont worry, now i'm perfect! | get the whole of the amiga scene to see | oh yeah, one more problem tell | the editors page | welcome to issue #3 of stolen data, the magazine for all you budding | crackers, coders, etc. as from this issue stolen data disk has a new editor | namely mr-big / anarchy. i hope to maintain the high standards set by kreator | in the first two issues. if you feel there is any way the magazine can be | improved, or if you have any articles to submit, here are the addresses to | well folks, thats the end of issue 3 | of stolen data. please send any | articles to the address on the | editors page. | to order the paper mag | send 3,50 dm and you will receive the | paper mag by post,this price includes | send 1 pound sterling or if possible | 5,00 dm sorry this price is more than | the germans but it costs more in | send all your orders to | on the editors page. | interview with fart/clones | by judge drokk / anarchy | jd- hi! what is your handle and what | group are you with? | ph -i'm a mail - swapper in a | subdivision of clones called | jd- how long has your group been | started at end of summer '89 and | we joined clones at christmas 89 | jd- who are the members of f.a.r.t.& | clones and what | are there | functions with the group(s) | ph- f.a.r.t. / clones members are | bozo(coder) and zammy (artist) | clones members are awcy(main | brains/nikki corruptions, | microman / nc, and sir arthur / nc | gizzy ( our main swapper! ), idle, | loafer, and mawerick, jukkis/nc | and foreign members sod (norway) | you see we have 24 members nowadays | jd- how did the subdivision "f.a.r.t" | come about? | ph- well few days before christmas | jukkis/nc/clones was visiting a guy | called sage. jukkis saw our | jd- what does f.a.r.t. stand for ? | ph- f.a.r.t. stands for finnish anemick | ratfaced thickheads | jd- some guys think that the clones are | perverted due to such pervy | productions as " twisted dreams " | is this the image that you aim to | promote or have people got the | wrong idea about you? | ph- you have got just right image of us | we are (and want to be) perverted | and weird (more than a little). now | i must say that the seve | start a young reporter a career | and can i do the next investigation | ph- that is the best way to start a | career as a reporter, coz it gives | the best feeling to the work. | and you ( and anyone else ) | can write articles to our maggy to | address: clones hq, poste restante | jd- if there was no amiga's in the | world, what would you be doing at | this very moment? | ph- i'm not sure.....ma | ph- we will release our new demo soon, | and utility disks are coming as | soon as i get nice utilities. | jd- thanks for your time | ......stay cool!!! | do you know anyone you can interview | if so get asking those questions | and send it to stolen data today | stolen data | 49 kirkstall road | new lodge estate | south yorkshire | jd - hi! what is your handle and what | group are you with? | ph - i'm a mail- swapper in a | subdivision of clones called | jd - how long has your group been | started at end of summer '89 and | we joined clones at christmas 89 | jd - who are the members of f.a.r.t.& | clones and what are there | functions with the group(s) | ph - f.a.r.t. / clones members are | and foreign members sod (norway) | you see we have 24 members nowadays | jd -how did the subdivision "f.a.r.t" | come about? | ph -well few days before christmas | jukkis/nc/clones was visiting a guy | called sage. jukkis saw our | utilitydisk#3.1, and he llloved our | name and he asked us to join clones | jd -in what ways are f.a.r.t seperated | from clones? do you have different | we have our own style of making | demos, look for example our new | it's style is much different from | jd -what does f.a.r.t. stand for? | ph -f.a.r.t. stands for finnish anemick | ratfaced thickheads | jd -some guys think that the clones are | perverted due to such | stolen data #3 | productions as " twisted dreams " | is this the image that you aim to | promote or have people got the | wrong idea about you? | ph -you have got just right image of us | we are (and want to be) perverted | and weird (more than a little). now | i must say that the seventh issue | of twisted dreams was released at | the horizon copyparty in goteburg | in sweden. it's called"the revenge" | and it includes dynamic hires pics | can write articles to our maggy to | address: clones hq, poste restante | jd -if there was no amiga"s in the | world, what would you be doing at | this very moment? | ph -i'm not sure.....maybe boozing with | some guys, or using other computer | (i'm not sure, what it would be.) | jd -do any of your members plan to put | their talents to a "legal" use | in the future (writing games etc.)? | ph -i have not heard any kind of | ------- gossip corner ------ | -have you heard the latest?- | -------by judge drokk------- | welcome to the first disk based | appearence of the stolen data gossip | page.a page designed to keep you up to | date with whats happening on the amiga | scene throughout the world. this time | this section is a little small, but | your help it will become much bigger. | send any news or important info that | you want the world to know about to | the usual "dear mr drokk" ad | bangers joke page | q: how do you say fuck off in jewish? | q: what is the definition of | a: when you walk into a wall with a | hard on and you bang your nose ! | q: what do you call a beautiful girl | in poland ? | q: why dont irish people eat pickled | a: they can't get their heads into | q: why dont italians eat fleas ? | a: because they cant get their littl | results of the stolen data music | here are the long awaited results | of the stolen data music competition | which appeard way back in issue #1. | the competition was held by silver | of errors, here are his reviews of | the winning tunes. | the jurys comment: this song | includes nice effects and clever use | of good samples. the | our favourites. the tune wraps | nicely into the ear, and gonzo | scores some extra points on his | short creative fill-ins. | there wasn't too many good musicians | we decided to let people enter with | up to two songs. about this second | track from mr fancy, there's not | much more to say than: wow! an | original mixture o | endings and fill in's and its great. | 4: fantasy land by lars frantzen | 5: alastor by nosferatu of alpha-fl | thanks silver for the reviews, we | hope to run more competitions in | future editions of stolen data | the top 3 tunes are on the disk and | can be accessed from the menu ! | jd - hi! what is your handle and | what group are you with ? | ph - i`m teeze of phoenix! | some coding!)...next... | jd - how long has your group been | ph - too `short` a time to tell. | i dont know, and i`m sure it is | not over yet! we will be active | as long as we have inspiration | jd - who are the members of phoenix | and what are there function | extazia (artist) | dr.strange (coder) | sensor (swapper) | sledge (artist) | lux interior (music) | dino (coder) | mosh (coder) | duke (swapper) | bad sector (artist) | hit (coder) | isis (coder), penguin (swapper) | "\ system (music) | * new zealand: | trojan blue, arm & a leg | jd - do you have a leader, who is | ph - i am! and creep! | jd - what is the scene like in your | country, and who are your | groups in europe? | ph - sweden is a very strong contry! | what else to say? | demogroups: public enemies | scoopex finland, red sector | jd - do you have modem traders in | ph - da! in new zealand and sweden!? | this is only a game and we do | this only for fun! we cant | modem-trade if we dont have money | to buy a modem for! simple! | jd - do you think that modem traders | are begining to take over the | scene, leaving none modemers | modemers can buy a modem if they | want! they have on | jd - do any of your members plan to | put their talents to a "legal" | use, in the future (writing | ph - who said phoenix had talented | members? yes! mosh and i will | make a shoot `em up, skywise and | marvin a car-game, zims + myself | a new rock `n roll, rubberboy and | hit and mtp a fighting game, | lexter and marvin a giana- sister | game and nitz and strange and | sensor an action | jd - do you have any plans or future | projects lined up? | ph - we are working on megademo 4, | many games and much more !!! | jd - anything else you want to add??? | ph - yeah! we have new members in | phoenix! soundwave from uk are | now dead...they joined phoenix! | but we need a few coders and | artists in u.k!! if you want to | join the phoenix members in the | uk then | party-time by mole / anarchy | copy partys are happening all over | europe all the time. in fact there are | so many some are arranged at the same | time ( pretty pointless really ! ! ) | with summer drawing closer and rumours | about copy partys growing i thought i'd | take a look at the forthcoming summer | party scene. | red sector inc. / silents 29-06-90 | this party sounds very interesting | it sounds like | a demo competition. | the usual uk groups will be there | and apparently slayer of scoopex is | coming, whether this is true or not is | anybodys guess !! | my god, a party in the south of | england. date not yet known !!!!!!! | there's nothing definate about this one | but dan of slipstream has told me | there will definatly be one. he also | said something about holding it in a | church hall ?!? oh well ne | interview with pheonix | by judge drokk / anarchy | jd- hi! what is your handle and | what group are you with ? | ph- i`m teeze of phoenix! | some coding!) ...next... | jd- how long has your group been | ph- too `short` a time to tell. | i dont know, and i`m sure it is | not over yet! we will be active | as long as we have inspiration | teeze (leader,swap) | creep (leader,swap) | nitz (artist) | marvin (artist,coder) | skywise (coder) | lexter (coder) | zims (coder) | extazia (artist) | dr.strange (coder) | sensor (swapper) | sledge (artist) | lux interior (music) | dino (coder) | mosh (coder) | duke (swapper) | bad sector (artist) | isis (coder), penguin (swapper) | stp sound system (music) | * new zealand: | trojan blue, arm & a leg | jd- do you have a leader, who is he? | ph- i am! and creep! | jd- what is the scene like in your | country, and who are your | favourite 5 demo and | groups in europe? | ph- sweden is a very strong country! | what else to say? | demogroups: public enemies and | stolen data #3 | scoopex finland, red sector | rebels, and also fairlight! | cracker groups: vision factory | mad, miracle, quartex and | jd- do you have modem traders in | ph- da! in new zealand and sweden!? | this is only a game and we do | this only for fun ! we cant | modem-trade if we dont have money | to buy a modem for ! simple ! | jd- do you think that modem traders | are begining to take over the | 9ene, leaving none modemers | modemers can buy a modem if they | want! they have only their self | jd- if there was no amiga's in the | world, what would you be doing | at this very moment? | stolen data #3 | ph- shit! i think i would be working | with the atari or c64! (dunk!) i | would work harder in school, | drink more booze, fuck a lot | and kill more commies !?!?! | jd- do any of your members plan to | put their talents to a "legal" | use, in the future (writing | ph- who said phoenix had talented | members? yes! mosh and i will | make a shoot `em up, skywise and | marvin a car-game, zims + myself | ph- there are too many disk mags. i | have my favorites like tech-times | d.i.s.c, smooth criminal, news on | tour, crackers journal and | stolen data! (jd forced me to say | jd- do you have any plans or future | projects lined up? | ph- we are working on megademo 4, | many games and much more !!! | jd- anything else you want to add??? | ph- yeah! we have new members in | or call: +46-0911-10029. | remember: never wear your best | pants when you go to fight | for freedom !!!! | jd- thanks for your time...stay cool | since this interview teeze has left | phoenix and is currently groupless! | send your articles to | stolen data | 49 kirkstall road | computer quiz | 1> where would you find a azerty keyboard ? | 2> in the movie demon seed what did the computer do to julie christie | 3> what do the following have in common ? rin tin tin, | lassie, and the spectrum +3 ? | 4> the word computer comes from the latin 'computo'? what does it mean ? | 5> if it takes seven men two years to program the game 'star trek', | how long does it take to review it ? | 6> in 1972 a young man ca | final samples from anarchy | the disk magazine for musicians. | during the summer of 1990, anarchy | will be launching a new disk based | magazine. this will be a magazine | quite different from others around at | the moment. "final samples " is a | magazine aimed at the amiga musician! | final samples is the brainchild of | one of britains most creative, and | talented musicians today.... 4-mat! | final samples will fe | latest work from the worlds best with | reviews!, interviews with top | sound utilities, with reults where | possible, samples & future composer | instruments. but to make the mag a | succsess we need your help. why not | submit an article, or send in that | new replayer for review? or why not | just write for more info to..... | final samples, 62 st peters cresent, | selsey, west sussex, po2o onp. england | stolen data issue 3 | stolen data #3 | stolen data #3 | wont go into detail about whats in this months issue. | but what i will do is tell you about forthcoming attractions | that we have planned... in the next issue we will have | an art gallery, with reviews by raphael of anarchy we hope | to get lots of entries for this ar | wont go into detail about whats in this months issue. | but what i will do is tell you about forthcoming attractions | that we have planned... in the next issue we will have | an art gallery, with reviews by raphael of anarchy we hope | to get lots of entries for this fe | \c welcome to issue three of stolen data | this is mr big | stolen data issue #3presented by mr big an anarchy productmake your selection | \c welcome to issue three of stolen data | this is mr big | of anarchy with the lowdown on this months offering... | but before we go any further here come the credits.... | all coding for this part .. kreator | im sure you all read the scroller in the intro, so i | wont go into detail about whats in this months issue. | but what what i will do is tell you about forthcoming attractions | that we have planned... in the next issue we will have | an art gallery, with reviews by raphael of anarchy we hope | to get lots of entries for th | is article, each piece which gets | put on the disk, will get reviewed. also we will have | a musicians column run by england greatest song writer | 4-mat he will bring you the latest info on what is | happening on the amiga's music scene, also interviews | with top musicians like dr.awsome, uncle tom, and romeo knight. | well i could go on all day but that's all iv'e got time | for so enjoy..... wrap | > text magazine | the winning tunes | in the stolen data | music competition | > live inside paula | by gonzo of flash | see reviews in the | text magazine for | a full update!! | if you want to | contribute an | stolen data | new lodge est | south yorks | stolen data | new lodge est | south yorks | \c welcome to issue three of stolen data | this is mr big of anarchy with the lowdown on this months offering... | but before we go any further here come the credits.... | all coding for this part .. kreator | im sure you all read the scroller in the intro, so i | wont go into detail about whats in this months issue. | but what i will do is tell you about forthcoming attractions | that we have planned... in the next issue we will have | an art gallery, with reviews by raphael of anarchy we hope | to get lots of entries for this feature, each piece of art which gets | put on the disk, will get reviewed. also we will have | a musicians column | run by englands greatest amiga musician | 4-mat he will bring you the latest info on what is | happening on the amiga's music scene, also interviews | with top musicians like dr.awsome, uncle tom, and romeo knight. | well i could go on all day but that's all iv'e got time | for so enjoy..... wrap | ave from uk are | now dead...they joined phoenix! | but we need a few coders and | artists in u.k!! if you want to | join the phoenix members in the | uk then send some samples to: | marc panther, 8 blacksail close | england!!! if you want to swap | with me teeze of phoenix, | |lled nolan bushnell wrote pong!, what did he | call his company ? | 7> true or false ? computer aided design robots were invented over 180 | years ago by joseph jacquard ? | 8> how much did 1k of internal memory cost in 1981 ? | 9> what restriction did gerry anderson place on grandslam when granting | the thunderbirds licence ? | 10> which computer game holds the record for the most versions released ? | all questions put together by mr big | another quiz for you in stolen data issue #4 | answers on following page | e movie demon seed what did the computer do to julie christie | 3> what do the following have in common ? rin tin tin, | lassie, and the spectrum +3 ? | 4> the word computer comes from the latin 'computo'? what does it mean ? | 5> if it takes seven men two years to program the game 'star trek', | how long does it take to review it ? | 6> in 1972 a young man ca | xnu anarchy presents a new compact compiled by mr big and j.drokk | ew lodge estate | south yorks | > text magazine | the winning tunes | in the stolen data | music competition | > live inside paula | by gonzo of flash | see reviews in the | text magazine for | a full update!! | if you want to | contribute an | thrilling, we would say close to a | masterpiece. we all congratulate | great throne of honour as the other | ones bite the dust !! | 2: live inside paula | by gonzo of flash productions | this was the first song that reached | the magazine, but its still one of | within the group? | ph - do you really want to know? | okay...you said it!.... | teeze (leader,swap) | creep (leader,swap) | nitz (artist) | marvin (artist,coder) | skywise (coder) | lexter (coder) | zims (coder) | stolen data #3 | send some samples to: | marc panther, 8 blacksail close | england!!! if you want to swap | with me: teeze of phoenix, | or call: +46-0911-10029. | remember: never wear your best | pants when you go to fight | for freedom !!!! | jd - thanks for your time! | .... stay cool!! | .f its going to be a real | big ' un!. all the top groups are | expected and first prize in the demo | contact red sector or silents for an | share and enjoy 28-07-90 | i dont know much about this one, i | expect it will be along the lines of | previous 'sae' partys with as usual | i heard something about a week long | party to be held by intuition at a | university. if there is any ive missed | drop me a line so i may take note of | 38 gladelands way | rebels, and fairlight! | cracker groups: vision factory | mad, miracle, quartex and | jd- who are the members of phoenix | and what are there functions | within the group? | ph- do you really want to know? | okay...you said it!.... | ly thier self | jd - if there was no amigas in the | world, what would you be doing | at this very moment? | ph - shit! i think i would be working | with the atari or c64! (dunk!) i | would work harder in school, | drink more booze, fuck a lot | and kill more commies! | hit (coder) | know when they will be ready? | some previews will be on our | jd - what are your views on the | current surge of disk mags on | the amiga scene, is there a real | interest in them? | ph - there are too many disk mags. i | have my favorites like tech-times | d.i.s.c, smooth criminal, news on | tour, crackers journal and | stolen data! (jd forced me to say | a new rock `n roll, rubberboy and | hit and mtp a fighting game, | lexter and marvin a giana- sister | game and nitz and strange and | sensor an action game! i dont | know when they will be ready? | some previews will be on our | jd- what is your view on the current | surge of disk mags on the amiga | scene, is there a real interest | in them? | utilitydisk#3.1, and he llloved our | name and he asked us to join clones | jd- in what ways are f.a.r.t seperated | from clones? do you have different | ph- we have our own style of making | demos, look for example our new | production called 'the spacecrafts' | it's style is much different from | vsybe boozing with | some guys, or using other computer | (i'm not sure, what it would be.) | jd- do any of your members plan to put | their talents to a "legal" use | in the future (writing games etc.)? | ph- i have not heard any kind of | rumours about that sort of plans, | and i dont suppose they are | planninng any legal projects. | jd -do you have any plans or future | projects lined up? | s as " twisted dreams " | is this the image that you aim to | promote or have people got the | wrong idea about you? | ph -you have got just right image of us | we are (and want to be) perverted | and weird (more than a little). now | i must say that the seventh issue | of twisted dreams was released at | the horizon copyparty in goteburg | in sweden. it's called"the revenge" | and it includes dynamic hires pics | [ phobos (that's me, swapper) | bozo(coder) and zammy (artist) | clones members are awcy(main | brains/nikki corruptions, | microman/nc, sir arthur/nc, | gizzy (our main swapper!), idle, | ocours about that sort of plans, | and i dont suppose they are | planninng any legal projects. | jd -do you have any plans or future | projects lined up? | ph -we will release our new demo soon, | and utilitydisks are coming as | soon as i get nice utilitys. | jd -thanks for your time | ......stay cool!!! | lets begin.. teeze has left | pheonix(sweden), and is at the time | of writing groupless! but rumour has | it that he may be joining rsi,we shall | see! judge has left tornado, now a | member of doom. animate are dead,full | details are not known but apache has | joined exodus, who now seem to be | becoming more active again, they | now have a u.k division. index has | left the hacking relation, and is | apparently forming a new group. | ws in your next stolen data! | -have you heard the latest?- | -------by judge drokk------- | welcome to the first disk based | appearence of the stolen data gossip | page.a page designed to keep you up to | date with whats happening on the amiga | scene throughout the world. this time | this section is a little small, but | your help it will become much bigger. | send any news or important info that | you want the world to know about to | the usual "dear mr drokk" ad | legs apart ! | q: what's black, white, and red and | crawls along the floor ? | a : a wounded nun ! | more jokes next issue | stolen data #3 | of twisted dreams was released at | the horizon copyparty in goteburg | in sweden. it's called"the revenge" | and it includes dynamic hires pics | and so it will be first x-rated | jd- in " final extasy ", there was an | investigation into prostitution | where you had sent a reporter to | find out the real facts, and he | ended up getting laid? do you | think that this is a good way to | ill be first x-rated | jd -in " final extasy ", there was an | investigation into prostitution | where you had sent a reporter to | find out the real facts, and he | ended up getting laid? do you | think that this is a good way to | start a young reporter a career | and can i do the next investigation | ph -that is the best way to start a | career as a reporter, coz it gives | the best feeling to the work. | and you (an | use cursors up/down to toggle text/background colours when copper is off! | use cursors left/right or right mouse button to turn pages | use function keys f1 - f10 for shortcuts (see above) | - 15-16 classified ad's and bbs numbers -- | f7 - 17-19 interview with fart/clones judge drokk - anarchy | f8 - 20 stolen data music comp results silver - errors | f9 - 21-23 interesting telephone numbers pt2 jester - quartex | national level. the latest few | months an enormous amount of new | really lame groups have emerged. | it looks like every bloody lamer | buying an amiga to copy and play | games want to start their own | super - lame group. but i still | think some of the best coders and | musicians come from norway, as far | as i can remember - it was the | very first group to present solid | & wargame), elite, stunt car racer | and it came from the desert. | utils: i dont use many cos i'm a | swapper, mostly x-copy and rattle | copy, pseudo-ops vk 2.0 and every- | thing that comes in handy at the | moment. of course our very own | " swappit " helps me keep track | we'll be releasing a new version | shortly, due to a fatal bug (oh | send them to....... | articles, ad's to order the paper mag dear mr drokk | stolen data michael eggers 9 back lane west | 49 kirkstall road im meere 11 royston | new lodge estate 3208 grob forste barnsley | barnsley west-germany south yorkshire | south yorkshire | ore than 800 active user's and | more than 2000 on line files, open | or (norway) 6 81 08 64. | q: thanks for doing the interview, | have you got a message to finish | off with? | a: if your cool (and cools the rule) | contact me for swapping the latest. | thanks to you as well for taking | the time. and good luck with sd!!! | s71 1rs (see end page) england | to contact kreator concerning coding etc, you'll find his address at the | end of his coding section. i must stress that this address is for coding | queries only not for ordering the magazine. | the awsome music you can hear is by our very own 4-mat | all coding by kreator | coolest member of | the best amiga crew in britain, no!, | make that the world!!! | in case you need reminding, i am | talking about the powerlords corp | (cooler than ice!!) you may wonder what | problem a guy like me could have, apart | from all that fan mail!! well i will | tell you. the whole amiga scene is | totaly lame!! "why?", you ask. | because everybody refuses to believe | productions, and generally having | a good time! | q: tell me and the readers about the | official crusaders euro - chart? | a: it is a new style of chart making. | whats different about it is that | everyone who wants to can vote | not just a few selected groups | like some other charts. we collect | the votes from all over the world | not just europe as the name implies | le who dont swap with me already | to write because i've run out of arses | yours egotisticaly | drokk says... | fuck me!, you big headed bastard! | what you need is to be brought down a | peg or two! you've got to realise that | you are'nt god's gift to amiga users, | and never will be. it apears that the | only way you'll realise this is for the | guys on the scene to let you know, so | guys, heres his address.. | re groups like vision,avoid | stinger!), abyss and many, many | q: how long have you been in the | group, and how did you join??? | a: i have been with it right from the | beginning, and that was way back | in 1988. how did i join? i just | walked in with a gun, and said | "take me in as a member, or eat | lead!!!" no just kidding " we were | henllys farm , towyn | hottest, fastest, and of course, | coolest guy on the scene! people call | me an "egoistical wanker" and say that | "if my head swells any larger i'll | topple over" what the hell are they | talking about? i admit i used to have | the problem of being concieted, but | dont worry, now i'm perfect! | get the whole of the amiga scene to see | oh yeah, one more problem tell | the same but the y position varies | according to a sine-table. if you | follow del's source, you'll see that he | has basically started at one side of | the scroller and then moved a pixel at | a time across it until he reaches the | far side. there is a large table of | long word values for bltafwm which | start at hex 80008000 and end with hex | 00010001 rotated to the right one each | time. then the sinetable is | the width of the | screen to give a y coordinate offset. | this technique is certainly easier | to follow but not particularly fast, to | optimise the routine try the following | put in some | effort, so you'll have to figure out | the technical details for yourselves. | the main idea behind these things | is to use bltafwm and bltalwm to mask | out a portion of a normal blitter | scroller, be it a single pixel width | line or more, and then or it onto a | f3 - 8-9 computer quiz mr big - anarchy | f4 - 10-13 interview with the crusaders mole - anarchy | f5 - 14 dear mr drokk judge drokk - anarchy | f6 - 15-16 classified ad's and bbs numbers -- | f7 - 17-19 interview with fart/clones judge drokk - anarchy | f8 - 20 stolen data music comp results silver - errors | f9 - 21-23 interesting telephone numbers pt2 jester - quartex | vf10 - 24-31 kreators coding page kreator - anarchy | keep those articles and letters coming in, we need your help to make this | magazine successful. thanks also to everyone who has written in with | articles for the previous issues. to submit articles etc write to the editor | (mr big) and to kreator for matters concerning coding not for orders. | you can find the addresses on the editors page!! | use del to toggle background colou | ]}qleconferencing and radius's | for the older pirate, this is more of | a nostalgic look at the fun times | back in the world of the long | forgotten commodore 64, when you were | woken up at 3 am by a crazy american | asking ' wanna be on a conference?! ' | usually these gatherings would have | the usual mix of the best known | pirates of the day. i was introduced | to the ' conference ' way back in | 1985 when the conferen | my address below but please do not send | orders to my address. i already have | enough contacts but i'm always happy to | reply to letters from fellow artists | (coders, graphic artists, musicians | etc.. not crackers). any suggestions | for future articles, or contributions | will be gladly accepted, | michael troughton | 42 browfield terrace, | west yorkshire, | pointer which means references only | take 4 cycles. also use data registers | to hold commonly used data such as the | value placed in bltsize, which is the | same for every operation, and remeber | there are in excess of 300 blitter | operations, so every bit of | optimisation helps. | 5) use the fast blitter-processor | clear routine i outlined earlier. | now its down to you, if you want to | contact me for coding queries wr | ce kings were | esi and rad, in more recent times | fraudulent calls does | not match up to enough to bother | installing sophisticated equipment | to trace callers. the only way would | be for someone to grass!! on someone | then have at&t and british telecom | monitor that line sufficiently to | gather evidence needed to prosicute. | any rumours floating about at&t are | just the imagination of sick pirates | who like to spoil the fun of others. | onference is a complicated one. | firstly you need a calling card to | call the states. then you need a pbx | which will give you an outside line | (usa). lastly you dial (from the pbx) | you will then be connected to the | alliance and controlling the system is | real easy, dial the number required | then hit # when you have them if you | want to join the conference you hit # | to put yourself in to end hit *. | if you manage to get a p | yourself they are very rare and very | zodact / razor 1911 and myself!! | not only can this pastime be fun but | can be a good source of gossip among | the pirate fraternity, conferences | last for 5 hours ( this is the | maximum amount of time you are allowed | to use the alliance teleconferencing | system ). alliance is owned (suprise | suprise) by at&t (thus making their | profits even higher). the way to run | readers will find it very | i hope to see you again at the | forthcoming 16 bit show and discuss | some more articles. | roblem. if you are | looking for a very fast, scroller its | best to opt for the double buffered | type. this means that while one | "buffer" is displayed on screen the | other "buffer" is being updated in the | background. then at some point after | the background buffer is ready, the two | are swapped and the process starts | again. this is possible with the use | of the bitplane modulo values. to | those of you saying "what !!!!" at this | moment, a modulo value al | ulows you to | only display a small portion of the | buffer, eg. if your buffer is 80 bytes | wide, but the overscan screen in which | to just a couple of the more common | horizontal scroller and the | sine-scroller. there will be source on | this disk covering both. | horizontal scrollers | i'm sure you all know what i mean | by this, but there are a number of ways | of tackling this p | before the buffer runs out, so we must | swap buffers before then. a counter is | incremented with the scrolling speed | every frame, and this is then converted | into bitplane pointers and hardware | scrolling registers. if the counter | exceeds a certain limit (in my case 256 | pixels) which must be less than the 272 | pixel range we calculated earlier, then | the limit is subtracted from the | counter. at the same time the two | buffers are swapped. i think an | ple will explain this better | eg. (following the convention for | variables i mentioned earlier in the rs | opcode discussion) | his is accomplished through | setting the modulo values to 34. for | more information see the relevant | manual ( systems guide or hardware | taking the above example a little | further (the included source is based | on this) we will consider how to write | such a double buffered scroller. we | can only traverse 34 bytes (272 pixe | 3 actually start | updating the buffers themselves. there | are two separate stages to creating the | new buffer: first copy the latter area | characters a frame and we need 32/2=16 | of these so it takes 8 frames to finish | the plotting procedure. | in order to plot the new characters | which is incremented each frame, and | set back to the start when a zero byte | is detected. fonts can be stored in a | number of ways. some people advocate | the method of storing each character | position of a particular let | symbol you multiply the character code | by a constant factor, the size of every | character. the main difficulty here is | putting the font into the correct | format in the first place but there | the remaining 48 bytes. i copy | 4 bytes per line every frame, so for a | 16*16 scroller in one bitplane this | involves a copy of just 32 words (64 | bytes) with the blitter, and it takes | 12 frames to copy the lot. then we get | to plotting the new characters, again | $e] to the start of every | character in the font. to see this | method in action, i suggest you study | in either method we must first | convert ascii into a usable format. | most fonts lack lower case letters, but | i prefer to type scrolltext into a text | editor naturally, so we want to convert | lower into upper case. to do this | compare the code with hex 5c, if | greater than this then subtract hex 20. | it is customary to have the space with | i code hex 20 (32) as the first | character in a font, the remainder | following in their natural ascii | sequence so subtract hex 20 from the | code. if using a reference table we | converted to the modulo format, such | that every line of the font contains | one line from each bitplane of the | original font. in this way a whole | character can be blitted in a single | operation. to use this format of font | requires a reference table however, | the blitter to shift the data rather | than the hardware scroller. clearly | this will be slower, but it has its | advantages. it is almost essential for | sine-scrollers, and for creating | scrollers over multicoloured backdrops. | i wont give a full discussion on this, | as they are essentially much simpler | than the above and the source provided | on this disk should be sufficient for | you to figure them out. | i assume we all know | these is. they are incredibly common | now, every group under the sun seems to | the start of the table, but | if using the former method multiply by | the size of a character. | thats a pretty basic explanation of | the ideas behind double buffered | scrollers, i hope i haven't been too | simplistic in my ramblings. | i mentioned early on that there are | several methods for doing such | scrollers. the other common type is | the blitter scroller, which relie | cumstances must there be any violence in the game. | 10> the record for the versions most released is ' chess ' | would you like to compile a quiz for stolen data ? | if so send your contributions to me for inclusion in a forthcoming issue | my address is on the editors page | mat your sintables so that no | unnecessary calculation is performed, | for instance have a separate table for | the bltcon0 and bltcon1 register pair | which is already ored with $fca0000 | derived from the x coordinate. ( this | is for the case a-mask b-bob c-screen ) | 4) always use indirect addressing, as | it's considerably faster than absolute | addressing. don't use address register | news, i will be carrying on with the | coding section and the coding of the | magazine in general. | in response to a very useful | comment from turbo slug of thr, i will | this month and in future issues have | small coding tips which aren't covered | by the main articles. this month i | will talk about some techniques used to | achieve fast bob routines, and i will | also outline the uses of the rs command | found in most assemblers (but not seka | r@2\ using seka its a | crap assembler !!) | well i'm sorry to say but the work | load here at uni finally got on top of | me (ooh err!!) and i've had to | relinquish my post as editor of the | disk-magazine. as you will by now | know, mr-big has taken over and i'm | confident he'll do a great job, good | luck mate and sorry for springing it on | you so suddenly ! now for the | ite simple. there is an | rs counter which is initially zero, | everytime an rs.x n opcode is | encountered the counter is incremented | by a certain amount determined by x and | n (x is either b,w, or l and n is any | positive integer) for instance rs.w 10 | you place a label before the rs.x | command, the label is assigned the | value of rs before it is incremented. | the rs counter can be set to any value | you want using rsreset | (set to zero) or | now this all seems a little | cosmetic so far, and whats the | precalculate the offsets. | thanks must go to del for bringing | to my attention how useful this little | opcode can be. its main use is in | defining data structures, but its also | very handy for creating variable lists | and allocating areas of memory. | the way in which the rs opcode | operates is qu | eed as pc relative but dont | forget you can't use pc relative | addressing mode in the second operand) | and more memory efficient. | examples. a variable list definition | ;------ memory allocation | keydat equ $bfec01 | keyint equ $bfed01 | ctrla equ $bfee01 | ctrlb equ $bfef01 | cia_a equ $bfe001 ;disk input bits | cia_b equ $bfd100 ;disk output bits | text dc.b " this sine scroller was coded by del. " | dc.b " it isn't very optimized but who cares? " | the equates at the top of the code" | dc.b " for different effects!!! " | cb.b 16*8,0 ;128 bytes for hardware sprites | wherecop dcb.b 2000,0 ;2k for copper list | section bud,data_c | font incbin binary/font.raw | section cake,bss_c | move.w #(256<<6)!20,bltsize(a6) ;256 high by 20 words wide | .ok bsr blitshift | .gog move.w #16,scrcount(a5) ;reset counter! | lea text(pc),a2 | move.w messcount(a5),d0 ;message count | .again moveq #0,d1 | move.b (a2,d0.w),d1 ;get char | bra.s .again ;wrap at a zero | move.w #stoptime*50,stop(a5) ;trigger stop | .nstop addq.w #1,messcount(a5) ;update scroll offset | lea scrarea+82,a0 | lea font,a1 | sub.w #32,d1 ;ascii conversion! | blt.s .nnl ;next line of chars? | lea 40*16(a1),a1 ;move down a line! | add.w d1,a1 ;get to char | .xloop move.w (a1),(a0) ;plot char! | dbra d0,.xloop ;loop for 16 high | blitshift moveq #-1,d0 | moveq #speed,d1 | lsl.w d2,d1 ;work out speed (shift!) | move.l d0,bltbpt(a6) ;init destination pointers! | lea masklook(pc),a0 | lea scrpos(pc),a1 | move.l a2,bltapt(a6) ;init source pointer! | lea bltafwm(a6),a3 | lea bltsize(a6),a4 | move.l a7,stacksave(a5) ;save stack! | lea bltapt+2(a6),a5 | .loop move.w d5,bltcon0(a6) ;d=a | move.w (a0)+,(a3) ;first word mask | move.w (a0)+,(a3) ;first word mask | addq.w #2,a2 ;next word along! | lea variables(pc),a5 | initsine lea originalsine(pc),a0 | .loop1 sub.w #128,(a0)+ ;init original sine | lea originalsine(pc),a0 | lea sine1(pc),a1 | .loop2 move.w (a0)+,d1 | move.w d1,(a1)+ ;make sinetable! | dosine lea sine1(pc),a0 | lea scrpos(pc),a1 | moveq #20-1,d7 ;20 words wide! | lea (a3,d2.w),a2 ;add offset 1 | move.w a2,(a1)+ ;scroll position! | addq.w #2,a3 ;next word along! | *** equates and data below! *** | aud0dat equ $aa | bpl4pth equ $0ec | color21 equ $1aa | color22 equ $1ac | color23 equ $1ae | cb.b 16*8,0 ;128 bytes for hardware sprites | wherecop dcb.b 2000,0 ;2k for copper list | section bud,data_c | font incbin binary/font.raw | section cake,bss_c | bsr intbuffer ;init double buffer! | bsr makecop ;make the copper list | bsr initsine ;init sinetable! | lea wherecop(pc),a0 | move.l a0,cop1lc(a6) ;tell system where copper is... | move.w copjmp1(a6),d0 ;and start it | move.w #$20,intreq(a6) ;clear vbi irq bit. | ****** main loop ****** | .button lea custom,a6 | t_ntreq(a6) ;clear vbi irq bit. | bsr cls ;clear screen! | bsr dosine ;do sine movement! | blitwait ;wait for blitter to stop clearing screen! | bsr scroll ;scroll message! | bsr blitsine ;blit scrolly onto screen | bsr doublebuffer ;double buffer the screen | btst #6,$bfe001 ;is left mouse button pressed? | bsr.s untrash ;bring back operating system | moveq #0,d0 ;stop a return error! | trash bset #1,$bfe001 ;turn power light off | lea gfxname | jsr -552(a6) ;open graphics library | move.l 38(a0),syscop(a5) ;store old system copper address! | lea custom,a6 | move.w intenar(a6),d0 ;get system irq register | or.w #$8000,d0 ;set top bit (for enable) | move.w dmaconr(a6),d0 ;get system dma register | or.w #$8000,d0 ;set top bit (for enable) | move.w #$7fff,intena(a6) ;all irq off | move.w #$7fff,dmacon(a6) ;all dma off | untrash lea | lea variables(pc),a5 | move.w dma(a5),dmacon(a6) ;restore system dma | move.w irq(a5),intena(a6) ;restore system irq | clr.w aud3vol(a6) ;clear volume registers | move.l syscop(a5),d0 ;get old system copper address | move.l d0,cop1lc(a6) ;and restore it! | lea intname(pc),a1 | bclr #1,$bfe001 ;power light back on | setmulti move.w d7,(a0)+ ;copper 32 bit write | intcustom clr.w bplcon1(a6) ;scroll value | move.w #$0038,ddfstrt(a6) ;data fetch start | move.w #$00d0,ddfstop(a6) ;data fetch stop | ;|(a6) ;window start | move.w #$2cc1,diwstop(a6) ;window stop | makecop lea wherecop(pc),a0 ;copperlist address | lea wherespr(pc),a1 ;first do sprites.. | moveq #16,d5 ;16 bytes per sprite! | move.l a0,changecop(a5) ;store copper address (for double buffer!) | move.l logbase(a5),d0 ;bitmap address | moveq #0,d5 ;plane length | move.l #$01001200,(a0)+ ;set 1 bitplane | move.l d0,(a0)+ ;wait for the impossible (end!) | deselect0 lea cia_b,a0 | bset #3,(a0) ;deselect drive 0 | bset #7,(a0) ;switch motor off | bclr #3,(a0) ;latch motor signal in disk | *********** end of setup *********** | intbuffer move.l #bitmap1,logbase(a5) ;init d | oublebuffer screen 1 | move.l #bitmap2,physbase(a5) ;init doublebuffer screen 2 | move.l changecop(a5),a0 ;update copper! | move.l d0,bltafwm(a6) ;first and last word mask | clr.w bltcon1(a6) ;no special modes | move.w #%0000000100000000,bltcon0(a6) ;no minterm just enable d! | stoptime equ 4 ;how many seconds scrolly pauses for! | blitwait macro | .bw\@ btst #6,2(a6) ;blitwait macro... | bne.s .bw\@ ;wait for blitter to stop | section del,code_c ;put everything into chip memory! | opt o+,ow-,p+ ;optimize on / warnings off / position independant | start lea variables(pc),a5 ;variables pointer in a5 | lea custom,a6 ;custom chip pointer in a6 | bsr deselect0 ;turn off drive 0 | bsr trash ;trash the operating system | bsr intcustom ;init screen size | lea (a3,d2.w),a2 ;add offset 1 | move.w a2,(a1)+ ;scroll position! | addq.w #2,a3 ;next word along! | *** equates and data below! *** | aud0dat equ $aa | bpl4pth equ $0ec | color21 equ $1aa | color22 equ $1ac | color23 equ $1ae | keydat equ $bfec01 | keyint equ $bfed01 | ctrla equ $bfee01 | ctrlb equ $bfef01 | cia_a equ $bfe001 ;disk input bits | cia_b equ $bfd100 ;disk output bits | text dc.b " this sine scroller was coded by del. " | dc.b " it isn't very optimized but who cares? " | the equates at the top of the code" | dc.b " for different effects!!! " | lea variables(pc),a5 | move.w dma(a5),dmacon(a6) ;restore system dma | move.w irq(a5),intena(a6) ;restore system irq | clr.w aud3vol(a6) ;clear volume registers | move.l syscop(a5),d0 ;get old system copper address | move.l d0,cop1lc(a6) ;and restore it! | lea intname(pc),a1 | bclr #1,$bfe001 ;power light back on | setmulti move.w d7,(a0)+ ;copper 32 bit write | intcustom clr.w bplcon1(a6) ;scroll value | move.w #$0038,ddfstrt(a6) ;data fetch start | move.w #$00d0,ddfstop(a6) ;data fetch stop | ;m(a6) ;window start | move.w #$2cc1,diwstop(a6) ;window stop | makecop lea wherecop(pc),a0 ;copperlist address | lea wherespr(pc),a1 ;first do sprites.. | moveq #16,d5 ;16 bytes per sprite! | move.l a0,changecop(a5) ;store copper address (for double buffer!) | move.l logbase(a5),d0 ;bitmap address | moveq #0,d5 ;plane length | move.l #$01001200,(a0)+ ;set 1 bitplane | move.l d0,(a0)+ ;wait for the impossible (end!) | deselect0 lea cia_b,a0 | bset #3,(a0) ;deselect drive 0 | bset #7,(a0) ;switch motor off | bclr #3,(a0) ;latch motor signal in disk | *********** end of setup *********** | intbuffer move.l #bitmap1,logbase(a5) ;init d | oublebuffer screen 1 | move.l #bitmap2,physbase(a5) ;init doublebuffer screen 2 | move.l changecop(a5),a0 ;update copper! | move.l d0,bltafwm(a6) ;first and last word mask | clr.w bltcon1(a6) ;no special modes | move.w #%0000000100000000,bltcon0(a6) ;no minterm just enable d! | move.w #(256<<6)!20,bltsize(a6) ;256 high by 20 words wide | .ok bsr blitshift | .gog move.w #16,scrcount(a5) ;reset counter! | lea text(pc),a2 | move.w messcount(a5),d0 ;message count | .again moveq #0,d1 | move.b (a2,d0.w),d1 ;get char | bra.s .again ;wrap at a zero | move.w #stoptime*50,stop(a5) ;trigger stop | .nstop addq.w #1,messcount(a5) ;update scroll offset | lea scrarea+82,a0 | lea font,a1 | sub.w #32,d1 ;ascii conversion! | blt.s .nnl ;next line of chars? | lea 40*16(a1),a1 ;move down a line! | add.w d1,a1 ;get to char | .xloop move.w (a1),(a0) ;plot char! | dbra d0,.xloop ;loop for 16 high | blitshift moveq #-1,d0 | moveq #speed,d1 | lsl.w d2,d1 ;work out speed (shift!) | move.l d0,bltbpt(a6) ;init destination pointers! | lea masklook(pc),a0 | lea scrpos(pc),a1 | move.l a2,bltapt(a6) ;init source pointer! | lea bltafwm(a6),a3 | lea bltsize(a6),a4 | move.l a7,stacksave(a5) ;save stack! | lea bltapt+2(a6),a5 | .loop move.w d5,bltcon0(a6) ;d=a | move.w (a0)+,(a3) ;first word mask | move.w (a0)+,(a3) ;first word mask | addq.w #2,a2 ;next word along! | lea variables(pc),a5 | initsine lea originalsine(pc),a0 | .loop1 sub.w #128,(a0)+ ;init original sine | lea originalsine(pc),a0 | lea sine1(pc),a1 | .loop2 move.w (a0)+,d1 | move.w d1,(a1)+ ;make sinetable! | dosine lea sine1(pc),a0 | lea scrpos(pc),a1 | moveq #20-1,d7 ;20 words wide! | cmp #$5b,d0 ; lower case characters, convert to uppercase | lea charpos(pc),a1 | lea font(pc),a1 | move.l a1,bltapth(a6) ; plot the new character | lea screen+$2c,a2 ; plot into the last position on the line | move d7,count(a5) | move d7,pixelscroll+2 | mov 0,color00 | mov 0,bplcon0 | mov 0,bplcon2 | mov 0,bpl1mod | mov 0,bpl2mod | mov 0,bplcon0 | dc.b "copyright anarchy 1990, coded of course by kreator" | dc.b " this scroller is probably the most useful because" | dc.b " it allows variable speeds to | l` be employed very easily" | dc.b " amongst other advantages " | incbin binary/bubble.font ; this font was drawn by kreator | ; so credit me if you use it | ; the following table is used to calculate a pointer to the required | ; character and in general must be created by hand. some coders advocate a | ; different approach, which is to have all your characters stacked on top | ; of each other and then the pointers are very easy to calculate with a | i still prefer this method myself. | int_set rs.w 1 ; system interrupts | dma_set rs.w 1 ; system dma channels | vbl_vec rs.l 1 ; "" vertical blanking interrupt | varisize rs.b 0 ; simply used to determine how much space is needed | ; for the variable list | variables dcb.b varisize ; reserve space for the variables | jsr -552(a6) ;open graphics library | move.l 38(a0),syscop(a5) ;store old system copper address! | lea custom,a6 | move.w intenar(a6),d0 ;get system irq register | or.w #$8000,d0 ;set top bit (for enable) | move.w dmaconr(a6),d0 ;get system dma register | or.w #$8000,d0 ;set top bit (for enable) | move.w #$7fff,intena(a6) ;all irq off | move.w #$7fff,dmacon(a6) ;all dma off | untrash lea | stoptime equ 4 ;how many seconds scrolly pauses for! | blitwait macro | .bw\@ btst #6,2(a6) ;blitwait macro... | bne.s .bw\@ ;wait for blitter to stop | section del,code_c ;put everything into chip memory! | opt o+,ow-,p+ ;optimize on / warnings off / position independant | start lea variables(pc),a5 ;variables pointer in a5 | lea custom,a6 ;custom chip pointer in a6 | bsr deselect0 ;turn off drive 0 | bsr trash ;trash the operating system | bsr intcustom ;init screen size | bsr intbuffer ;init double buffer! | bsr makecop ;make the copper list | bsr initsine ;init sinetable! | lea wherecop(pc),a0 | move.l a0,cop1lc(a6) ;tell system where copper is... | move.w copjmp1(a6),d0 ;and start it | move.w #$20,intreq(a6) ;clear vbi irq bit. | ****** main loop ****** | .button lea custom,a6 | t=ntreq(a6) ;clear vbi irq bit. | bsr cls ;clear screen! | bsr dosine ;do sine movement! | blitwait ;wait for blitter to stop clearing screen! | bsr scroll ;scroll message! | bsr blitsine ;blit scrolly onto screen | bsr doublebuffer ;double buffer the screen | btst #6,$bfe001 ;is left mouse button pressed? | bsr.s untrash ;bring back operating system | moveq #0,d0 ;stop a return error! | trash bset #1,$bfe001 ;turn power light off | lea gfxname | varisize rs.b 0 ; simply used to determine how much space is needed | ; for the variable list | variables dcb.b varisize ; reserve space for the variables | move #$7fff,intena(a6) ; clear all interrupts | move.l vbl_vec(a5),$6c.w ; restore vbl interrupt | move int_set(a5),d0 | move d0,intena(a6) ; restore system interrupts | move dma_set(a5),d0 | move d0,dmacon(a6) ; restore system dma | move.l sys_copl(a5),cop1lch(a6) ; restore system copperlist | ;setup - setup the menu system | ;-- remove the sprite data (prevents sprite streaks down the screen) | lea spr0data(a6),a0 | ;-- clear the scroll area | lea screen,a0 | ;-- initialise some variables | move.l #scrolltext,textpt(a5) ; initialise the scrolltext | l #clstart,cop1lch(a6) ; init. our own copperlist | move #scrollspeed,speed(a5) | ; main - central demo calling routine + mouse button check | cmp.l #$00100,d0 ; wait for vertical position 1 | bsr scroller ; jump to the scroll routine | btst #6,$bfe001 ; check the left mouse button | ; scroller - this scroller is 46 bytes across all of which are displayed | move count(a5),d7 | sub speed(a5),d7 ; counter tells us if we need a | bpl nonewchar ; new character | croll area left 2 | move.l #screen,bltdpth(a6) ; careful, here as the shift operation | ; obliterates the word screen-2 | move.b (a0)+,d0 ; read a char. from scrolltext | bne.s not_null ; if zero, reset text pointer | lea scrolltext(pc),a0 | bra.s read_char ; read the first character | cmp #$20,d0 ; check for control codes, and | chip registers ($dff000) and a5 points to the list of variables.this allows | ; indirect addressing modes to be used, which are much faster than absolute | ; addressing and consume less memory. if these registers are needed in the | ; course of a routine simply stick them on the stack, and pop them back off | include source/newcustomreg ; custom register label equates | section scroller,code | x_c ; assemble into chip mem if > | test = 1 ; set this if you are only testing the menu | ; as it will then return to devpac | scrollspeed = 6 ; alter this for different speeds, you can | ; change the variable speed during the demo | ; for alterable speeds. | move.l #start,$80.w ; trap vector 0 | trap #0 ; execute trap 0 to give full control of the | <"8pqs ; disable the operating system | bsr setup ; setup the demo | bsr main ; now run the main demo routines | bsr sysreturn ; return the system to its original state | moveq.l #0,d0 ; no errors !! a number of people neglect to | ; do this, and that causes batch files (such | ; as the startup sequence) to bomb out. | rte ; return from exception ie. to the instruction after | - disable operating system and interrupts | move.l $4.w,a6 ; execbase vector | lea gfxname(pc),a1 ; pointer to "graphics.library" into a1 | jsr oldopen(a6) ; open this library | lea variables,a5 ; get a pointer to the variable space | lea $dff000,a6 ; pointer to custom chips | move.l d0,a0 ; address of the graphics library | move.l 38(a0),sys_copl(a5) ; remember the system copperlist | move intenar(a6),in | v?t_set(a5) ; system interrupts | move #$7fff,intena(a6) ; now switch off all interrupts | move.l $6c.w,vbl_vec(a5) ; system vertical blanking int. | move dmaconr(a6),dma_set(a5) ; system dma | move #$87c0,dmacon(a6) ; now set the required dma channels | ;sysreturn - re-enable operating system and interrupts | lg be employed very easily" | dc.b " amongst other advantages " | incbin binary/bubble.font ; this font was drawn by kreator | ; so credit me if you use it | ; the following table is used to calculate a pointer to the required | ; character and in general must be created by hand. some coders advocate a | ; different approach, which is to have all your characters stacked on top | ; of each other and then the pointers are very easy to calculate with a | i still prefer this method myself. | int_set rs.w 1 ; system interrupts | dma_set rs.w 1 ; system dma channels | vbl_vec rs.l 1 ; "" vertical blanking interrupt | stolen data issue #3 on disk and paper an anarchy productmake your selection | \c welcome to issue three of stolen data | this is mr big | of anarchy with the lowdown on this months offering... | but before we go any further here come the credits.... | all coding for this part .. kreator | im sure you all read the scroller in the intro, so i | wont go into detail about whats in this months issue. | but what i will do is tell you about forthcoming attractions | that we have planned... in the next issue we will have | an art gallery, with reviews by raphael of anarchy we hope | to get lots of entries for this fe | ature. the top three peices of | work received each month will appear on the disk. another new | feature begining next issue will be a music review section | hosted by none other than anarchy's very own 4-mat, again the top | three works reviewed will appear on the disk (space permitting) and lots more, | so until next issue.... seeya !!.. wrap | > text magazine | the winning tunes | in the stolen data | b3isic competition | > live inside paula | by gonzo of flash | see reviews in the | text magazine for | a full update!! | if you want to | contribute an | stolen data | new lodge est | south yorks | \c welcome to issue three of stolen data | this is mr big | croll area left 2 | move.l #screen,bltdpth(a6) ; careful, here as the shift operation | ; obliterates the word screen-2 | move.b (a0)+,d0 ; read a char. from scrolltext | bne.s not_null ; if zero, reset text pointer | lea scrolltext(pc),a0 | bra.s read_char ; read the first character | cmp #$20,d0 ; check for control codes, and | cmp #$5b,d0 ; lower case characters, convert to uppercase | lea charpos(pc),a1 | lea font(pc),a1 | move.l a1,bltapth(a6) ; plot the new character | lea screen+$2c,a2 ; plot into the last position on the line | move d7,count(a5) | move d7,pixelscroll+2 | mov 0,color00 | mov 0,bplcon0 | mov 0,bplcon2 | mov 0,bpl1mod | mov 0,bpl2mod | mov 0,bplcon0 | dc.b "copyright anarchy 1990, coded of course by kreator" | dc.b " this scroller is probably the most useful because" | dc.b " it allows variable speeds to | dc.b "insert your own scrolltext here !!!" | dc.b " this scroller was written for " | dc.b "stolen data, copyright anarchy 1990" | variables dcb.b varisize ; reserve space for the variables | l #clstart,cop1lch(a6) ; init. our own copperlist | move #scrollspeed,speed(a5) | ; main - central demo calling routine + mouse button check | cmp.l #$00100,d0 ; wait for vertical position 1 | bsr scroller ; jump to the scroll routine | btst #6,$bfe001 ; check the left mouse button | ; scroller - this scroller is 46 bytes across all of which are displayed | move count(a5),d7 | sub speed(a5),d7 ; counter tells us if we need a | bpl nonewchar ; new character | chip registers ($dff000) and a5 points to the list of variables.this allows | ; indirect addressing modes to be used, which are much faster than absolute | ; addressing and consume less memory. if these registers are needed in the | ; course of a routine simply stick them on the stack, and pop them back off | include source/newcustomreg ; custom register label equates | section scroller,code | _c ; assemble into chip mem if > | test = 1 ; set this if you are only testing the menu | ; as it will then return to devpac | scrollspeed = 6 ; alter this for different speeds, you can | ; change the variable speed during the demo | ; for alterable speeds. | move.l #start,$80.w ; trap vector 0 | trap #0 ; execute trap 0 to give full control of the | s ; disable the operating system | bsr setup ; setup the demo | bsr main ; now run the main demo routines | bsr sysreturn ; return the system to its original state | moveq.l #0,d0 ; no errors !! a number of people neglect to | ; do this, and that causes batch files (such | ; as the startup sequence) to bomb out. | rte ; return from exception ie. to the instruction after | - disable operating system and interrupts | move.l $4.w,a6 ; execbase vector | lea gfxname(pc),a1 ; pointer to "graphics.library" into a1 | jsr oldopen(a6) ; open this library | lea variables,a5 ; get a pointer to the variable space | lea $dff000,a6 ; pointer to custom chips | move.l d0,a0 ; address of the graphics library | move.l 38(a0),sys_copl(a5) ; remember the system copperlist | move intenar(a6),in | u]t_set(a5) ; system interrupts | move #$7fff,intena(a6) ; now switch off all interrupts | move.l $6c.w,vbl_vec(a5) ; system vertical blanking int. | move dmaconr(a6),dma_set(a5) ; system dma | move #$87c0,dmacon(a6) ; now set the required dma channels | ;sysreturn - re-enable operating system and interrupts | move #$7fff,intena(a6) ; clear all interrupts | move.l vbl_vec(a5),$6c.w ; restore vbl interrupt | move int_set(a5),d0 | move d0,intena(a6) ; restore system interrupts | move dma_set(a5),d0 | move d0,dmacon(a6) ; restore system dma | move.l sys_copl(a5),cop1lch(a6) ; restore system copperlist | ;setup - setup the menu system | ;-- remove the sprite data (prevents sprite streaks down the screen) | lea spr0data(a6),a0 | ;-- clear the scroll area | lea screen,a0 | ;-- initialise some variables | move.l #scrolltext,textpt(a5) ; initialise the scrolltext | ;sysreturn - re-enable operating system and interrupts | move #$7fff,intena(a6) ; clear all interrupts | move.l vbl_vec(a5),$6c.w ; restore vbl interrupt | move int_set(a5),d0 | move d0,intena(a6) ; restore system interrupts | move dma_set(a5),d0 | move d0,dmacon(a6) ; restore system dma | op1lch(a6) ; restore system copperlist | ;setup - setup the menu system | ;-- remove the sprite data (prevents sprite streaks down the screen) | lea spr0data(a6),a0 | ;-- clear the scroll area | lea screen1,a0 | ;-- initialise some variables | move.l #screen1+80,current_bank(a5) ; the two double buffered | move.l #screen2+80,other_bank(a5) ; scroll areas | move.l #scrolltext,text_pt(a5) ; initialise the scrolltext | move #5,speed(a5) ; set the scroll speed | move.l #clstart,cop1lch(a6) ; init. our own copperlist | ; main - central demo calling routine + mouse button check | cmp.l #$00100,d0 ; wait for vertical position 1 | bsr scroller ; jump to the scroll routine | move #$200,d0 ; small delay loop, this is needed because | .loop ; in general the scroll routine uses less | dbf d0,.loop ; than 1 raster line.as soon as more routines | ; are added this is no longer required. | btst #6,$bfe001 ; check the left mouse button | move scroll_pt(a5),d0 | add speed(a5),d0 | move d0,scroll_pt(a5) | add current_bank+2(a5),d0 | add current_bank+2(a5),d2 | lea scroll_planes+2(pc),a0 | move d1,scroll+2 | beq no_blitting | move mode(a5),d2 | beq control_char | lea charpos(pc),a0 | lea font(pc),a1 | move mode(a5),d0 | move d0,speed(a5) | ; copperlist1 for the menu selector screen | wait 0,20 ; give the processor time to update the cl. | mov $abd1,diwstop | mov $0028,ddfstrt ; horizontal scrolling overscan screen | mov 0,color00 | mov $aaa,color03 | mov 34,bpl1mod | mov 34,bpl2mod | mov 0,bplcon1 | mov 0,bplcon2 | incbin binary/bubble.font | beq control_char | lea charpos(pc),a0 | lea font(pc),a1 | move mode(a5),d0 | move d0,speed(a5) | ; copperlist1 for the menu selector screen | wait 0,20 ; give the processor time to update the cl. | mov $abd1,diwstop | mov $0028,ddfstrt ; horizontal scrolling overscan screen | mov 0,color00 | mov $aaa,color03 | mov 34,bpl1mod | mov 34,bpl2mod | mov 0,bplcon1 | mov 0,bplcon2 | incbin binary/bubble.font | dc.b "insert your own scrolltext here !!!" | dc.b " this scroller was written for " | dc.b "stolen data, copyright anarchy 1990" | variables dcb.b varisize ; reserve space for the variables | are much faster than absolute | ; addressing and consume less memory. if these registers are needed in the | ; course of a routine simply stick them on the stack, and pop them back off | include source/newcustomreg ; custom register label equates | section scroller,code_c ; assemble into chip mem if > | move.l #start,$80.w ; trap vecto | trap #0 ; execute trap 0 to give full control of the | bsr killsys ; disable the operating system | bsr setup ; setup the demo | bsr main ; now run the main demo routines | bsr sysreturn ; return the system to its original state | moveq.l #0,d0 ; no errors !! a number of people neglect to | ; do this, and that causes batch files (such | ; as the startup sequence) to bomb out. | rte ; return from exception ie. to the instruction | ;killsys - disable operating system and interrupts | move.l $4.w,a6 ; execbase vector | lea gfxname(pc),a1 ; pointer to "graphics.library" into a1 | jsr oldopen(a6) ; open this library | lea variables,a5 ; get a pointer to the variable space | lea $dff000,a6 ; pointer to custom chips | ; address of the graphics library | move.l 38(a0),sys_copl(a5) ; remember the system copperlist | move intenar(a6),int_set(a5) ; system interrupts | move #$7fff,intena(a6) ; now switch off all interrupts | move.l $6c.w,vbl_vec(a5) ; system vertical blanking int. | move dmaconr(a6),dma_set(a5) ; system dma | move #$87c0,dmacon(a6) ; now set the required dma channels | int_set rs.w 1 ; system interrupts | dma_set rs.w 1 ; system dma channels | vbl_vec rs.l 1 ; "" vertical blanking interrupt | scroll_pt rs.w 1 ; scroll pointer, offset in pixels | mode rs.w 1 ; <12 copy old, >=12 <20 new chars, =20 stop | current_bank rs.l 1 ; currently displayed scroller | other_bank rs.l 1 ; the update scroller | eed (must be less than 12) | varisize rs.b 0 ; simply used to determine how much space is needed | ; for the variable list | variables dcb.b varisize ; reserve space for the variables | ;-- reserve some space for screens etc.. | a, copyright anarchy 1990" | trap #0 ; execute trap 0 to give full control of the | bsr killsys ; disable the operating system | bsr setup ; setup the demo | bsr main ; now run the main demo routines | bsr sysreturn ; return the system to its original state | moveq.l #0,d0 ; no errors !! a number of people neglect to | ; do this, and that causes batch files (such | ; as the startup sequence) to bomb out. | rte ; return from exception ie. to the instruction | ;killsys - disable operating system and interrupts | move.l $4.w,a6 ; execbase vector | lea gfxname(pc),a1 ; pointer to "graphics.library" into a1 | jsr oldopen(a6) ; open this library | lea variables,a5 ; get a pointer to the variable space | lea $dff000,a6 ; pointer to custom chips | ; address of the graphics library | move.l 38(a0),sys_copl(a5) ; remember the system copperlist | move intenar(a6),int_set(a5) ; system interrupts | move #$7fff,intena(a6) ; now switch off all interrupts | move.l $6c.w,vbl_vec(a5) ; system vertical blanking int. | move dmaconr(a6),dma_set(a5) ; system dma | move #$87c0,dmacon(a6) ; now set the required dma channels | ;sysreturn - re-enable operating system and interrupts | move #$7fff,intena(a6) ; clear all interrupts | move.l vbl_vec(a5),$6c.w ; restore vbl interrupt | move int_set(a5),d0 | move d0,intena(a6) ; restore system interrupts | move dma_set(a5),d0 | move d0,dmacon(a6) ; restore system dma | op1lch(a6) ; restore system copperlist | ;setup - setup the menu system | ;-- remove the sprite data (prevents sprite streaks down the screen) | lea spr0data(a6),a0 | ;-- clear the scroll area | lea screen1,a0 | ;-- initialise some variables | move.l #screen1+80,current_bank(a5) ; the two double buffered | move.l #screen2+80,other_bank(a5) ; scroll areas | move.l #scrolltext,text_pt(a5) ; initialise the scrolltext | move #5,speed(a5) ; set the scroll speed | move.l #clstart,cop1lch(a6) ; init. our own copperlist | ; main - central demo calling routine + mouse button check | cmp.l #$00100,d0 ; wait for vertical position 1 | bsr scroller ; jump to the scroll routine | move #$200,d0 ; small delay loop, this is needed because | .loop ; in general the scroll routine uses less | dbf d0,.loop ; than 1 raster line.as soon as more routines | ; are added this is no longer required. | btst #6,$bfe001 ; check the left mouse button | move scroll_pt(a5),d0 | add speed(a5),d0 | move d0,scroll_pt(a5) | add current_bank+2(a5),d0 | add current_bank+2(a5),d2 | lea scroll_planes+2(pc),a0 | move d1,scroll+2 | beq no_blitting | move mode(a5),d2 | the display and update | move.l other_bank(a5),current_bank(a5) ; scroll banks | sub #256,d0 ; reset the scroll pointer | move d0,scroll_pt(a5) | move d0,d1 ; remember d0 for calculating the shift register | lsr #4,d0 ; convert d0 into a byte pointer on a word boundary | add current_bank+2(a5),d0 ; add the current | move d0,scroll_planes+2 ; stick it into the bitplane pointers | and #$0f,d1 ; only first four bits needed fo | !r shift register | eor #$0f,d1 ; its a right shift so invert the bits as we are | ; scrolling left | move d1,scroll+2 ; put it into the bplcon1 register | beq no_blitting ; the update screen is ready | blt char_scroll ; move the old characters | move mode(a5),d2 | lsl #2,d2 ; multiply mode by four ( 48-76 ) | lea (a2,d2),a2 ; add mode*4 to the update screen pointer | bsr read_char ; read the next charact | x/er and plot it | addq.l #2,a2 ; point to the next screen character position | bsr read_char ; then read another character and plot it | bra blit_exit ; thats it for now. | move.l text_pt(a5),a0 ; scrolltext pointer | bne.s not_a_null ; if 0 then reset the scrolltext pointer | bra.s new_char ; read the first character | cmp #$20,d0 ; less than 32, then consider as a space | wmp #$5b,d0 ; convert lowercase to uppercase | move.l a0,text_pt(a5) ; save the new scrolltext pointer | add d0,d0 ; convert ascii into a word pointer | lea charpos(pc),a0 ; table of character positions | lea font(pc),a1 | lea (a1,d1),a1 ; a1 now points to the required character | ; graphic image. | direct copy from a to d | move #(16<<6)!1,bltsize(a6) ; 16 pixels deep | bra blit_wait ; wait for the blitter to finish | move mode(a5),d0 | ~stwo whole characters at once | addq #1,mode(a5) ; move the mode on one | btst #14,dmaconr(a6) ; is the blitter still at work? | bne.s blit_wait ; yes, well carry on waiting then. | ; copperlist1 for the menu selector screen | ; for those readers unfamiliar with my coding, i generally use macros for | ; generating my copperlists. these i find to be easier t | ; take a little longer to assemble, obviously though for much larger | ; copperlists (such as the background effect on the menu-loader) a generating | ; routine should be employed. | wait 0,20 ; give the processor time to update the cl. | mov $aad1,diwstop | mov $0028,ddfstrt ; horizontal scrolling overscan screen | mov $00d8,ddfstop ; ie. 368 pixels wide | mov $aaa,color03 | mov 34,bpl1mod ; scroller is actually 80 bytes wide | mov 0,bplcon1 | mov 0,bplcon2 | mov $1200,bplcon0 ; single bitplane | incbin binary/bubble.font ; this font was drawn by kreator | credit me if you use it | ; the following table is used to calculate a pointer to the required | ; character and in general must be created by hand. some coders advocate a | ; different approach, which is to have all your characters stacked on top | ; of each other and then the pointers are very easy to calculate with a | ; multiply. i still prefer this method myself. | ; zero terminated scrolltext, allows a mixture of upper and lower case | kd)xt will be displayed in uppercase. also you can edit | ; the text in any text editor, as the scroller counts all control characters | ; such as 10 (line feed) as spaces. | dc.b "insert your own scrolltext here !!!" | dc.b " this scroller was written for " | dc.b "stolen data, copyright anarchy 1990" | on the stack, and pop them back off | ; scroller2 is very similar to this one but the scroll routine is not fully | ; commented, but uses a technique commonly employed recently to get a base- | ; relief 2 bitplane font from a single bitplane font. you'll have to figure | ; it out for yourself, but its not difficult. | include source/newcustomreg ; custom register label equates | section scrolle | r,code_c ; assemble into chip mem if > | test = 1 ; set this if you are only testing the menu | ; as it will then return to devpac | move.l #start,$80.w ; trap vector 0 | trap #0 ; execute trap 0 to give full control of the | bsr killsys ; disable the operating system | bsr setup ; setup the demo | bsr main ; now run the main demo routines | bsr sysreturn ; return the system to its | original state | moveq.l #0,d0 ; no errors !! a number of people neglect to | ; do this, and that causes batch files (such | ; as the startup sequence) to bomb out. | rte ; return from exception ie. to the instruction after | ;killsys - disable operating system and interrupts | xecbase vector | lea gfxname(pc),a1 ; pointer to "graphics.library" into a1 | jsr oldopen(a6) ; open this library | lea variables,a5 ; get a pointer to the variable space | lea $dff000,a6 ; pointer to custom chips | move.l d0,a0 ; address of the graphics library | move.l 38(a0),sys_copl(a5) ; remember the system copperlist | move intenar(a6),int_set(a5) ; system interrupts | move #$7fff,intena(a6) ; now switch off all interrupts | move.l $6c.w,vbl_vec(a5) ; system vertical blanking int. | ee dmaconr(a6),dma_set(a5) ; system dma | move #$87c0,dmacon(a6) ; now set the required dma channels | ;sysreturn - re-enable operating system and interrupts | move #$7fff,intena(a6) ; clear all interrupts | move int_set(a5),d0 | move d0,intena(a6) ; restore system interrupts | move dma_set(a5),d0 | move d0,dmacon(a6) ; restore system dma | move.l sys_copl(a5),cop1lch(a6) ; restore system copperlist | ;setup - setup the menu system | the sprite data (prevents sprite streaks down the screen) | lea spr0data(a6),a0 | ;-- clear the scroll area | lea screen1,a0 | ;-- initialise some variables | move.l #screen1,current_bank(a5) ; the two double buffered | move.l #screen2,other_bank(a5) ; scroll areas | move.l #scrolltext,text_pt(a5) ; initialise the scrolltext | move #5,speed(a5) ; set the scroll speed | n-=jsmove.l #clstart,cop1lch(a6) ; init. our own copperlist | ; main - central demo calling routine + mouse button check | cmp.l #$00100,d0 ; wait for vertical position 1 | bsr scroller ; jump to the scroll routine | move #$200,d0 ; small delay loop, this is ne | <ceded because | .loop ; in general the scroll routine uses less | dbf d0,.loop ; than 1 raster line.as soon as more routines | ; are added this is no longer required. | btst #6,$bfe001 ; check the left mouse button | ; scroller - the scroller is 80 bytes across of which only 46 are displayed | ; at any one time. while one is displayed the other is updated, the last 48 | ; bytes (ie. 24 charcte | rs) of the displayed scroller are copied into the | ; first 48 bytes of the other. then the remaining 32 bytes (16 characters) | ; are plotted, from the scrolltext. every frame two af these characters are | ; copied, so it takes 20 frames to create the new scroll bank, and the banks | ; are switched when the scroll pointer exceeds 256 (this pointer is just a | ; pixel offset from the start of the displayed scroller) this means that the | ; maximum speed of the scroller is about 256/20 = 12 pixel | s per frame. | ; scroll_pt - the aforementioned scroll pointer | ; mode - indicates if we need to copy the old data, or create new data from | ; the scrolltext. <12 means copy old data =>12&<20 means use the | ; scrolltext =20 means finished updating the scroller. | move scroll_pt(a5),d0 | add speed(a5),d0 | cmp #256,d0 ; do we need a bank change | fmp #$5b,d0 ; convert lowercase to uppercase | move.l a0,text_pt(a5) ; save the new scrolltext pointer | add d0,d0 ; convert ascii into a word pointer | lea charpos(pc),a0 ; table of character positions | lea font(pc),a1 | lea (a1,d1),a1 ; a1 now points to the required character | ; graphic image. | direct copy from a to d | move #(16<<6)!1,bltsize(a6) ; 16 pixels deep | bra blit_wait ; wait for the blitter to finish | move mode(a5),d0 | ~btwo whole characters at once | addq #1,mode(a5) ; move the mode on one | btst #14,dmaconr(a6) ; is the blitter still at work? | bne.s blit_wait ; yes, well carry on waiting then. | ; copperlist1 for the menu selector screen | ; for those readers unfamiliar with my coding, i generally use macros for | ; generating my copperlists. these i find to be easier t | ; take a little longer to assemble, obviously though for much larger | ; copperlists (such as the background effect on the menu-loader) a generating | ; routine should be employed. | wait 0,20 ; give the processor time to update the cl. | mov $aad1,diwstop | mov $0028,ddfstrt ; horizontal scrolling overscan screen | mov $00d8,ddfstop ; ie. 368 pixels wide | mov $aaa,color03 | mov 34,bpl1mod ; scroller is actually 80 bytes wide | mov 0,bplcon1 | mov 0,bplcon2 | mov $1200,bplcon0 ; single bitplane | incbin binary/bubble.font ; this font was drawn by kreator | credit me if you use it | ; the following table is used to calculate a pointer to the required | ; character and in general must be created by hand. some coders advocate a | ; different approach, which is to have all your characters stacked on top | ; of each other and then the pointers are very easy to calculate with a | ; multiply. i still prefer this method myself. | ; zero terminated scrolltext, allows a mixture of upper and lower case | xt will be displayed in uppercase. also you can edit | ; the text in any text editor, as the scroller counts all control characters | ; such as 10 (line feed) as spaces. | dc.b "insert your own scrolltext here !!!" | dc.b " this scroller was written for " | dc.b "stolen data, copyright anarchy 1990" | int_set rs.w 1 ; system interrupts | dma_set rs.w 1 ; system dma channels | vbl_vec rs.l 1 ; "" vertical blanking interrupt | scroll_pt rs.w 1 ; scroll pointer, offset in pixels | mode rs.w 1 ; <12 copy old, >=12 <20 new chars, =20 stop | current_bank rs.l 1 ; currently displayed scroller | other_bank rs.l 1 ; the update scroller | eed (must be less than 12) | varisize rs.b 0 ; simply used to determine how much space is needed | ; for the variable list | variables dcb.b varisize ; reserve space for the variables | ;-- reserve some space for screens etc.. | a, copyright anarchy 1990" | they actually appear on screen. | ; however even very large scrollers can be run in a very small amount of | ; raster time using this technique. | ; general notes - at all times (unless specified) a6 points to the custom | ; chip registers ($dff000) and a5 points to the list of variables.this allows | ; indirect addressing modes to be used, which are much faster than absolute | ; addressing and consume less memory. if these registers are needed in the | ; course of a routine simply stick them | xecbase vector | lea gfxname(pc),a1 ; pointer to "graphics.library" into a1 | jsr oldopen(a6) ; open this library | lea variables,a5 ; get a pointer to the variable space | lea $dff000,a6 ; pointer to custom chips | move.l d0,a0 ; address of the graphics library | move.l 38(a0),sys_copl(a5) ; remember the system copperlist | move intenar(a6),int_set(a5) ; system interrupts | move #$7fff,intena(a6) ; now switch off all interrupts | move.l $6c.w,vbl_vec(a5) ; system vertical blanking int. | move #$87c0,dmacon(a6) ; now set the required dma channels | ;sysreturn - re-enable operating system and interrupts | move #$7fff,intena(a6) ; clear all interrupts | move int_set(a5),d0 | move d0,intena(a6) ; restore system interrupts | move dma_set(a5),d0 | move d0,dmacon(a6) ; restore system dma | move.l sys_copl(a5),cop1lch(a6) ; restore system copperlist | ;setup - setup the menu system | av the sprite data (prevents sprite streaks down the screen) | lea spr0data(a6),a0 | ;-- clear the scroll area | lea screen1,a0 | ;-- initialise some variables | move.l #screen1,current_bank(a5) ; the two double buffered | move.l #screen2,other_bank(a5) ; scroll areas | move.l #scrolltext,text_pt(a5) ; initialise the scrolltext | move #5,speed(a5) ; set the scroll speed | a-=jbmove.l #clstart,cop1lch(a6) ; init. our own copperlist | ; main - central demo calling routine + mouse button check | cmp.l #$00100,d0 ; wait for vertical position 1 | bsr scroller ; jump to the scroll routine | move #$200,d0 ; small delay loop, this is ne | <reded because | .loop ; in general the scroll routine uses less | dbf d0,.loop ; than 1 raster line.as soon as more routines | ; are added this is no longer required. | btst #6,$bfe001 ; check the left mouse button | ; scroller - the scroller is 80 bytes across of which only 46 are displayed | ; at any one time. while one is displayed the other is updated, the last 48 | ; bytes (ie. 24 charcte | rs) of the displayed scroller are copied into the | ; first 48 bytes of the other. then the remaining 32 bytes (16 characters) | ; are plotted, from the scrolltext. every frame two af these characters are | ; copied, so it takes 20 frames to create the new scroll bank, and the banks | ; are switched when the scroll pointer exceeds 256 (this pointer is just a | ; pixel offset from the start of the displayed scroller) this means that the | ; maximum speed of the scroller is about 256/20 = 12 pixel | s per frame. | ; scroll_pt - the aforementioned scroll pointer | ; mode - indicates if we need to copy the old data, or create new data from | ; the scrolltext. <12 means copy old data =>12&<20 means use the | ; scrolltext =20 means finished updating the scroller. | move scroll_pt(a5),d0 | add speed(a5),d0 | cmp #256,d0 ; do we need a bank change | the display and update | move.l other_bank(a5),current_bank(a5) ; scroll banks | sub #256,d0 ; reset the scroll pointer | move d0,scroll_pt(a5) | move d0,d1 ; remember d0 for calculating the shift register | lsr #4,d0 ; convert d0 into a byte pointer on a word boundary | add current_bank+2(a5),d0 ; add the current | move d0,scroll_planes+2 ; stick it into the bitplane pointers | and #$0f,d1 ; only first four bits needed fo | r shift register | eor #$0f,d1 ; its a right shift so invert the bits as we are | ; scrolling left | move d1,scroll+2 ; put it into the bplcon1 register | beq no_blitting ; the update screen is ready | blt char_scroll ; move the old characters | move mode(a5),d2 | lsl #2,d2 ; multiply mode by four ( 48-76 ) | lea (a2,d2),a2 ; add mode*4 to the update screen pointer | bsr read_char ; read the next charact | er and plot it | addq.l #2,a2 ; point to the next screen character position | bsr read_char ; then read another character and plot it | bra blit_exit ; thats it for now. | move.l text_pt(a5),a0 ; scrolltext pointer | bne.s not_a_null ; if 0 then reset the scrolltext pointer | bra.s new_char ; read the first character | cmp #$20,d0 ; less than 32, then consider as a space | int_set rs.w 1 ; system interrupts | dma_set rs.w 1 ; system dma channels | vbl_vec rs.l 1 ; "" vertical blanking interrupt | ply used to determine how much space is needed | ; for the variable list | variables dcb.b varisize ; reserve space for the variables | kr,code_c ; assemble into chip mem if > | test = 1 ; set this if you are only testing the menu | ; as it will then return to devpac | move.l #start,$80.w ; trap vector 0 | trap #0 ; execute trap 0 to give full control of the | bsr killsys ; disable the operating system | bsr setup ; setup the demo | bsr main ; now run the main demo routines | bsr sysreturn ; return the system to its | r original state | moveq.l #0,d0 ; no errors !! a number of people neglect to | ; do this, and that causes batch files (such | ; as the startup sequence) to bomb out. | rte ; return from exception ie. to the instruction after | ;killsys - disable operating system and interrupts | ;copper registers | ;macros to help in writing copperlists | temp set \2&$1fe | temp set \2&$ff | temp set \1&$fe | skip macro | temp set \2&$ff | temp set \1&$fe | they actually appear on screen. | ; however even very large scrollers can be run in a very small amount of | ; raster time using this technique. | ; general notes - at all times (unless specified) a6 points to the custom | ; chip registers ($dff000) and a5 points to the list of variables.this allows | ; indirect addressing modes to be used, which are much faster than absolute | ; addressing and consume less memory. if these registers are needed in the | ; course of a routine simply stick them | on the stack, and pop them back off | ; scroller2 is very similar to this one but the scroll routine is not fully | ; commented, but uses a technique commonly employed recently to get a base- | ; relief 2 bitplane font from a single bitplane font. you'll have to figure | ; it out for yourself, but its not difficult. | include source/newcustomreg ; custom register label equates | section scrolle | <move.l 38(a0),sys_copl(a5) ; remember the system copperlist | move intenar(a6),int_set(a5) ; system interrupts | move #$7fff,intena(a6) ; now switch off all interrupts | move.l $6c.w,vbl_vec(a5) ; system vertical blanking int. | move dmaconr(a6),dma_set(a5) ; system dma | move #$87c0,dmacon(a6) ; now set the required dma channels | ;sysreturn - re-enable operating system and interrupts | move #$7fff,intena(a6) ; clear all interrupts | move.l vbl_vec(a5),$6c.w ; restore vbl interrupt | move int_set(a5),d0 | move d0,intena(a6) ; restore system interrupts | move dma_set(a5),d0 | move d0,dmacon(a6) ; restore system dma | move.l sys_copl(a5),cop1lch(a6) ; restore system copperlis | ;setup - setup the menu system | ;-- remove the sprite data (prevents sprite streaks down the screen) | lea spr0data(a6),a0 | ;-- clear the scroll area | lea screen,a0 | ome variables | move.l #scrolltext,textpt(a5) ; initialise the scrolltext | move.l #clstart,cop1lch(a6) ; init. our own copperlist | ; main - central demo calling routine + mouse button check | cmp.l #$00100,d0 ; wait for vertical position 1 | bsr scroller ; jump to the scroll routine | btst #6,$bfe001 ; check the left mouse button | ; scroller - this scroller is 46 bytes across all of which are displayed | move.l #$e9f0e000,bltcon0(a6) ; shift the scroll area left 2 | move.l #screen-2,bltdpth(a6) ; careful, here as the shift operation | ; obliterates the word screen-2 | move #17*64+23,bltsize(a6) ; shift an extra line | subq #1,count(a5) ; counter tells us if we need a | bne nonewchar ; new character | move.b (a0)+,d0 ; read a char. from scrolltext | bne.s not_null ; if zero, reset text pointer | lea scrolltext(pc),a0 | bra.s read_char ; read the first character | i0,d0 ; check for control codes, and convert to | cmp #$5b,d0 ; lower case characters, convert to uppercase | lea charpos(pc),a1 | lea font(pc),a1 | move.l a1,bltapth(a6) ; plot the new character | lea screen+$2c,a2 ; plot into the last position on the line | mov 0,color00 | mov 0,bplcon0 | mov 0,bplcon1 | mov 0,bplcon2 | mov 2,bpl2mod | mov 0,bplcon0 | dc.b " right, this scroller uses a very simple " | dc.b "blitter pixel scroll technique, normally you " | dc.b "use this sort of scroller for sine-scrollers " | r they do make the code easier to " | incbin binary/bubble.font ; this font was drawn by kreator | ; so credit me if you use it | ; the following table is used to calculate a pointer to the required | ; character and in general must be created by hand. some coders advocate a | ; different approach, which is to have all your characters stacked on top | ; of each other and then the pointers are very easy to calculate with a | till prefer this method myself. | mov 0,color00 | mov 0,bplcon0 | mov 0,bplcon1 | mov 0,bplcon2 | mov 2,bpl2mod | mov 0,bplcon0 | dc.b " right, this scroller uses a very simple " | dc.b "blitter pixel scroll technique, normally you " | dc.b "use this sort of scroller for sine-scrollers " | r they do make the code easier to " | incbin binary/bubble.font ; this font was drawn by kreator | ; so credit me if you use it | ; the following table is used to calculate a pointer to the required | ; character and in general must be created by hand. some coders advocate a | ; different approach, which is to have all your characters stacked on top | ; of each other and then the pointers are very easy to calculate with a | till prefer this method myself. | int_set rs.w 1 ; system interrupts | dma_set rs.w 1 ; system dma channels | vbl_vec rs.l 1 ; "" vertical blanking interrupt | ply used to determine how much space is needed | ; for the variable list | variables dcb.b varisize ; reserve space for the variables | o alter the speed | ; of such a scroller, as it really needs to be a power of 2 (1,2,4,8,...) but | ; this limitation can be eliminated by shifting the character before plotting | ; as you would if creating a proportional scroller. i'll leave that to you to | ; experiment with. another way would be to compromise between the two, using | ; the hardware shift registers and only moving the screen when there is space | ; for a whole new character (probably some source for this scroller on the | aswell) again this one is unsuitable then for sinescrolling, but doesnt | ; need double buffering, and allows easy,immediate speed changes. | ; general notes - at all times (unless specified) a6 points to the custom | ; chip registers ($dff000) and a5 points to the list of variables.this allows | ; indirect addressing modes to be used, which are much faster than absolute | ; addressing and consume less memory. if these registers are needed in the | ; course of a routine simply stick them on | o_the stack, and pop them back off | include source/newcustomreg ; custom register label equates | section scroller,code_c ; assemble into chip mem if > | test = 1 ; set this if you are only testing the menu | ; as it will then return to devpac | move.l #start,$80.w ; trap vector 0 | trap #0 ; execute trap 0 to giv | e full control of the | bsr killsys ; disable the operating system | bsr setup ; setup the demo | bsr main ; now run the main demo routines | bsr sysreturn ; return the system to its original state | moveq.l #0,d0 ; no errors !! a number of people neglect to | ; do this, and that causes batch files (such | ; as the startup sequence) to bomb out. | rte ; return from exception ie. to the instruction after | ;killsys - disable operating system and interrupts | move.l $4.w,a6 ; execbase vector | lea gfxname(pc),a1 ; pointer to "graphics.library" into a1 | jsr oldopen(a6) ; open this library | lea variables,a5 ; get a pointer to the variable space | lea $dff000,a6 ; pointer to custom chips | move.l d0,a0 ; address of the graphics library | yome variables | move.l #scrolltext,textpt(a5) ; initialise the scrolltext | move.l #clstart,cop1lch(a6) ; init. our own copperlist | ; main - central demo calling routine + mouse button check | cmp.l #$00100,d0 ; wait for vertical position 1 | bsr scroller ; jump to the scroll routine | btst #6,$bfe001 ; check the left mouse button | ; scroller - this scroller is 46 bytes across all of which are displayed | move.l #$e9f0e000,bltcon0(a6) ; shift the scroll area left 2 | move.l #screen-2,bltdpth(a6) ; careful, here as the shift operation | ; obliterates the word screen-2 | move #17*64+23,bltsize(a6) ; shift an extra line | subq #1,count(a5) ; counter tells us if we need a | bne nonewchar ; new character | move.b (a0)+,d0 ; read a char. from scrolltext | bne.s not_null ; if zero, reset text pointer | lea scrolltext(pc),a0 | bra.s read_char ; read the first character | x0,d0 ; check for control codes, and convert to | cmp #$5b,d0 ; lower case characters, convert to uppercase | lea charpos(pc),a1 | lea font(pc),a1 | move.l a1,bltapth(a6) ; plot the new character | lea screen+$2c,a2 ; plot into the last position on the line

Amiga Demo Archiv


bottom