þþƒ%èX*SAVE#D:DEGASVUF.M65òX*ASM,#-,#D:DEGASVUF.COMü#X* Degas *FULL* View, by Mat*RatX*$X* This program will load a degas"X* high resolution, .PI3 format$"X* picture file and display 1/4. X* of it on 4 different pages8%X* of 130XE (or compatible upgradeB&X* upgrade XL), in Graphics mode 8.L)X* The software will then FLIP throughV%X* them as fast as possible. Other`"X* keyboard control options arejX* as follows:tX*~X* -- Key commands --ˆ*X* 1 - Display 1/4 of graphic, 1st page’X* 2 - second pageœX* 3 - third page¦X* 4 - fourth page°-X* F - full display speed, not real usefulºX* RETURN - Exit to main menu for another picture selectionöX* ESCAPE - Exit programX* >>BEWARE<<< Don't expect to run2&X* this with SpartaDOS X Cartridge.<$X* SDX likes all those RAM banks.F$X* Go mucking about with them andP"X* you are going to CRASH dude!ZX* Important addresses fordX* loader program:n †ESCAPEx †SCREENà‚X* Byte splitting registersŒ †SHIFT1â– †SHIFT2ã  †SHIFT3äª †SHIFT4å´ …SAVEX澇BANKSCR@;;16K IS ADDRȈBANKSCR1PÒ …SCAN1cÜ …SCAN2cæX* Page bank select valuesð …PAGE1Áú…PAGE2Á…PAGE3Á…PAGE4Á  „MAINñ"X* Bank select register,‡BANKSELÓ6 †BLANK40@ †BLANK5@J2T‰LINECOUNT ^ …EXFLG hFr)X* Mat*Rat's customized system equates|>ŒD:SYSEQU.M65† X* Mac/65's IO Macros library>‹D:IOMAC.LIBš X* Mat*Rat's Graphics routine¤>ŽD:GRAPHICS.M65®X* 2 line graphic buffer¸ †BUF160 Â#X* Custom display list work areȧDISPLAY p=0=OÖ ‡BANKSCRàƒDLA…SCAN1;; 15'S GO HEREê O;; SKIP 4K BOUNDARYô ˆBANKSCR1þ)ƒDLB…SCAN2;; ANOTHER 104 MODE 8 LINES A ‡DISPLAY ===&"X* Working filename for parsing0"…FILEN AD1:FILENAME.EXTA=›=:X* Default directory specD‡FILSPEC AˆD1:*.PI3A=›=N!X* Initialize custom, 200 lineXX* graphics mode 8 displaybX* list for startersl!„INIZ$>;; Setup display listvQ>€…INIZ1PƒDLA9Š2” (>…SCAN1ž H…INIZ1¨$>²…INIZ2PƒDLB9¼2Æ (>…SCAN2Ð H…INIZ2ÚX* Clear screen, show titleä"X* and Start DEGAS VIEW programî …STARTø‰GRAPHICS Q> PÆX* Get drive number first !X* or accept default displayed*X* by pressing return only4 †CLOSE >5†PRINT =A¤ Äåçáó Öéå÷¬ Âù ÍáôªÒáô¬ ¨ã© Áîáìïç AH†PRINT =‡FILSPECR5†PRINT =A¤[RETURN] = Keep default shown above.A\2†PRINT =A¡Drive # Degas .PI3 files are on ?Af†INPUT =ˆFILENAME=p QˆFILENAMEzR>›„ F‡NONEWDRŽP‡FILSPEC˜X* Open a directory listing¢X* and display it¬#‡NONEWDR…OPEN ===‡FILSPEC¶CÀ G†NOFILEÊ ˆNEXTFILE†INPUT =ˆFILENAMEÔCÞ G†NOFILEè†PRINT =ˆFILENAMEò !ˆNEXTFILEüX* Request filename to view &X* [RETURN] only restarts, allowing #X* the user to change drive spec )X* ESCAPE will exit the program to DOS$ 5X* Or type filename (no drive or ext reqd) to load. †NOFILE8 †CLOSE B (†PRINT =A—Graphics file to load ?AL .†PRINT =A[RETURN] = Restart, new driveAV 1†PRINT =A Double [ESC] and [RETURN] exits.A` †INPUT =ˆFILENAME=€j †CLOSE t QˆFILENAME~ R>†ESCAPEˆ F‡ESCEXIT’ R>›œ H‡GETFILE¦ !…START° ‡ESCEXIT‰GRAPHICS º &†PRINT =A•Degas View by Mat*RatAÄ :Î X* Parse the filenameØ "X* If no drive letter or numberâ X* prefixed, insert thoseì #X* If no extender, paste on .PI3ö ‡GETFILEQˆFILENAME $> %>;; EXTENDER FOUND FLAG '…EXFLG R> :( F…GETF12 QˆFILENAME< R> :F F…GETF1P Q> DZ P…FILENd Q‡FILSPECn P…FILENx Q> :‚ P…FILENŒ %>– !X* If a '.' is in the filename  "X* don't mess with the extenderª …GETF1QˆFILENAME9´ P…FILEN8¾ 2È 3Ò R>›Ü F…GETF2æ R> .ð H…GETF1ú #…EXFLG !…GETF1 …GETF2Q…EXFLG H…GETF3" 1, Q> .6 P…FILEN8@ 3J Q> PT P…FILEN8^ 3h Q> Ir P…FILEN8| 3† Q> 3 P…FILEN8š 3¤ Q>›® P…FILEN8¸ …GETF3†PRINT =…FILEN …OPEN ===…FILENÌ CÖ I†LOADITà X* Bad filename or drive?ê X* Restart the programô )†PRINT =A˜File error, press RETURNAþ Q>ÿ „HOLDR‚CH F„HOLD P‚CH& !…START0 †LOADIT: "X* Let OS setup the GRAPHICS 24D #X* originally, to get all systemN X* variables set properlyX "X* Then point to custom displayb X* list and memory.l ‰GRAPHICS v Q>4‡DISPLAY€ $>5‡DISPLAYŠ %…JIFFY” ‡LOADIT1)…JIFFYž F‡LOADIT1¨ P0² &1¼ Q>4‡BANKSCRÆ P†SAVMSCÐ Q>5‡BANKSCRÚ P†SAVMSCä Q>…SCAN1…SCAN2î P‰LINECOUNTø %X* Forget the 34 byte Degas header /…BGET =†BUF160=";; Get and forget header C I…CNTNU †CLOSE * ‰GRAPHICS 4 †PRINT =AŠLOAD ERRORA> :H X* Setup screen RAM pointersR …CNTNU\ Q†SAVMSCf P†SCREENp Q†SAVMSCz P†SCREEN„ Q> Ž PƘ Q>¢ PŬ Q>¶ PÈÀ -X* Get next 2 screen lines of picture dataÊ +…GLINE…BGET =†BUF160= ;; Read a lineÔ CÞ I†GLINE2è †GLINE1$>„MAINò &‡BANKSELü ‰GRAPHICS  †CLOSE !†PRINT =AFile input errorA:$†GLINE2$>;; Buffer index.1X* SHIFT1 will hold even pixels for even lines80X* SHIFT2 will hold odd pixels for even linesB†GLINE3Q†BUF1609L%>V,` †GLINE4U?j U†SHIFT1tU?~ U†SHIFT2ˆ1’ H†GLINE4œ,¦%>°0X* SHIFT3 will hold even pixels for odd linesº/X* SHIFT4 will hold odd pixels for odd linesÄQ†BUF160P9Î ‡GLINE4AU?Ø U†SHIFT3âU?ì U†SHIFT4ö1 H‡GLINE4A 2 Q†BUF1609%>(,2 †GLINE5U?< U†SHIFT1FU?P U†SHIFT2Z1d H†GLINE5n%>x,‚Q†BUF160P9Œ ‡GLINE5AT?– U†SHIFT3 T?ª U†SHIFT4´1¾ H‡GLINE5AÈ &…SAVEXÒ $>…PAGE1Ü$X* Stuff pixel data in PAGE1 bankæ$X* and main bank. Use PAGE1,2,3,4ð#X* for computational convenienceú!X* Shove copy of PAGE1 in MAIN&X* so display doesn't flash garbageX* during keyboard inputs.X*"#X* Stuff appropriate shift bytes,$X* into proper pages, as enabled.6 &‡BANKSEL@ Q†SHIFT1J P@†SCREEN7T $>„MAIN^ &‡BANKSELh P@†SCREEN7r $>…PAGE2| &‡BANKSEL† Q†SHIFT2 P@†SCREEN7š $>…PAGE3¤ &‡BANKSEL® Q†SHIFT3¸ P@†SCREEN7 $>…PAGE4Ì &‡BANKSELÖ Q†SHIFT4à P@†SCREEN7ê #†SCREENô H…CHKDNþ#†SCREEN$X* Restore buffer index and check#X* if done reading picture file.…CHKDN$…SAVEX&20(>P: F‡UPDLINED !†GLINE3N ‡UPDLINEX"‰LINECOUNTb F†SHOIT0lQ‰LINECOUNTvR>d€ H„JMGLŠQ>4ˆBANKSCR1” P†SCREENžQ>5ˆBANKSCR1¨P†SCREEN²„JMGL¼ !…GLINEÆX* Display routineÐX* Enable respective banksÚ#X* Stick BLANK4 lines command inä&X* display list for even line pagesî#X* and BLANK5 for odd line pagesø'X* This is done to minimixe vertical"X* jitter during page flipping. *X* Horizontal jitter is not eliminated,'X* however, as it would require some &X* extra fancy bit shifting at load*X* time. Not fun.4X*>†SHOIT0†CLOSE H…SHOIT$>…PAGE1R %>†BLANK4\‡SHOIT1AQ…JIFFYf†SHOIT1R…JIFFYp F†SHOIT1z &‡BANKSEL„'‡DISPLAYŽ2˜2¢2¬2¶ (>…PAGE3À H†SHOIT2Ê %>†BLANK5Ô†SHOIT2Q‚CHÞR>ÿè H†SHOIT3ò(>…PAGE4ü F…SHOIT H‡SHOIT1A X* Always re-enable MAIN bank&X* before exiting any display loop!$†SHOIT3$>„MAIN. &‡BANKSEL8X* Process key commandBX* ESCAPE - Exit to dosL,X* 1 - Display static screen, page 1 onlyVX* 2 - Display page 2`X* 3 - Display page 3jX* 4 - Display page 4t*X* H - Show half of image, flip screens~X* 1 & 3 at 30 hertzˆ*X* S - Show half of image, flip screens’X* 2 & 4 at 30 hertzœ)X* F - Fastest display possible, a bit¦,X* useless, but easy enuf to throw in°&X* N - Normal display (SHOIT above)º;X* SPACE - Invert displays, swap color registers, simpleÄX*Î'X* Any other key loops back to START؆HOLDIT†CLOSE â…OPEN ===A‚K:AìCö I‡HOLDNOW †CLOSE   !…START!‡HOLDNOW…BGET =ˆFILENAME= QˆFILENAME(X* SPACE - Invert display?2R> ;; SPACE?< H…CKSCLF !†INVERTPX* (H)alf display, 1&3 ?Z …CKSCLR> Hd H†CKSNRMn !‡SHOHALFx X* (N)ormal display, 4 pages?‚†CKSNRMR> NŒ H‡CKSFAST– !…SHOIT "X* (F)astest possible flipping?ª‡CKSFASTR> F´ H…CKSCS¾ !‡FASTESTÈ …CKSCSÒX* (S)how half, pages 2&4?ÜR> SæHƒCK1ð!‰SHOSECHAFúX* (1)-show screen 1 only? ƒCK1R> 1HƒCK2 $>…PAGE1" H„SVPG,X* (2)-show screen 2 only?6 ƒCK2R> 2@HƒCK3J $>…PAGE2T H„SVPG^X* (3)-show screen 3 only?h ƒCK3R> 3rHƒCK4| $>…PAGE3† H„SVPGX* (4)-show screen 4 only?š ƒCK4R> 4¤ H…CKESC® $>…PAGE4¸„SVPG&‡BANKSELÂ$>ÿÌ …SVPG1(‚CHÖ F…SVPG1à $>„MAINê &‡BANKSELô !‡HOLDNOWþ X* (ESCAPE) from the program?…CKESCR>†ESCAPE H‡RESTART †CLOSE &2†PRINT =A¡Degas View by Mat*Rat, (c) AnalogA0::‡RESTART†CLOSE D !…STARTN!X* INVERT routine - swap colorXX* registers 709 & 710b†INVERTQÆl5vQÅ€PÆŠ7”PÅž !…SHOIT¨X* Show (H)alf, pages ! & 3²‡SHOHALF$>…PAGE1¼ Q…JIFFYÆ…SHOH1R…JIFFYÐ F…SHOH1Ú &‡BANKSELä $>…PAGE3î Q…JIFFYø…SHOH2R…JIFFY F…SHOH2  &‡BANKSEL$‚CH (>ÿ* F‡SHOHALF4 $>„MAIN> &‡BANKSELH !‡HOLDNOWRX* (S)how half, pages 2 & 4\‰SHOSECHAF$>…PAGE2f Q…JIFFYp…SHOS1R…JIFFYz F…SHOS1„ &‡BANKSELŽ $>…PAGE4˜ Q…JIFFY¢…SHOS2R…JIFFY¬ F…SHOS2¶ &‡BANKSELÀ$‚CHÊ(>ÿÔF‰SHOSECHAFÞ $>„MAINè &‡BANKSELò !‡HOLDNOWü X* Show all screens (F)astest‡FASTESTQ>ÿˆFASTEST1$>…PAGE1 &‡BANKSEL$ $>…PAGE2. &‡BANKSEL8 $>…PAGE3B &‡BANKSELL $>…PAGE4V &‡BANKSEL`R‚CHj FˆFASTEST1t $>„MAIN~ &‡BANKSELˆ !‡HOLDNOW’àœ „INIZ