Manual / Guide · 1989
Atari STE Developer Addendum (25 May 1989)
Light gun/pen position registers FF9220/FF9222 and their accuracy by screen mode.
- atari ste
- light gun
- light pen
Manual / Guide · 1989
Light gun/pen position registers FF9220/FF9222 and their accuracy by screen mode.
STE Developer Addendum The Atari ST" Compatible with ST, 1000s of software titles available. New • Extended color palette of 4096 colors, from 512 • Hardware support for horizontal and vertical scrolling • Ready for external GENLOCK • Stereo 8 bit PCM sound • Light gun, paddle and new joystick ports. • 256K ROM from 192K includes Move as well as copy files Rename folder's Autoboot GEM applications New file selector Faster desktop Large palette support Fast hard-disk support Folder limitations lifted Memory management improved Keyboard reset STE Developer Addendum This addendum is a set of documents that allows the ST developer to use the new features of the STE. These new features are in the areas of graphics, sound and interface ports. The STE has a palette of 4096 colors compared to the ST palette of 512 colors. Also the STE has hardware support for vertical and horizontal scrolling. Support has also been added for external GENLOCK. Sound on the STE has the ST sound as well as 8 bit stereo DMA sound with variable playback frequencies. The STE also has two new controller ports that allow for new joysticks as well as a light gun and paddle controllers. Genlock and the STE The ST (and STE) chip set have the ability to accept external sync. ST Hardware This is controlled by bit 0 at FF820A. as documented in the the ST video of synchronization Specification. This was done to allow the However, GENLOCK). as known with an external source (a process usually (or phase-locked be also must clock in order to do this reliably the system do this to way No signals. sync input synchronized in some other way) to the internal are available GENLOCKs was provided in the ST. as a result the only modifications (usually for the MEGA). The STE allows this to be done without opening the case. To inject and then inject system clock ground pin three (GPO) on the monitor connector clock is this of frequency internal The detect). the clock into pin 4 (mono NOT DO Note: (PAL). MHz 32.084988 and 32 215905 MHz (NTSC) a SWITCH CL(X:K SOURCE WHILE THE SYSTEM IS ACTIVE. As a result of this GPO is no longer available. Controllers FF9200 -ire Buttons FF9202 Joy 3 Joy 0 Joy 2 Joy 1 Joy sticks. Four new joystick ports are added. These ports are controlled directly by the 68000. The current state may be sampled at any time by reading the above iocations. Joystick 0 and Joystick 2 direction bits are read/write, if written to they will be driven until a read is performed. Simifarly. they wifi not be driven after a read untii a write is performed. nm (X Paddle Mill (Y Paddle CXI FF9210 FF9212 mHBHBHHNHH FF9214 mgisnsMigena J ' 1 i FF9216 LU Nil LU 1 1 1 I""! (X Paddle (Y Paddle One pair of paddles can be plugged Into Joystick 0 (Paddle 0). A second set can be plugged into Joystick 1 (Paddle 1). The current position of each of the tour paddles is reported at these locations. The (ire buttons are the same as (or the respective Joystick. The triggers for the paddles are read as bits one and two of FF9202 (JOYO Left and Right) FF9220 lilillMllllili FF9222 —WH ii Ilill I I I i M i i I I I i i i ri (X Position) iTI (Y Position) I Light Gun / Pen. A light gun or pen can be plugged into Joystick 0. or pen Is pointing to is reported by these registers. The current position that the gun The position is accurate to within (X direction only): 4 Pixels in 320x200 Mode 8 Pixels in 640x200 Mode 16 Pixels in 640x400 Mode Accurate to 1 pixel in the Y direction in all modes. Accuracies do not account (or the quality of the light gun or pen. Note that the X position is given in pixels for 320x200 only. In order to get correct results in 640x200 mode this number needs to be shifted left one bit and In 640x400 mode this number needs to be shifted left two bits. STE Technical Documentation 25 May 1989 New Controller Pinout This pinout is for ports 0 and 1. Ports 2/3 are on the other DB15 connector. O o \ O CD C o o C> o o \ L’ O O O \ / 11 / ‘ / ‘ / 1 2 3 4 5 6 7 8 9 UPO DNO LTO RTO PAD OY FIREO VCC NC GND 10 FIRE1 11 UP1 DN1 12 13 14 15 LT1 RT1 PAD OX Video Modifications (High) FF8204 FF8206 (Low) FF8208 Video Address Counter. Now read/write. Allows update of the video refresh address during the frame. The effect Is immediate, therefore it should be reloaded carefully (or during blanking) to provide reliable results. FF820C h^hehuteb This register completes the set on ST Allows positioning screen on word boundaries and thus vertical scrolling. Low byte of the video base address. FF820E I ' I 1 I I ! I Offset to next line. . Number of words from end of line to beginning of next line minus one. Allows virtual screen to be wider than physical screen. Acts like an ST when cleared. Cleared at reset. FF8240 through FF82SE iTUcifeui rnkion fiunRiii Red Green Blue Color Pallete. A fourth bit of resolution is added to each color. Note that the least significant bit ts added above the old most signilicant bit to remain compatible with the ST. . FF8264 IWIHIIIilMtaiiMiMijJJ i i Horizontal Bit-wise Scroll. Delays the start of screen by the specilied number ol bits. STE Technical Documentation 25 May 1989 How to Implement Fine Scrolling on the STE. The purpose of this document is to describe how to use the capabilities of the STE to achieve bit'wise fine~scrolling and vertical split screens. Horizontal and vertical ^rolling are discussed and an example program is provided. Split screen effects are discussed and an example program with multiple independent scrolling regions is provided. Three new registers are provided to implement fine*scroUing and split screen displays: is the 1) HSCROLL - This register contains the pixel scroll offset. If it is zero, t^ the consh^te bits data which iixiicates same as an ordinary ST. If it is non-zero, it selected is pixel displayed leftmost first pixel from the first word of data. That is, the from the first data word(s) of a given line by this register. 2) LINEWID - This register indicates the number of extra words of data (beyond that required by an ordinary ST at the same resolution) which represent a single display line. If it is zero, this is the same as an ordinary ST. If it is non-zero, t^t additional words of data will constitute a single video line (thus Rowing vutual m^y screens wider than the displayed screen). CA UT/ON~ In fact, this register contains the word offset which the display processor will add to the video display address to point to the next line. If you are actively scrolling (HSCROLL < > 0), this register should contain the additional width of a display line minus one data fetcJiiin low resolution one data fetch would be four words, one word for monochrome, etc.). 3) VBASELO - This register contains the low-order byte of the video display base address. It can be altered at any time and will affect the next display proce^r data fetch. It is recommended that the video display address be altered only during vertical aiKl horizontal blanking or display gvbage may result. These registers, when used in combination, can provide several video effects. In this document we will discuss only fine-scrolling and split-screen displays. Fine Scrolling: Many games use horizontal and vertical scrolling techniques to provide vutual play fields which are larger than a single screen. We will first discuss vertical scrplling (line-wise), then horizontal scrolling (pixel-wise) and finally the example program "neowall.s" which combines both. Vertical Scrolling: To scroll line-wise, we simply alter the video display address by one line each time we wish to scroll one line. This is done at vertical blank interrupt time by writmg to the three eightbit video display address registers to define a twenty-four-bit pointer into memory. We might imagine this as a tall, Naturally, additional data must be available to be displayed. skinny screen which we are opening a window onto for the user. The video display address registers define where this window will start Horizontal Scrolling: j j To scroll horizontally we might also adjust the video display address. If that was all we did. we would find that the screen would jump sideways in sixteen pixel increments. To achieve smooth pixel-wise scrolling we must use the HSCROLL register to select where within each sixteen pixel block we wish to start displaying data to the screen. Finally, we must adji^ the x LINEWID register to reflect both the fact that each line of video data is wider than a single display line and any display processor fetch incurred by a non-zero value of HSCROLL. All this is done at vertical blank interrupt time. Naturally, additional data must be available to be displayed. We might imagine this as an extremely wide screen which we are opening a window onto for the user. These registers define where this window will start. For Example: The program ”neowaIl.s" reads in nine NEOchrome™ picture files, organizes them into a three by three grid and allows the user to scroll both horizontally ar^ vertically over the images. The heart of this program (the only interesting thing about it actually) is the vertical blank interrupt server. This routine first determines the pixel offset and loads it into HSCROLL. The LINEWID register is now set to indicate that each virtual line is three times longer than the actual display width. If we are actively scrolling, this amount is reduced to reflect the additional four"planc data fetch which will be caused by the scrolling. Finally, the video display address is computed to designate a window onto the grid of pictures. This twentyfour^bit address determines where the upper left comer of the displayed region begins in memory. Thus, every frame an arbitrary portion of the total image is selected for display. The speed and resolution of this scrolling technique is limited only by the dexterity of the user. Split Screen: regions. In many applications it is desirable to subdivide the screen into several independent the you may reload some video registers on a line-by-line basis (using horizontal On STE blanking interrupts) to split the screen vertically into multiple independent regions. A single screen no longer need be a contiguous block of storage, but could be composed of dozens of one strips which might reside in memory in any order. The same data could be repeated on and data or more display lines. Individual regions might each have their own individual scrolling directions. For Example: The program "hscroll.s" reads in a NEOchrome"^ picture file and duplicates each Ime of the image. This, combined with the proper use of LINEWID. effectively places two copies of the same picture side-by-side. Next, both vertical and horizontal blanking interrupt vectors are captured and the horizontal blanking interrupt is enabled in counter mode. To prevent flicker caused by keyboard input, the IKBD/MIDl interrupt priority is lowered below that of the HBL interrupt. Note that the program 'main loop' doesn't even call the BIOS to check the keyboard, since the BIOS sets the IPL up and causes flicker by locking out horizontal interrupts - this may cause trouble for programs in the real world. The screen is effectively divided into ten regions which scroll independently of one another. There are two tenelement arrays which contain the base address of each region and its current ^roU offset. At vertical blank interrupt time we compute the final display values for each region in advance We then initialize the display processor for the first region twenty lines (actually every twenty horizontal blankings). every and request an interrupt we quickly reload the video display addre^ service, During each horizontal interrupt This must be done immediately - before the display register. registers and the HSCROLL garbage may result. Note that horizontal blank or current line processor has time to start the having finished reading the previous data processor display interrupts are triggered by the to reload the HSCROLL and video display cycles machine 144 line. You have approximately arxl store them into a third array. LINEWID registers before they will be used again by the display procesror. Finally, the register is set, this need only be done before the processor finishes reading the data for the current display line. We then pre-compute the data we will need for the next horizontal interrupt to shave few more cycles off the critical path and exit. hscroit.s 18:18:32 aa 2-Hay-1989 Page 1 Hadaac 1.86 (Atar 1 HSGROLL.S Horizontal Scrolling Ocw> THE ONE LINE VERSION 2 3 4 s Copyright 1988 ATARI CORP Started 9/12/88 Rob Zdybel 6 . . 7 8 9 18 .text .Include atari .list SS9 11 12 IJ HAROMRE CONSTANTS 14 15 IS 17 It 19 26 21 22 2> 24 25 2E 27 2t 29 16 11 •FFFF82B0 "FFFF826F vtMtcIo • FFFr826S tiscroll - llMHid 41 •66866676 •88666118 •68668128 vblvK - Ikbdvtc • hblwtc 1 Video Sase Address do) Uldth of a scan-line (Words, olnus 1) Horizontal scroll count (8 .. IS) $78 $118 1 $128 t Systeo VOlank Vector IKBO/nOl (6858) Vector Horizontal Blank Counter (68961) Vector LOCAL CONSTANTS SystCB Initialization start 66888866 88886682 88688888 8668886C 86886616 68888814 86688818 8888881E 264F 2E7Cxi4iixit 26608864 2820668C 08606614 06608610 066068868186 2866 86886628 86868822 86666824 2F88 2FB0 4267 6 6 6 88686826 B668882A 1F100846 4E41 6 6 6 - Btsteeic OEFOseeo 42 4] 44 45 1 owe.l ove.l a7,aS anue.l 4(aS).aS ove.l TaTSZ(aS).d6 eystack.aT add.l add.l add.) 6 6 6 0AT6SZ(aS),d6 B5SSZ(aS).d6 NSldd.dd ove.l dO.dd Hshrlnk aS.d6 ove.l d8.-<sp) ove.l a5.*(sp) clr.n -(sp) 6ohIos $4a,lZ ove.n a$4a,-(sp) ai trap .If $e <• 8 *$c,sp addd i 6et Our Om Local Stack aS • basepage address . 1 t RAH req'd • teit*bss*data*BascPageLcngth d4 • RAH req'd Return Excess Storage ‘ .else add.H cndlf eSc.sp Other Initialization 88866616 8666N12 46 47 1 1 SY5TCM CtIMSTAHTS J2 11 14 IS IS 17 11 19 46 $ffff8266 tffff828f Sfffft265 86666616 66668618 6666661A 4267 1F1C8626 4E41 SC4F 2F66 6 6 6 6 6 Super clr.l ove.H trap addq ove.l 1 enter supervisor node 1 HARHIN6 - Old SSP saved on stack. i 44 • -(sp) o$26.-(sp) «1 N6,sp d6.-(sp> Fgetdta 8666661C 1F1C682F 4C41 86666642 544F 6 6 6 6 6 • - 46 49 56 51 52 51 - 86666644 66666646 2848 08FC661E 86668646 8666864C 1F3C6668 2F10XXXXXXXX • • 6 88668854 86668858 1F3C864E 4E41 8 88888656 S64F 6 686668SC Be6668SE SMdos $2f.2 ove.M M2f,-(sp) trap .If $2 addd else add.N >$2.sp ove.l 6 6 d8.a4 adda 836,a4 Fsflrst encofllc.M ove.H e$6.-(sp) ove.l Rneof lle,-<sp) Stmies $4e.t Mve.H N$4e.-(sp) 01 trap If $8 <• 8 o$8.sp addd 6 .else - add.H - .cndlf tst bal 4640 6B66XXXX 3F106866 2F60 862. sp .endtf Fopen 86686662 88688666 01 <8 6 6 ove.H ove.l FlIcnaM ptr a$6,sp dO abort a4.06 o$6,-(sp> a4.-(sp) IF (No NEC files) ABORT hscroll.s lSilti32 P«0* 2 m 2-«to«-lM9 Maduc l.ee eaxMlos SSd.S MSMKS •MMKC 54 55 56 3PSCM30 MMW.H Itld.-Cip) 4E41 trap 81 addq .else add.H .cndlf tft bal iSS.ip eve 88. handle Fread da.832128.aneobuff 8ncebuff.-(tp) 887888, -(sp) .If *8 « 8 MaM478 4M6 MtN«72 seeeiaxi 858, sp d8 abort IF (6rror opening flic) ABORT i 57 SB M6SM76 33CexiMXXxi N68M7C 2F3Cxxxil»i MBMea2 2F3CSeM70Be NNMSt 3FM HMtaSA 8S88M8E 3F3C8B3F 4E41 8 owc.t Mwe.l aoM.M 8 • 8 8 8 • 88. -(tp) OoMlof t3f.l2 >000. H 8(3f,~(sp) 81 trap .If »C <• 8 addg 8Sc,sp .else 888988 9 8 0EFC8HC 68 61 62 63 64 65 66 add.M .cndlf tst 1 88888894 88888896 6B8e»i« 88888898 3F39»xxxxx> 88888888 888980 84 3F3C883E 4E41 88888886 584F B888S888 4848 6B80ixxx 4A88 88 abort Fclose handle apvc.H handle. -(sp) 6aados $3c.4 ove.N 883c. -(sp) 81 trap .If $4 <• 8 addq 8$4.sp .else add.H 8$4,sp .endlf tst d8 bnl abort bal 8 8 8 8 8 8 • - N89B8A8 8Sc.sp . 71 72 73 888888C4 888B88C6 4SF9xxxxx«t> 41FB8248 43F9ixxxxxxx 3e3C8e8F 3208 3808 51C8FFF8 74 75 76 B88888CA 888888CE 88808804 88888808 eeaoeaoE 80Be88E2 88808866 80888868 B00800EC 888888EE 38308888 41F9xiixxxii 43F9xxixixii 341C88C7 323cae27 21918888 2809 51C9FFF8 0808 SICAFFEE 88B886F2 80888866 88880184 08880108 88888180 B8B0818E 80808112 41F9ixiiixx> 43F9xxiiixii 4SF9xiiiixix 38300889 32F08880 28CA 04FC1988 5108FFF4 88888116 88888116 23F8eil8iixxxxxx 21FCxxixxiixeeB8 anve.l Ubdvcc.oldlkbd oue.l 8ikbd,lkbdvec 88808126 88888126 23F80078xiixxxxx 21FCxxxxxxxx8888 ove.l ove.l vbivcc.oldvbl 88088136 88888136 80888144 21F0xxxxxxxxB068 8SF88888FA13 88F8008eFA87 ove.l Bhbl.hblvec RO.lara *8,lera 67 • 8 8 59 68 69 78 77 78 79 88 81 82 83 84 85 86 87 88 89 98 91 92 93 94 95 96 97 98 99 188 181 102 183 184 185 186 187 B888888E 888B8884 88888888 888808BE B888nC2 neB88F8 lea lea lea ove .ploop: Mvc.M ovc.H dbra nove lea lea ove .llnlpi aove .dublp: aove.) ove.t dbra adda dbra lea lea lea ove .strip: aove ove.l adda dbra bset.b bsct.b ; neobuff*4.a2 palette. a8 oldpal.al 815, d8 (aB).(all* (a2)*,la8)« 88.. ploop 8168,88 bIgbuff.aB ncobuff*128.al 8199,82 839. dl (al).(ae.de) (al)«,(a8)* dl.. dublp i IF (File Read Error) ABORT ; IF (Error Closing a file) ABORT ; save old color palette create ncM color palette i Double each display line i ; FOR (288 Lines) 00 duplicate line ; FOR (18 Strips) 00 Init base and offset t IPL 5 hack for 1K8D/KIDI i Capture Systea VBlank Interrupt i Capture HBlank Interrupt ; Enable Hblank : Keyboard Polling : dS.aO d2,.llnlp baseaddr.aO xoffset.al blgbuff,a2 89 dO 88,(al>* a2.(a8)< 8328*28, a2 , 88, .strip aufai.ubluec Scrolling Oeao loop navelp: 88888148 36308882 88888146 88888152 3F3C8801 4640 80808154 S84F 8 8 8 8 8 8 8 Bconstat COM aove.H *C0N.-(sp) Bios 1.4 xwvc.H asi,-(sp) 813 trap If $4 8 a$4.sp addo else add.H *54, sp .endlf (Atari ST) hscrall.s 1B9 IIB BBaiaise 81888158 4A48 E78BISII eaaaBisc 3F3Ce082 08888168 88888164 88888166 111 112 113 114 US U( 88188168 8888816C 3F3Ce682 4E40 S84F tst beq Bconin d8 nocx It CON eCOK.-isp) f Bios 2.4 8 MVC.H >52. -(sp) 8 trap >13 8 .If 54 <• 8 addq >54, sp 8 8 M 2-M«y-lS89 Maduc i.BB IF (Keyboard Input Available) THEM .else - add.N - .endif CM-b 88308883 67B8XXII >54, sp beq >'C'-64.d8 exit bra Hawclp i CTIU.-C ••> EXIT nocx 1 t 88888178 6808 exit! 117 111 119 121 121 122 123 124 MVC.H 8 10 ; 18 ! 32 Page Z ; Systea Tear-D<»«n 1 1 88888172 88888178 8aai8t7E 88888186 bclr.b bclr.b aove.l aoue.l 88888888FA87 Bia88888FA13 21F9xxxxxxxx8888 21F9miiixxB888 8888818E 88888192 3F3C8817 4E4E 88888194 544F ao.lcra eo.iara oldikbd, Ubdve oldvbl.vblvcc I i I Disable Hblank Restore Systc* IKBO/HIDI Interrupt Restore Systea VBlank Interrupt Cettiae Xblos 517.2 Boue.H >517, -(sp) >14 trap .If 52 <• 8 addq >52. sp else add .H >52 sp • 8 8 8 8 8 - , 12S 126 - 88888196 23C8xxxxxxxx 88H819C 3F88 8888019E 888881 A2 3F3(»020 4C41 88188184 SI4F .endif 8 8 8 8 8 8 8 .else - add.H - 127 888881A6 3F39XXXXIXXI 888881AC 88888188 1F1C8B2B 4C41 88888182 584F >54. sp .endif Tsctdate vblteM aovc ublteM.-(sp) Gcados 52b, MVC.H >52b,-(sp) >1 trap .If 54 <• 8 addq >54, sp .else add H >54 sp 8 8 8 8 8 8 8 - . 121 129 13B 131 132 133 134 135 - 41F9IIXXXXXI 43F88248 383C8B0F 3208 51CSFFFC lea lea aove .unplpi aove-M dtir> abort) 8 888I81CS 3nC8828 maiicc 4E41 888881CC SC4F 136 88IH108 88IH102 137 131 139 148 141 142 143 144 14S 146 147 148 149 isa ISI 152 153 88888104 4267 4E41 4AFC 8 8 0 8 . oldpal, a8 palette, al >15, d8 (a8)*,(al)« dO. .unplp User Gcados 528,6 aovc.n >528, -(sp) >1 trap .If 56 <• 8 addq >56, sp 8 .else - add.H - .cndlf 8 8 PtcraS cIr.H trap 8 Illegal 1 Set CEHOOS Tlae and Date endl f . 88888184 888881BA 888881 BE 888881C2 888881C4 6et IKBO Oatc/Tla aove.l dB.vblteap Tsettlac 08 aovc dO.-Isp) 6eados 52d,4 MVC.H >52d,-(sp) >1 trap If 54 <« 8 addq >54, sp VOL i restore old color palette : return to user aode I return to 6&V0S *56, sp -(sp) >1 Vcrtlcal-Blanl ; vbl) 88888106 48E7C8E0 aovca.l de-dl/a0-a2.- 8888810A 888881E8 888801E6 888881EC 41F9XXIXXXXI 43F9XXXXIXXI 45F9XXXXXXXX 123CB889 Ica lea lea 888881F8 888081F2 aaa88iF6 8808B1FA 3811 aovc 88818880 66B8IIXI 5240 btst.l bnc addq aovc uldH.al aB ioffset,al bascaddr,a2 >9,dl al a2 •reglp (all.de >e.dl odd Sl.dO • Display list (scroll. base) Xoffsct list Base address list FOR I IB scrolling regions) DO dB • current Xottset . EDEN — > Increeant (Atari ST) 8«eeeiFC 154 155 156 157 158 153 168 161 162 163 164 165 166 167 168 163 178 m 88888288 88888284 88888286 88888284 88888280 88888218 88888214 88888216 88888218 8888821E 88888228 88888222 88888224 88888228 8888822A 8888822C 172 173 174 175 176 177 178 179 188 181 182 183 184 185 186 187 188 183 138 191 192 133 134 135 196 231 232 233 234 235 236 237 238 239 248 241 242 24S 244 ai 68 .d 8 .Join M,d8 Join cap bit ovcq .odd: bra subq bge ova .join: aove atr 058fFf8.de (a 2 )«.d 8 de.CaB) (alJ*.d 8 0S8 f.de d 8 .(aBl 04.aB dl. .raqlp and. 1 add. 1 0834 2888 3819 CB7C888F 1888 5888 S103FFC2 •ovc . ova and ova.b addq dbra . 41F9XXXXXXXX 1818 11088265 11088285 11088287 11088283 88888248 8888824C 88888246 88886252 88888254 32308858 4488 6788XXXX ova baq 088. dl d8 .zaro 5941 »bq ova.b 04.dl dl.lintMld 88888258 88888254 888882SC 88888262 2818 6138 23CBXXXXXXXX 2308XXXXXXXX Nova.l (aeit.dB 08.de dB.vIdaodata aB.vldaoptr 88888268 888882SE 88888274 llF08e8BF41B 11F08814F421 11F08888F418 ova.b ova.b ova.b 88B8827A 8888827E 88888288 88888284 4C0F8783 4EF9 88888888 4AF0 ovaa. 88888298 88888230 110182BF vidao.aS (ae)*,d8 de.hscroll (a8 )«,vcounthl (ae)*,vcountaid (a 8 )*.vcountlo laa ova.b ova.b anvt.b ova.b ova.b t«.b .zera: roi. 1 ove.l ova oldvbl ODO ai.dS .Join 8153. de d8 . (alJ 01 . dB . oa.tbcr o28,tbdr OB.tbcr — > Oacraaent Urap'dnnn Nan Xctfset i : ; d8 • byte offset nlthln line Regions video base d8 i d8 • Raglans horizontal scroll count i Initialize first region 1 Double noraal ST line nidth 1 IF (non*zaro scroll count) Reduce i i Init next lines data Inlt display list ptr : Interrupt every tnanty HBlanks ; .dc.M (sp)«,dB-dl/a 8 * a 2 S4af9 .dc. 1 8 1 (Atari 5T) Urap^ ; . 88888238 88888236 88888238 8888823C 88888248 88888244 197 198 199 288 281 282 283 88888286 284 285 88888288 286 88888284 287 888882BE 288 88888232 283 218 88888294 211 88888296 212 213 214 215 216 217 218 219 228 221 222 223 224 225 226 227 228 229 238 88708848 6 O88111111 X 7888 68B8 XXXI 5348 60B8XXXX 3830889F 3288 E248 C8eC 88 eeFFF 8 HadMC 1.88 18il8i3Z «i 2-my-1389 P««e 4 hscroil.s Una Hldth X> (Old-Vblank) i lllaqal IKBO IK60/HID1 Intarrupt Servar 3F8e ova d 8 ,-(sp) 4808 C87CF8FF 88708588 4608 ova sr,d 8 Sf 8 ff.de 0SS 88 .de de.sr 38tF 4EF9 ova Ikbd: and or ova . i Set IPL dOMH to 5 ; JH> (Old-IKBD) (sp)«.d 8 dc.M S4af9 oldikfad: 88088888 44F0 .dc.i 8 lllaqal ML ««(C tIHE* Norlzontal-Blank Intarrupt Servar hblt 88888236 48678888 anvao. d8/a8 .-(ip) 88888242 88888248 88888240 88888288 2839IIXXXXXX 41F882BS 11088265 81088888 ova ova.b vldaodata.d 8 vcountbl,a 8 de.hscroll ovao.l d 8 .(a 0 ) 88888284 88888286 88888284 88888208 88888204 4488 6788XXXI 11F08B4C828F 6 BB 81 X 11 11FCBB58828F tst.b baq dB .zaro 076.llnanld Join 088.llnaxld 88888204 88888208 88888202 88888204 88888204 2879XXXXIXXX 2818 6138 Z30BXIXIXXXX 23C8XXXIXXXX ova. 1 ova.l 888882EB 88888264 888882EA 4C0F8181 eoaBeaeoFABF 4673 ovaa. 1 (sp)*.d8/a8 . laa ova.b bra .zaro> •Join: ova.b rol.l •ova. ova.l bckr.b rte (44*28*72) d8 • vcount/scroll (28) (8) : a8 aovap base sat nScroll sat UldaoBasa i IF (non-zero scroll count) Reduce i i 1 (12) (24) (total • 136* cycles) . vldaoptr.aB ( 8 )*.d 8 08 de . dB.vIdaodata aB.vldaoptr 08,lsra DATA STODAOE : Inlt next regions data i Clear In-Service bit Una nidth P«gc S hscrol 1 . 2 18:18:32 M 2'tt«y-1983 HjdMC 1.88 (Atari ST) « 24C 247 248 249 258 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 261 269 278 271 272 273 274 .data eee082EC neof lie: 88888888 N£0 flltnamc search string ; .dc.b 2A2E6E656F88 t "».neo",8 even ; RANOOH DATA STORACE ; 88888886 bss oldpal 88888888 *88888818 .ds.l 16 handlci 88888848 *88888881 i .ds.H 1 bascaddrt 88888842 *8888888A ; .ds.l 18 .ds.n 18 .ds.l 18 xoffseti 8888886A *8888888A vldeoi 8888887C *88888888 vldeoptri 888888A6 *88888881 .ds.l 88887C2E *8888FA88 277 278 279 88817S2E *88808881 Pixel-offset for each strip : HScroll and Uideo Base address for each strip i Display list ptr I Next regions display Info i NEO-Iaagc Buffer : Hcga-Iaagc Buffer ; Ubiank Teaporary Storage 1 .ds.b 32128 .ds.b 2*32888 .ds.l 1 .ds.l 256 ; (stack body) .ds.l 1 i Local Stack Storage blgbuff 275 276 ! .ds.l neobuff 8888888E *88887088 laagc Base address for each strip 1 uldeodatai 88888888 *88888881 Original color palette Active Handle I vblteapt 288 281 282 283 284 285 88817832 *88888188 ystack: 88817C32 *88888881 .end . Page ( lt<li>S2 M 2-Hag-19l9 Syabol Table MMME2 .dublp Join MtN2ia t . t .Joln«HM2CA t llAlp .Odd .pleop .rcglp MN81FI t .ftrlpMIMlM unpIp ta«MlC2 t t .zero MMt254 .zero MM62C4 t IHMMC MNnM M9MK2 MIX t t t t MNMU ca 6MSE MdaMlI BUN Bwaguc a a NBMIM BMNUC BPSZ ea BSIZE WBBBIBA a ea 8SSSZ OOUNE MIBIBU a CM IMMdW ca at IBWMW ca CURSJLIMC MMBe>2 ca CUtS-fiCTRATC bWBBdOS ca CURSJaOE BXMBdd ca CMtSjneUIK ca CURS_SETItATE ca CUtS-SIttU BIIBBB1 ca OATAsz Bmeaic ca W0MH5 —«9WI OMSE BtdeMld a DLEN BSeBeeM a DsizE BsegaeK a OTA sme*2« a EWiR deBaeszc a FILE-ID eeeceeBC a KEAOSIZE flBBdaeiC ca HITPA B8«e084 a IKBO BBSSaMC ca LF MBB8BM ca LOUTPA Beeeaata a Kioi Beaee«n ca HTDTA aeeeeBzi ca PARENT BBteenC a PRT BSaeMM ca RMioM eeeMBes ca SSIZE B8B8M8E a TAB BBBBfleaS ca TBASE BMBBBit a TEXTSZ efleseBSC ca TUN eeeeBaec a TsizE eeeeean a XXXI 86068612 a XXX2 0B0808IE a XXXS S86B881A a XXXX 86888628 a lUMIUUCF .a _autopath 8B6BB4CA ca Jtiiiotdev 80686446 ea _btrM 86688482 ea .cadload 86888482 ca -drwblti B68884C2 ea -dskbtffp BB8864C6 ca -frcleck 00688466 ea -Fverlfy 88888444 ca J)Z_2B8 B88604BA ea .Mbot 86868432 ca .MCtop 86888436 ca -nflops 888684A6 ca _prt_jcnt 688664EE ca .prtabt 888864F8 ca -shcll_p 888864F6 ca -sysbasc a68B84F3 ea _tlnr_M 88888442 ca -v_bas-ad 8880644E ca -vbclock 68808462 ca _vbl_llst 8e8084CC ea _ubl queue 88B884S6 ea abort 88888188 t aer FFFFFA8) ca baseaddr 88888842 b blgbuff e 6 B 87 E 2 E b CMireg 88868688 ea colorptr 88808458 ea constate 88866488 ea contem 68888484 ea crlticret 8888848A ea datareg 88868886 ea ddr FFFFFAS5 ea defshlttiad 88888444 ea diskctl FFFF8684 ca dMhl FFFF868S ea dMio FFFFB68D ea dMiaid FFFF868B ca dtr 88688818 ca cnd_os B88884FA ea ctv.jcrltlc 88888484 ca ct«_tcna 88888488 ca ctv-tiaer 88888488 ca ctu_itra 8888848C ca ezcc-os 8888B4FE ca cilt 88088172 t FIFO FFFFS686 ca Flock 8886843E ca glaanp 88880888 ca glbanp 88888888 ca glc«w 8888668A ca glcmvlp 8068868C ca glFIcnvlp 86888808 ca gtaizer 88888887 ca glnelM 88888886 ca gtporta 88S8888E ca glportb 88888887 ca glrcad FFFFS88B ca glsclcct FFFFSS88 ca gltoocac 88888881 ca gitoncaF 88888888 ca gltonebc 88888883 ca gItoncbF 88808882 ca gltonecc 88888885 ca gitonecF 08808884 ca gliwlv. FFFF8882 ea gptp FFFFFA81 ca gpo B88B8840 ca handle 80088848 b hbl ee0862SE t hblucc 88886120 ca hdv-boot BB8B847A ca hdv_bpb 88888472 ea hdv-lnlt 8888846A ca hdv_awdlach 88B8847E ca hdv_rti 08088476 ca hscroll FFFF826S ca (era FFFFFAB7 ca lerb FFFFFA83 ca Ikbd 88888286 t tkbducc 88888118 ca lw>a FFFFFA13 ca larb FFFFFA15 ca Ipra FFFFFA8B ea iprb FFFFFA80 ca isra FFFFFA8F ca isrb FFFFFAll ca keybd FFFFFC82 ea kcyctl FFFFFCB6 ea llncMld FFFF828F ea Mcntlr 88888424 ea aMBConF FFFF8B81 ca a«mal2 68888438 ca aMCualld 66888428 Ca nFp FFFFFA68 ea Idi FFFFFC86 ea tdUtl FFFFFC04 ca yftack 8B817C12 b neobuFF BB8086AE b ncoFlIe BBB8BB8B d noexIt 88888178 t nvbls 00088454 ca oldlkbd 88688238 t oldpal BB8B888B b Oldvbl 80888288 t palette FFFF8248 ca palawdc 80868448 ca phystop 8888842E ca prv_aui 88868512 ca prv_auxo B688858E ea pru_lst 6868858A ca prv-lsto 66888566 ea resvalld 86686426 ea resweetor 08886428 ea rezande FFFFS268 ea rsr FFFFFA26 ea sau_context B80eB4AE ea save_roH 68B884AC ca savptr 8BB8B4A2 ea scr FFFFFA27 ea scr.dunp 68688582 ea screenpt 880a64SE ea secreg 86888884 ea seekrate 60888448 ca sshlFtnd B8B8844C ea start 88888688 t strobe 88888828 ea sHV-vee e68B846E ea syncMldc FFFF828A ea tacr FFFFFA19 ca tadr FFFFf AIF ca tber FFFFFAIB ca tbdr FFFFFA21 ca teder FFFFFAID ca tedr FFFFFA23 ca tddr FFFFFA25 ca thciid B4W8848E ca trfcrcg 88888882 ca trpl4ret 88888486 ca tsr FFFFFA2D ca ucr FFFFFA23 ca udr FFFFFA2F ca wbaschl FFFF8201 ca wbCMlo FFFF8280 ca vbcMold FFFFS283 ca ubi 88888106 t ublsca 88808452 ca VbltMP 0801782E b vblvcc 88888078 ca ucounthl FFFFS285 ca vcountlo FFFFS283 ca vcountald FFFF82B7 ca video 8808887E b vldcodata D videoptr 88888046 b ur FFFFFA17 ca nauelp 88888144 t xoFFset 88888864 b arts 88888888 ca Ma*MC l.H (Atari ST) Page nesHal 1 .s 18:18:04 a* Z'Mag-lSSS 1 Maduc l.BB (Atari ST I 1 Horizontal and Vertical Scrolling Oeew NEQUAIL.S 2 3 Copyright 1988 ATARI CORP. Rob Zdybel Started 18/18/88 4 5 . . 6 7 8 9 .text S69 net .include atari 18 11 12 HAROUAM CONSTANTS IS 14 15 16 17 18 19 28 21 22 23 •FFFF828a •FFFF828F •FFFF8285 vbascio • llncHld •08888878 ubivcct S78 24 25 •FFFFFDA6 •FFFFF0A8 cur_x cur_y -58 -682 -688 26 27 28 29 S8 SI 32 SS 34 3S 36 37 38 39 48 41 42 Sffff828d $ff4f828f $ffff826S hscmll * i SYSTEM CONSTANTS FFFFFFCE ; : I Video Base Address (lo) MIdth of a scan-1 Inc (Uords. inus 1) Horizontal scroll count (8 .. 15) Systca VSIanfc Vector ! LlncA Housc-f4otlon Vector offset LineA Current eouse Xpos LineA Current aouse Ypos ) i 1 LOCAL CONSTANTS Systea Initialization start! 88880808 08808082 88808888 8888808C 88088018 88088814 88808818 eoooeoiE 2A4F 88008828 80880822 88800824 2F08 2F0D 4267 6 • • 08888026 8886882A 3F3C884A 4E41 • 0 • 2E7CIIXXXIXX 2A600084 2620888C 08AM814 D8A0801C OOBC08800180 2800 - 8808882C DEFcaoec Bet Our dan Local Stack bascpage address aS RAH req'd • text*bss*data«6asePageLength d4 > RAH req'd Return Excess Storage . 8 • • 43 44 45 aove.l a7.aS aowc.l Haystack. a7 aove.l 4(aS),aS TEXTSZ(aS).d8 aove.l 0ATASZ(aS).d0 add.l B5SSZ(a51.d8 add.l mea.da add.l aovc .1 dO d4 Hshrlnk aS,d8 aove.l dO.-(sp) aS,-(sp) aove.l cir.a -(sp) Ocados $4a.l2 aoue.H aS4a.-(sp) Ml trap If $c <• 8 etc.sp addq else H$c,sp add. a cndlf Other Initialization 46 08880838 80888032 8800M36 47 a 00880038 8080883A 42A7 3F3C0028 4E41 SC4F 2FN d 8 • 8 8 8 08088838 88000848 3F3C082F 4E41 8 88800842 S44F 8 8 8 8 - 49 so SI 52 - 88080844 00880046 8608604A 2840 08FC881E 7880 8000884C OONOOSO 3F3C0800 2F3CXXXXXIXX 8 8 800880S6 088888SA 3F3C804C 4E41 8 eeoeeosc 584F 8 S3 54 55 SB 888888SE 88888868 4A48 6888xxix 8 8 8 Super cir.l aowe.a trap addq aove.l -Isp) 8628. -(sp) *1 46, sp dO.-(sp) 1 enter supervisor node I UARMIN6 - Old SSP sawed on stack. Fgctdta 6Mdos $2f.2 aove.N asZf.-(sp) ei trap .If $2 <• 8 e$2.sp addq .else add. a .endlf PS2.sp aeve.l dO.ad adda 430. a4 aoveq 40. d4 Fsfirst 4ncoflles.48 aove.a 4$0.-(sp) aove.l 4ncof lles.-(sp) Oaados S4e.B aove.a 4$4e.-(spl 41 trap If Filenaae ptr Loop Count $808 addq else 8 add. a endlf .neolodp: tst b«l o4 d4 nSO.sp efo.sp FOR (Nine NEO Flies) DO dO abort IF (No NEO flics) A80RT MMAMU 3F3C0006 2F8C MMMfiA incaoso MaM66E 4E41 6666667a 57 5« 59 66 504F «4.88 ova.N owe.l 888, -l»p) cO.-tsp) 6 5«m1os 836.8 owa.ii •836, '(sp) >1 trap 8 .If $6 aSt.sp ad6q .cist a66.H .cn6lf tst hal laa MMM77 4M6 BOOOixii 62 61 64 NMWfS SENxixx MMMftC 3F3C0600 3F00 2FSC88060886 66666696 68666692 66066698 0006089C 6a8eeo9E 65 66 67 41F9»ix»ix OEF0080A Hi^ic 1.06 6 6 • 6 0 6 688. tp 66 abort a66q cap bgt Fsock oowc.H aovc.N hanblist.aO 60,(a6.64) 82.64 •16,64 .getninc •128,68, aOO.-lsp) (M,-(sp) Mvc.l •860, -(sp) OM 31804060 5444 88708016 3F3C8642 4E41 m 2-ftou-19S9 < 6 6 6 - 66666674 66666678 6888667E 66686682 66666684 61 Fopcn 6 6 6 6 16il8i64 P«9« 2 ftxonill.T M .If 8a - a66q ) Save the HanOlc ; Skip NEO HcaOcr i IF (File Seek Error) 6606T <8 •8a, Sp « .else 6 6 abd.M 88a, sp .en6lf tst.l bal 66 abort 6066XXXX IF (Error opening a flic) 600RT 6cados 842.18 aovc.H •842, -(sp) •! trap 6 4M0 i fsneit 6 68 69 76 71 77 73 74 75 76 77 71 79 16 81 82 83 84 85 86 87 AAAAAAAA 3F3C884F 4E41 0400Stt^ S44F I 8 0 6 6 0 0 - 5660 . .else add.M endlf bra •82, sp . .ncoloop .gotnlnci 00666682 00000868 0600006E 2F3CXXXXXXXX 2F3Ce0000086 SFoe 0 0 6 6 066066C6 OOOe06C4 3F3C603F 4E41 6 0 0 600686C6 0EFC060C 66068606 06668608 60686606 06666606 0680aeE6 000660E4 oooeaeEo 666680E8 4680 6808XXXX 45F9XXXXXXXI 41F88246 43F9XXXXXXXX 383C600F 3200 3606 51C8FFF6 800806EC 066666F6 008060F8 060606FE 06600164 06000106 23FCXXXXIXXXIXXX Kill 7E06 49F9XXXXXXXX 4BF9XXXXXXXI 0607 3C3C0002 W^WVww 6m6os 84f,2 aovc.H ebOf.-lsp) •! trap .If 82 <• 8 >82 sp •66q 00666166 00666160 00668112 2F8C 2F3Ce8067006 3F10 06008114 00068118 3F30003r 4E41 Fread aove.l aovc.l >886. -(sp) aovc.H 66, -(sp) Basdos 83f.l2 aove.H R83f.-(sp) Si .If 8t <« 8 trap - addq - .else •66. H .endlf tst.l tai lea lea lea 0 6 d8,ai28,«blgbuff bblgbuff .-(sp) aove .ploopi aovc.H aovc.H 6bra *8c.sp a8c.sp 66 <bort blgbuff*4,a2 palette, a6 oldpal.al *15. 66 (aei.fal)* (all’.laO)* IF (File Reed Error) ABORT j save ol6 color palette create nca color oalette i i 66.. pi OOP sblgbuff .buffptr K6.67 threebuf.ad .roHlp: lea handllst.aS lea •dda 67 aS ) 82.66 aove Fread (aS)*. •32066, a4 .redlp: 6 aovc.l a4.-(sp) 6 aovc.l •87666. -(sp) 6 aovc.H (a5)*,-(sp) 6 6Mdos 83f.l2 6 aovc.H 883f,-(sp) SI 6 trap 6 If 8c <» 8 «8c.sp addq else 0 add.H S8c,sp .endlf 6 tst.l dB abort tai 832666.64 adda dbra d6.. redlp aove.l XMveq ; 67 • Ron Oount FOR (Three rois) 00 ; 65 • Coluan Count FOR (3 Files) DO Read into teap buff i . . 66666116 0EFC866C 66688115 66066126 60666124 86666128 4686 SBOOixxx 08FC7086 S1CEFFE8 68688120 68888132 06686138 43F9IX1XXXX1 4SF9XXXXXXII 47F9XXXXXXIX 88 89 96 91 92 93 94 95 96 lea lea lea : threebuf.al threebuf«326B6.a2 threebuf *64666. a3 IF (File Read Error) ABORT 97 98 99 IBB lai 182 1B3 184 IBS 186 1B7 IBS 1B9 lie 111 112 113 114 US 116 eeseetiE 88888144 88888148 eeeeei4c eeeeei4E 88888152 88888156 88888158 seeeeisc 88888168 88888162 88888166 88888168 88888178 88888172 88888176 88888178 8888817A 88888188 2B79«>oi>» buffptr.aB B193.d6 Bia.dS aiove. 1 1C3C88C7 34308827 2803 SICOFFFC 3A3C8827 280A SICOFFFC 3A308827 2808 SICOFFFC 51CEFFE8 23C8xxxxxixi SC47 BE7C8eeC 6F88 •ove llnlp: •ave . Mue. tl: MVC. 1 dbra ovc •owc.l dbra dbra ,t3: 88888188 117 118 US 128 121 122 123 124 12S 126 127 128 123 13B 131 owc.l 144 145 146 147 148 143 158 ISl 152 153 7818 iMvcq 816. d4 lea handlist. a4 (a4.d4).-(sp) 812. d7 .roHlp .close! moift 3F3C883E 8 4E41 8 584F 8 8 8 •ove.M trap .If $4 - FOR (Nine files) 00 Close all Fclose 63C.4 8$3c,-(sp) 81 <• 8 addq .else add.H .endlf 864.SP 8$4. sp 888881 8C 8888818E 88888132 88888134 4A48 6688XXXX 5544 6A£A tst bat bpl d8 abort 82, d4 .close 88888136 4E63XXXIXXXX Jsr 8888813C 88888184 23F88878XXIXXXXI 21FCxxxxxxxx8888 owc.l owe. 1 subt) ! IF (Error Closing a file) ABORT Inltaaus i Install our OHn aousc handler ublvcct.oldwbl swbl.vbiwect ; Capture Systca V/Blank Interrupt i Keyboard Polling . IF (Keyboard Input Awallable) THEN Scrolling OesM loop * s Mavclp: Bconstat COK 8C0N.-(sp} Bios 1,4 •OVC.M 8Sl.-(sp) trap 813 If $4 <• 8 addq 8$4.Sp else add.H 864. sp ove.H 88888180 37308882 8 8 88888188 88888184 3F3C8881 4E40 88888186 584F 8 8 8 8 - 88888188 B88881BA 4A48 6788XXXX 88888186 3F3C8882 .endlf tst beq d8 noextt Bconln CON aove.M CON.-(sp) Bios 2. 4 •OVt.H 62. -(sp) trap 813 .If $4 <« 8 addq 864, sp 8 888881C2 888881C6 37308882 4E4D 8 888881C8 584F 8 8 888881CA 88888106 8 8 .else - add.H - 64, sp .endlf cap.b beq 8'C'-64.d8 exit bra Hawelp 88308883 6788XIXX 1 CTRL-C ••> EXIT noexlti 88888102 6808 exit: ; Systa* Icar-Ootn I ; 88888104 21F3xxxxxxxx8eee owc.l oldwbl.wblwcct 1 Restore Systca 081 ank Interrupt 8888810C 4EB3IXXXXXXX Jsr UOMUS i Restore Systca aousc handler eeeeeiE2 888881E8 eeeeeiEC eeaeaiFB 68888172 41F3XIXXXXXX 43F88248 38308887 1208 S1C87F7C lea lea dbra oldpal.aB palette. al 815. d8 (a6)*.(al)* d8. .unpIp : restore old color palette User Geados ; return to user node 628.6 ilOVC.M 8628. -(sp) ilove .unolp: aMwe.it abort 888881F6 eaeeeiFA 17308828 4E41 8 8 8 8 eBeaeiFC 5047 8 8 - 154 Copy a line fron scrccnZ 43F3XXXXXXXX 37344888 8 135 136 137 138 13S 148 141 142 143 (a3)i. (aei* 6.d7 - 134 Copy a line froo screenl addq cop blc 8 132 133 (a2)*.(aei* dS..t2 «39,d5 dS..t3 d6.. llnlp aS.buffptr Ocodos 88888184 88888188 HadMC i.ee d6 • Scan Line Count FOR (288 Lines) 00 Copy a line froa scrcenB (al)i. (a6)* d5. .tl tt39.dS 1 bbra •ovc .t2: ietl8i04 aa Z-Hag-iS89 Page } newtall -s - ! trap 81 .if $6 <• 8 addq else add.H .endlf 866. sp 866. sp (Atari SI) lltltiM P«9t 4 •MMIFE MM2ee 4267 4E41 4AFC 155 MMa2e2 156 157 151 159 168 161 8W82B4 48E7S88e 162 161 MM82a8 3839XI11JUII1 164 8M8e28E C87C888F 165 NN8212 11CSS26S 166 •MHZIS 4M6 167 MM621S 66aeiiix 168 NM621C llFC88A882eF 169 NNaZZZ 68Nnxi 178 888M226 11FC8S9CS28F 171 172 88M822C 41F9xxiixxxi 173 88M8232 3839xxxxxxxx 174 888M218 C8FC81E8 175 888M23C D1C8 176 8M8821E 3839xxxxxxxx 177 88888244 eZ48 178 88888246 C87CFFF8 179 88888244 08C8 188 8888824C 23C8xxxixxxx 181 88888252 llF9ixxxxxxx888e 182 88888254 llF9xxxxxxxx8N8 183 88888262 llF9xxxixxxx8888 184 IBS 88888264 4C0F8181 186 8888826E 4EF9 187 88888278 88888888 188 88888274 44FC 189 198 191 192 193 194 195 196 197 198 199 288 281 282 283 284 285 286 287 288 289 218 211 88888276 4888 212 88888278 33E8FD46ixixxxxx 213 88888288 33E8F04Bxxxxxxxx 214 88888288 23E8FFCExxxxxxxx 215 88888298 217CixxxxxxxB8B8 216 88888298 4E75 217 218 219 228 221 88888294 33CBxxxxxxxx 222 88888248 33Clxxxxxxxx 223 88888246 4EF9 224 225 88888248 88888888 226 6888e24C 44FC 227 228 229 238 231 232 233 234 235 236 237 238 239 248 241 242 PtcraB cIr.H trap • • 8 m l*M*irlSn (Mmc l.M return to 6E7O05 I -(fp) 81 illegal VBL I ubl Vertical-Blank Interrupt Server i Mvea.l 88/a8.-<sp) aovc and aovc.b tst.b boc Bove.b bra • . nonSi Jolni aove.b lea aovc aulu adda.l aovc asr and adds aovc.l xaousc,d8 8981. dO dO.hscroll 1 Xpos MOO 16 > Scroll count 1 IF (Scrolling) THEN 4 aord offset I Ypos 8 Llnaald • Vertical offset dO .nonO 8160 ,ltneMld join 8lS6,lloa«ld blgbuFf.aO yaouse.dS 838168. d8 d8,a8 xaousc.dO 81, d8 aovc.b aove.b aovc.b 85ff48.d0 S«(Xpos OIV 16 ) • Line offset aO • Video Base Address dS.aO 1 aB.vbItcap vb 1 1 eap* 1 , vcountb 1 vbltaap*2 vcountald vbltaap*3 vcount 1 ovea.l (sp)*,il8/a8 1 , , .dc.M $4ef9 8 oIBwbli !dc!l Illegal (Old-Vblank) I HOUSE H4NDLIN6 Capture systc* aouse IHITHAUS 61ven: ! Control i I Returns: Ulth aotlon and button vectors captured Register Usage: destroys d8-d3 and a8-a3 : Externals: none ; InItMus: •dc.M aovc Llne-A Trap : 9a888 cur_x(a8),xaouse ovc cur^(a8),tfMuse Mve.l envec(iB).anldvec RourMUS,aovec(a8) aovc. I rts i Take over souse aot Ion I Mouse Motion Interrupt I oursaus; ove I Save ncM aouse position .dc.M dB.xaouse dl.yaouse $4cf9 .dc.l