home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / ST_NEWS / STN_04_3.MSA / PROGRAMS_TWIST.ASM < prev    next >
Encoding:
Assembly Source File  |  1989-05-19  |  19.7 KB  |  778 lines

  1. **************************************************************
  2. *              THE TWIST SCROLL                 *
  3. *        CODING JANUARY 1989 BY MANIKIN               *
  4. *              OF THE LOST BOYS                       *
  5. *                                     *
  6. *    TO CONTACT US:    22 OXFORD RD                 *
  7. *            TEDDINGTON    ALL CORRESPONDENCE   *
  8. *            MIDDX        WELCOMED ABOUT SOURCE*             *
  9. *            TW11 OPZ    PROGRAMMING ETC      *
  10. *            ENGLAND        WE WILL ATTEMPT TO   *
  11. *                    ANSWER ALL LETTERS.  *
  12. **************************************************************
  13.  
  14.         clr.l -(sp)            SET SUPERVISOR
  15.         move.w #$20,-(sp)
  16.         trap #1
  17.         add.l #6,sp
  18.         move.l d0,oldssp
  19.         dc.w $a00a            LOSE MOUSE
  20.         move.l #$00000777,$ff8240    SET A FEW COLORS
  21.         move.l #$04440777,$ff8244
  22.         BSR MAKEFONTS            MAKE UP THE FONTS
  23.         MOVE.W #2,-(SP)            GET PHYSBASE
  24.         TRAP #14    
  25.         ADD.L #2,SP
  26.         MOVE.L D0,SCREEN    
  27.         MOVE.L D0,SAVESCREEN
  28.         MOVE.L #TEXT,-(SP)        CLEAR THE SCREEN
  29.         MOVE.W #9,-(SP)
  30.         TRAP #1
  31.         ADD.L #6,SP
  32.  
  33. ****************************
  34. *     THE MAIN LOOP        *
  35. ****************************
  36.  
  37. VBLOOP        TST.W SWITCH        WHICH SCREEN DISPLAY
  38.         BNE.S TIME
  39.         MOVE.L #$78000,SCREEN1    SCREEN1= PHYSBASE
  40.         MOVE.L #$70000,SCREEN    SCREEN=    LOGBASE
  41.         MOVE.W #1,SWITCH    CHANGE FOR NEXT TIME
  42.         BRA.S TIME2
  43. TIME        MOVE.L #$70000,SCREEN1    SCREEN=    PHYSBASE
  44.         MOVE.L #$78000,SCREEN    SCREEN1=PHYSBASE
  45.         MOVE.W #0,SWITCH    CHANGE FOR NEXT TIME
  46. TIME2        MOVE.W #-1,-(SP)    SET SCREENS USING XBIOS 5
  47.         MOVE.L SCREEN1,-(SP)    PHYS
  48.         MOVE.L SCREEN,-(SP)    LOG
  49.         MOVE.W #5,-(SP)
  50.         TRAP #14
  51.         ADD.L #12,SP
  52.         MOVE.W #2,-(SP)        ANY KEYS WAITING
  53.         MOVE.W #1,-(SP)
  54.         TRAP #13
  55.         ADDQ.L #4,SP
  56.         TST D0            TEST FOR KEY
  57.         BNE    TWISTEND    YES THEN EXIT THE TWIST SCROLL
  58.         MOVE.W #37,-(SP)    WAIT FOR VBL
  59.         TRAP #14
  60.         ADD.L #2,-(SP)
  61.         ADD.L #8640,FONTTYPE    TAKE THE NEXT FONT
  62.         
  63.         CMP.L #FONTEND,FONTTYPE        IS IT PAST THE LAST FONT?
  64.         BNE.S CONT            IF NO THEN CONTINUE
  65.         MOVE.L #FONT1,FONTTYPE        ELSE RESET FONT POINTER TO FIRST FONT
  66.         ADD.L #1,SCROLLPOINT        ADVANCE SCROLLINE BY 1 CHARACTER
  67.         MOVE.L SCROLLPOINT,A6        GET SCROLL
  68.         CLR.L D6
  69.         MOVE.B (A6)+,D6            
  70.         CMP.B #$FF,21(a6)        TEST FOR END OF SCROLLINE
  71.         BNE.S CONT            NO THEN CONTINUE
  72.         MOVE.L #SCROLLINE,SCROLLPOINT    ELSE RESTART SCROLL
  73.  
  74. ********************************************************
  75. *WELL THIS IS THE ACTUAL SCROLLINE. EACH CHARACTER IS  *
  76. *IS PUT ON THE SCREEN BY ITS OWN LITTLE ROUTINE.       *
  77. *WHICH PUTS ITS CHARACTER TO A PARTICULAR POINT IN THE *
  78. *BUFFER. THE FIRST PART OFF THE CHARACTER IS ADDED TO  *
  79. *THE SCREEN WHILE THE SECOND PART IS MOVED STRAIGHT TO *
  80. *THE SCREEN. IE FIRST WORD ADDED SECOND WORD MOVED     *
  81. *THIS IS DONE (IN GENERAL) FOR THE FIRST 29 LINES BUT  *
  82. *AS EACH CHARACTER IS 8 LINES LOWER THAN THE LAST THE  *
  83. *LAST 8 LINES WOULD BE ADDED TO THEM SELVES AS THE     *
  84. *PREVIOUS CHARACTER WOULD NOT HAVE CLEARED THE SCREEN  *
  85. *WITH ITS OWN CHARACTER.       IF YOU CAN UNDERSTAND   *
  86. *THIS BIT THEN YOU HAVE THE KEY TO THE TWIST SCROLL.   *
  87. *  TAKE YOUR TIME IT WILL ALL BECOME CLEAR.           *
  88. * THE SCROLL WAS WORKED OUT VERY CAREFULLY ORIGIANLLY  *
  89. *SO THAT WHERE A CHARACTER EXTENDS OVER THE BOTTOM OF  *
  90. *THE BUFFER IT IS DRAWN OVER AT THE TOP. THIS IS DONE  *
  91. *IN THE DBF LOOPS SO YOU'LL HAVE TO STUDY THEM         *
  92. *CAREFULLY TO SEE WHERE.                   *
  93. ********************************************************
  94.  
  95. CONT        MOVE.L SCROLLPOINT,A6        GET SCROLL POINTER
  96.         MOVE.L FONTTYPE,A0        GET FONTTYPE
  97.         CLR.L D6
  98.         MOVE.B (A6)+,D6            GET CHARACTER
  99.         SUB.B #32,D6            
  100.         MULU #144,D6            GET OFFSET FOR THIS CHARACTER IN FONT
  101.         ADD.L D6,A0
  102.         MOVE.L SCREEN,A1        
  103.         add.l #32,a0
  104.         MOVE.W #28,D0            DO 29 LINES
  105. FONTYDRAW    add.l #2,a0            THIS IS THE FIRST CHARACTER
  106.         move.w (a0)+,(a1)        SO ONLY THE SECOND HALF IS DRAWN 
  107.         ADD.L #160,A1            ON THE SCREEN.
  108.         DBF D0,FONTYDRAW
  109.  
  110.         MOVE.L FONTTYPE,A0        AS ABOVE
  111.         CLR.L D6
  112.         MOVE.B (A6)+,D6
  113.         SUB.B #32,D6
  114.         MULU #144,D6
  115.         ADD.L D6,A0
  116.         MOVE.L SCREEN,A1
  117.         MOVE.W #28,D0            DO 29 LINES
  118. FONTYDRAW1c    MOVE.W (A0)+,D5            
  119.         ADD.W D5,(A1)            ADD TO SCREEN
  120.         move.w (a0)+,8(a1)        MOVE TO SCREEN 
  121.         ADD.L #160,A1
  122.         DBF D0,FONTYDRAW1c
  123.         move.w #7,d0            DO ANOTHER 8 LINES
  124. FONTYDRAW1d    MOVE.W (A0)+,(a1)        MOVE TO SCREEN
  125.         move.w (a0)+,8(a1)        ADD TO SCREEN
  126.         ADD.L #160,A1
  127.         DBF D0,FONTYDRAW1d
  128.  
  129. ***********************************************
  130. *CONSTRUCTION OF BUFFER CONTINUES AS ABOVE    *
  131. *WITH APPROPRIATE OFFSETS ETC                 *
  132. ***********************************************
  133.  
  134.         MOVE.W #28,D0
  135.         MOVE.L FONTTYPE,A0
  136.         CLR.L D6
  137.         MOVE.B (A6)+,D6
  138.         SUB.B #32,D6
  139.         MULU #144,D6
  140.         ADD.L D6,A0
  141.         MOVE.L SCREEN,A1
  142.         add.l #1288,a1
  143. FONTYDRAW1    MOVE.W (A0)+,D5
  144.         ADD.W D5,(A1)
  145.         move.w (a0)+,8(a1)
  146.         ADD.L #160,A1
  147.         DBF D0,FONTYDRAW1
  148.         move.w #7,d0
  149. FONTYDRAW1b    MOVE.W (A0)+,(a1)
  150.         move.w (a0)+,8(a1)
  151.         ADD.L #160,A1
  152.         DBF D0,FONTYDRAW1b
  153.         MOVE.W #28,D0
  154.         MOVE.L FONTTYPE,A0
  155.         CLR.L D6
  156.         MOVE.B (A6)+,D6
  157.         SUB.B #32,D6
  158.         MULU #144,D6
  159.         ADD.L D6,A0
  160.         MOVE.L SCREEN,A1
  161.         add.l #2576,a1
  162. FONTYDRAW2    MOVE.W (A0)+,D5
  163.         ADD.W D5,(A1)
  164.         move.w (a0)+,8(a1)
  165.         ADD.L #160,A1
  166.         DBF D0,FONTYDRAW2
  167.         move.w #7,d0
  168. FONTYDRAW2b    MOVE.W (A0)+,(a1)
  169.         move.w (a0)+,8(a1)
  170.         ADD.L #160,A1
  171.         DBF D0,FONTYDRAW2b
  172.  
  173.         MOVE.W #28,D0
  174.         MOVE.L FONTTYPE,A0
  175.         CLR.L D6
  176.         MOVE.B (A6)+,D6
  177.         SUB.B #32,D6
  178.         MULU #144,D6
  179.         ADD.L D6,A0
  180.         MOVE.L SCREEN,A1
  181.         add.l #3864,a1
  182. FONTYDRAW3    MOVE.W (A0)+,D5
  183.         ADD.W D5,(A1)
  184.         move.w (a0)+,8(a1)
  185.         ADD.L #160,A1
  186.         DBF D0,FONTYDRAW3
  187.         move.w #7,d0
  188. FONTYDRAW3b    MOVE.W (A0)+,(a1)
  189.         move.w (a0)+,8(a1)
  190.         ADD.L #160,A1
  191.         DBF D0,FONTYDRAW3b
  192.         MOVE.W #28,D0
  193.         MOVE.L FONTTYPE,A0
  194.         CLR.L D6
  195.         MOVE.B (A6)+,D6
  196.         SUB.B #32,D6
  197.         MULU #144,D6
  198.         ADD.L D6,A0
  199.         MOVE.L SCREEN,A1
  200.         add.l #5152,a1
  201. FONTYDRAW4    MOVE.W (A0)+,D5
  202.         ADD.W D5,(A1)
  203.         move.w (a0)+,8(a1)
  204.         ADD.L #160,A1
  205.         DBF D0,FONTYDRAW4
  206.         move.w #7,d0
  207. FONTYDRAW4b    MOVE.W (A0)+,(a1)
  208.         move.w (a0)+,8(a1)
  209.         ADD.L #160,A1
  210.         DBF D0,FONTYDRAW4b
  211.         MOVE.W #28,D0
  212.         MOVE.L FONTTYPE,A0
  213.         CLR.L D6
  214.         MOVE.B (A6)+,D6
  215.         SUB.B #32,D6
  216.         MULU #144,D6
  217.         ADD.L D6,A0
  218.         MOVE.L SCREEN,A1
  219.         add.l #6440,a1
  220. FONTYDRAW5    MOVE.W (A0)+,D5
  221.         ADD.W D5,(A1)
  222.         move.w (a0)+,8(a1)
  223.         ADD.L #160,A1
  224.         DBF D0,FONTYDRAW5
  225.         move.w #7,d0
  226. FONTYDRAW5b    MOVE.W (A0)+,(a1)
  227.         move.w (a0)+,8(a1)
  228.         ADD.L #160,A1
  229.         DBF D0,FONTYDRAW5b
  230.         MOVE.W #28,D0
  231.         MOVE.L FONTTYPE,A0
  232.         CLR.L D6
  233.         MOVE.B (A6)+,D6
  234.         SUB.B #32,D6
  235.         MULU #144,D6
  236.         ADD.L D6,A0
  237.         MOVE.L SCREEN,A1
  238.         add.l #7728,a1
  239. FONTYDRAW6    MOVE.W (A0)+,D5
  240.         ADD.W D5,(A1)
  241.         move.w (a0)+,8(a1)
  242.         ADD.L #160,A1
  243.         DBF D0,FONTYDRAW6
  244.         move.w #2,d0
  245. FONTYDRAW6b    MOVE.W (A0)+,(a1)
  246.         move.w (a0)+,8(a1)
  247.         ADD.L #160,A1
  248.         DBF D0,FONTYDRAW6b
  249.         move.w #4,d0
  250. FONTYDRAW6c    MOVE.W (A0)+,-12800(a1)
  251.         move.w (a0)+,-12792(a1)
  252.         ADD.L #160,A1
  253.         DBF D0,FONTYDRAW6c
  254.         MOVE.W #23,D0
  255.         MOVE.L FONTTYPE,A0
  256.         CLR.L D6
  257.         MOVE.B (A6)+,D6
  258.         SUB.B #32,D6
  259.         MULU #144,D6
  260.         ADD.L D6,A0
  261.         MOVE.L SCREEN,A1
  262.         add.l #9016,a1
  263. FONTYDRAW7    MOVE.W (A0)+,D5
  264.         ADD.W D5,(A1)
  265.         move.w (a0)+,8(a1)
  266.         ADD.L #160,A1
  267.         DBF D0,FONTYDRAW7
  268.         move.w #4,d0
  269. FONTYDRAW7c    MOVE.W (A0)+,D5
  270.         ADD.W D5,-12800(A1)
  271.         move.w (a0)+,-12792(a1)
  272.         ADD.L #160,A1
  273.         DBF D0,FONTYDRAW7c
  274.         move.w #7,d0
  275. FONTYDRAW7b    MOVE.W (A0)+,-12800(a1)
  276.         move.w (a0)+,-12792(a1)
  277.         ADD.L #160,A1
  278.         DBF D0,FONTYDRAW7b
  279.         MOVE.W #15,D0
  280.         MOVE.L FONTTYPE,A0
  281.         CLR.L D6
  282.         MOVE.B (A6)+,D6
  283.         SUB.B #32,D6
  284.         MULU #144,D6
  285.         ADD.L D6,A0
  286.         MOVE.L SCREEN,A1
  287.         add.l #10304,a1
  288. FONTYDRAW8c    MOVE.W (A0)+,D5
  289.         ADD.W D5,(A1)
  290.         move.w (a0)+,8(a1)
  291.         ADD.L #160,A1
  292.         DBF D0,FONTYDRAW8c
  293.         move.w #12,d0
  294. FONTYDRAW8    MOVE.W (A0)+,D5
  295.         ADD.W D5,-12800(A1)
  296.         move.w (a0)+,-12792(a1)
  297.         ADD.L #160,A1
  298.         DBF D0,FONTYDRAW8
  299.         move.w #7,d0
  300. FONTYDRAW8b    MOVE.W (A0)+,-12800(a1)
  301.         move.w (a0)+,-12792(a1)
  302.         ADD.L #160,A1
  303.         DBF D0,FONTYDRAW8b
  304.         MOVE.W #7,D0
  305.         MOVE.L FONTTYPE,A0
  306.         CLR.L D6
  307.         MOVE.B (A6)+,D6
  308.         SUB.B #32,D6
  309.         MULU #144,D6
  310.         ADD.L D6,A0
  311.         MOVE.L SCREEN,A1
  312.         add.l #11592,a1
  313. FONTYDRAW9    MOVE.W (A0)+,D5
  314.         ADD.W D5,(A1)
  315.         move.w (a0)+,8(a1)
  316.         ADD.L #160,A1
  317.         DBF D0,FONTYDRAW9
  318.         move.w #20,d0
  319. FONTYDRAW9b    MOVE.W (A0)+,D5
  320.         add.W D5,-12800(a1)
  321.         move.w (a0)+,-12792(a1)
  322.         ADD.L #160,A1
  323.         DBF D0,FONTYDRAW9b
  324.         move.w #7,d0
  325. FONTYDRAW9C    MOVE.W (A0)+,-12800(a1)
  326.         move.w (a0)+,-12792(a1)
  327.         ADD.L #160,A1
  328.         DBF D0,FONTYDRAW9C
  329.         MOVE.W #28,D0
  330.         MOVE.L FONTTYPE,A0
  331.         CLR.L D6
  332.         MOVE.B (A6)+,D6
  333.         SUB.B #32,D6
  334.         MULU #144,D6
  335.         ADD.L D6,A0
  336.         MOVE.L SCREEN,A1
  337.         add.l #80,a1
  338. FONTYDRAW10    MOVE.W (A0)+,D5
  339.         ADD.W D5,(A1)
  340.         move.w (a0)+,8(a1)
  341.         ADD.L #160,A1
  342.         DBF D0,FONTYDRAW10
  343.         move.w #7,d0
  344. FONTYDRAW10C    MOVE.W (A0)+,(A1)
  345.         move.w (a0)+,8(a1)
  346.         ADD.L #160,A1
  347.         DBF D0,FONTYDRAW10C
  348.         MOVE.W #28,D0
  349.         MOVE.L FONTTYPE,A0
  350.         CLR.L D6
  351.         MOVE.B (A6)+,D6
  352.         SUB.B #32,D6
  353.         MULU #144,D6
  354.         ADD.L D6,A0
  355.         MOVE.L SCREEN,A1
  356.         add.l #1368,a1
  357. FONTYDRAW11    MOVE.W (A0)+,D5
  358.         ADD.W D5,(A1)
  359.         move.w (a0)+,8(a1)
  360.         ADD.L #160,A1
  361.         DBF D0,FONTYDRAW11
  362.         move.w #7,d0
  363. FONTYDRAW11b    MOVE.W (A0)+,(a1)
  364.         move.w (a0)+,8(a1)
  365.         ADD.L #160,A1
  366.         DBF D0,FONTYDRAW11b
  367.         MOVE.W #28,D0
  368.         MOVE.L FONTTYPE,A0
  369.         CLR.L D6
  370.         MOVE.B (A6)+,D6
  371.         SUB.B #32,D6
  372.         MULU #144,D6
  373.         ADD.L D6,A0
  374.         MOVE.L SCREEN,A1
  375.         add.l #2656,a1
  376. FONTYDRAW12    MOVE.W (A0)+,D5
  377.         ADD.W D5,(A1)
  378.         move.w (a0)+,8(a1)
  379.         ADD.L #160,A1
  380.         DBF D0,FONTYDRAW12
  381.         move.w #7,d0
  382. FONTYDRAW12b    MOVE.W (A0)+,(a1)
  383.         move.w (a0)+,8(a1)
  384.         ADD.L #160,A1
  385.         DBF D0,FONTYDRAW12b
  386.         MOVE.W #28,D0
  387.         MOVE.L FONTTYPE,A0
  388.         CLR.L D6
  389.         MOVE.B (A6)+,D6
  390.         SUB.B #32,D6
  391.         MULU #144,D6
  392.         ADD.L D6,A0
  393.         MOVE.L SCREEN,A1
  394.         add.l #3944,a1
  395. FONTYDRAW13    MOVE.W (A0)+,D5
  396.         ADD.W D5,(A1)
  397.         move.w (a0)+,8(a1)
  398.         ADD.L #160,A1
  399.         DBF D0,FONTYDRAW13
  400.         move.w #7,d0
  401. FONTYDRAW13b    MOVE.W (A0)+,(a1)
  402.         move.w (a0)+,8(a1)
  403.         ADD.L #160,A1
  404.         DBF D0,FONTYDRAW13b
  405.         MOVE.W #28,D0
  406.         MOVE.L FONTTYPE,A0
  407.         CLR.L D6
  408.         MOVE.B (A6)+,D6
  409.         SUB.B #32,D6
  410.         MULU #144,D6
  411.         ADD.L D6,A0
  412.         MOVE.L SCREEN,A1
  413.         add.l #5232,a1
  414. FONTYDRAW14    MOVE.W (A0)+,D5
  415.         ADD.W D5,(A1)
  416.         move.w (a0)+,8(a1)
  417.         ADD.L #160,A1
  418.         DBF D0,FONTYDRAW14
  419.         move.w #7,d0
  420. FONTYDRAW14b    MOVE.W (A0)+,(a1)
  421.         move.w (a0)+,8(a1)
  422.         ADD.L #160,A1
  423.         DBF D0,FONTYDRAW14b
  424.         MOVE.W #28,D0
  425.         MOVE.L FONTTYPE,A0
  426.         CLR.L D6
  427.         MOVE.B (A6)+,D6
  428.         SUB.B #32,D6
  429.         MULU #144,D6
  430.         ADD.L D6,A0
  431.         MOVE.L SCREEN,A1
  432.         add.l #6520,a1
  433. FONTYDRAW15    MOVE.W (A0)+,D5
  434.         ADD.W D5,(A1)
  435.         move.w (a0)+,8(a1)
  436.         ADD.L #160,A1
  437.         DBF D0,FONTYDRAW15
  438.         move.w #7,d0
  439. FONTYDRAW15b    MOVE.W (A0)+,(a1)
  440.         move.w (a0)+,8(a1)
  441.         ADD.L #160,A1
  442.         DBF D0,FONTYDRAW15b
  443.         MOVE.W #28,D0
  444.         MOVE.L FONTTYPE,A0
  445.         CLR.L D6
  446.         MOVE.B (A6)+,D6
  447.         SUB.B #32,D6
  448.         MULU #144,D6
  449.         ADD.L D6,A0
  450.         MOVE.L SCREEN,A1
  451.         add.l #7808,a1
  452. FONTYDRAW16    MOVE.W (A0)+,D5
  453.         ADD.W D5,(A1)
  454.         move.w (a0)+,8(a1)
  455.         ADD.L #160,A1
  456.         DBF D0,FONTYDRAW16
  457.         move.w #2,d0
  458. FONTYDRAW16b    MOVE.W (A0)+,(a1)
  459.         move.w (a0)+,8(a1)
  460.         ADD.L #160,A1
  461.         DBF D0,FONTYDRAW16b
  462.         move.w #4,d0
  463. FONTYDRAW16c    MOVE.W (A0)+,-12800(a1)
  464.         move.w (a0)+,-12792(a1)
  465.         ADD.L #160,A1
  466.         DBF D0,FONTYDRAW16c
  467.         MOVE.W #23,D0
  468.         MOVE.L FONTTYPE,A0
  469.         CLR.L D6
  470.         MOVE.B (A6)+,D6
  471.         SUB.B #32,D6
  472.         MULU #144,D6
  473.         ADD.L D6,A0
  474.         MOVE.L SCREEN,A1
  475.         add.l #9096,a1
  476. FONTYDRAW17    MOVE.W (A0)+,D5
  477.         ADD.W D5,(A1)
  478.         move.w (a0)+,8(a1)
  479.         ADD.L #160,A1
  480.         DBF D0,FONTYDRAW17
  481.         move.w #4,d0
  482. FONTYDRAW17c    MOVE.W (A0)+,D5
  483.         ADD.W D5,-12800(A1)
  484.         move.w (a0)+,-12792(a1)
  485.         ADD.L #160,A1
  486.         DBF D0,FONTYDRAW17c
  487.         move.w #7,d0
  488. FONTYDRAW17b    MOVE.W (A0)+,-12800(a1)
  489.         move.w (a0)+,-12792(a1)
  490.         ADD.L #160,A1
  491.         DBF D0,FONTYDRAW17b
  492.         MOVE.W #15,D0
  493.         MOVE.L FONTTYPE,A0
  494.         CLR.L D6
  495.         MOVE.B (A6)+,D6
  496.         SUB.B #32,D6
  497.         MULU #144,D6
  498.         ADD.L D6,A0
  499.         MOVE.L SCREEN,A1
  500.         add.l #10384,a1
  501. FONTYDRAW18    MOVE.W (A0)+,D5
  502.         ADD.W D5,(A1)
  503.         move.w (a0)+,8(a1)
  504.         ADD.L #160,A1
  505.         DBF D0,FONTYDRAW18
  506.         move.w #12,d0
  507. FONTYDRAW18c    MOVE.W (A0)+,D5
  508.         ADD.W D5,-12800(A1)
  509.         move.w (a0)+,-12792(a1)
  510.         ADD.L #160,A1
  511.         DBF D0,FONTYDRAW18c
  512.         move.w #7,d0
  513. FONTYDRAW18b    MOVE.W (A0)+,-12800(a1)
  514.         move.w (a0)+,-12792(a1)
  515.         ADD.L #160,A1
  516.         DBF D0,FONTYDRAW18b
  517.  
  518.         MOVE.W #7,D0        THE LAST CHARACTER IS ADDED 
  519.         MOVE.L FONTTYPE,A0    ONLY TO THE FIRST WORD
  520.         CLR.L D6        THE SECOND IS DISCARDED.
  521.         MOVE.B (A6)+,D6
  522.         SUB.B #32,D6
  523.         MULU #144,D6
  524.         ADD.L D6,A0
  525.         MOVE.L SCREEN,A1
  526.         add.l #11672,a1
  527. FONTYDRAW19    MOVE.W (A0)+,D5
  528.         ADD.W D5,(A1)
  529.         add.l #2,a0
  530.         ADD.L #160,A1
  531.         DBF D0,FONTYDRAW19
  532.         move.w #20,d0
  533. FONTYDRAW19c    MOVE.W (A0)+,D5
  534.         ADD.W D5,-12800(A1)
  535.         add.l #2,a0
  536.         ADD.L #160,A1
  537.         DBF D0,FONTYDRAW19c
  538.         move.w #7,d0
  539. FONTYDRAW19b    MOVE.W (A0)+,-12800(a1)
  540.         add.l #2,a0
  541.         ADD.L #160,A1
  542.         DBF D0,FONTYDRAW19b
  543.         BSR CONSTRUCT
  544.         BRA    VBLOOP
  545. *******************************************
  546. *NOW THIS IS WHERE THE SCROLL IS ACTUALLY *
  547. *CONSTRUCTED. THIS IS DONE BY COPYING THE *
  548. *THE BUFFER TO THE SCREEN ONCE THE RIGHT  *
  549. *WAY UP IN PLANE 1 THEN UPSIDE DOWN AND   *
  550. *IN PLANE 2 TO THE SCREEN. A TABLE TELLS  *
  551. *THE ROUTINE HOW MANY TIMES TO DISPLAY    *
  552. *EACH LINE OF THE BUFFER. BY MISSING OR   *
  553. *OR DISPLAYING SOME LINES TWICE IT IS EASY*
  554. *TO GIVE THE APPEARANCE OF WRAPPING THE   *
  555. *SCROLL AROUND A BAR.                     *
  556. *******************************************
  557.  
  558. CONSTRUCT    MOVE.L SCREEN,A1
  559.         MOVE.L A1,A0
  560.         ADD.L #16000,A1        START SCROLL 100 LINES DOWN SCREEN
  561.         MOVE.L A1,A3
  562.         ADD.L #10722,A3        START THE UPSIDE DOWN BIT FURTHER DOWN AND IN PLANE2
  563.         MOVE.L #ADDTAB,A2    THE ADDTABLE (FOR CONTROLLING THE DRAWING OF SCROLL)
  564.         MOVE.W #67,D0        DO 68 LINES
  565. CONLOOP        MOVE.W (A0),(A1)    COPY BUFFER TO SCREEN
  566.         MOVE.W 8(A0),8(A1)
  567.         MOVE.W 16(A0),16(A1)
  568.         MOVE.W 24(A0),24(A1)
  569.         MOVE.W 32(A0),32(A1)
  570.         MOVE.W 40(A0),40(A1)
  571.         MOVE.W 48(A0),48(A1)
  572.         MOVE.W 56(A0),56(A1)
  573.         MOVE.W 64(A0),64(A1)
  574.         MOVE.W 72(A0),72(A1)
  575.         MOVE.W 80(A0),80(A1)
  576.         MOVE.W 88(A0),88(A1)
  577.         MOVE.W 96(A0),96(A1)
  578.         MOVE.W 104(A0),104(A1)
  579.         MOVE.W 112(A0),112(A1)
  580.         MOVE.W 120(A0),120(A1)
  581.         MOVE.W 128(A0),128(A1)
  582.         MOVE.W 136(A0),136(A1)
  583.         MOVE.W 144(A0),144(A1)
  584.         MOVE.W 152(A0),152(A1)
  585.         MOVE.W (A0),(A3)    MOVE BUFFER TO PLANE 2 
  586.         MOVE.W 8(A0),8(A3)
  587.         MOVE.W 16(A0),16(A3)
  588.         MOVE.W 24(A0),24(A3)
  589.         MOVE.W 32(A0),32(A3)
  590.         MOVE.W 40(A0),40(A3)
  591.         MOVE.W 48(A0),48(A3)
  592.         MOVE.W 56(A0),56(A3)
  593.         MOVE.W 64(A0),64(A3)
  594.         MOVE.W 72(A0),72(A3)
  595.         MOVE.W 80(A0),80(A3)
  596.         MOVE.W 88(A0),88(A3)
  597.         MOVE.W 96(A0),96(A3)
  598.         MOVE.W 104(A0),104(A3)
  599.         MOVE.W 112(A0),112(A3)
  600.         MOVE.W 120(A0),120(A3)
  601.         MOVE.W 128(A0),128(A3)
  602.         MOVE.W 136(A0),136(A3)
  603.         MOVE.W 144(A0),144(A3)
  604.         MOVE.W 152(A0),152(A3)
  605.  
  606.         ADD.L #160,A1        ADD ONE LINE TO FIRST POINTER
  607.         SUB.L #160,A3        SUB ONE LINE FROM SECOND POINTER
  608.         MOVE.W (A2)+,D1        TAKE VALUE FROM ADD TABLE FOR HOW
  609.         ADD.W D1,A0        MANY LINES TO ADVANCE THROUGH BUFFER
  610.         DBF D0,CONLOOP
  611.         RTS
  612. ****************************************
  613. *THE EXIT ROUTINE. IF YOU'VE FINISHED  *
  614. *GAWPING AT OUR AMAZING SCROLL THEN YOU*
  615. *ARE FREE TO LEAVE!!!!!!!!!!!!!!!!!!!! *
  616. ****************************************
  617.  
  618. TWISTEND
  619.         MOVE.L #$7770000,$FF8240    RESET SOME COLORS
  620.         MOVE.L #$0,$FF8244
  621.         MOVE.L oldssp,-(SP)        BACK TO USER MODE
  622.         MOVE.W  #$20,-(SP)
  623.         TRAP  #1
  624.         ADD.L #6,SP    
  625.         MOVE.W #-1,-(SP)        RESET SCREEN POINTER
  626.         MOVE.L SAVESCREEN,-(SP)
  627.         MOVE.L SAVESCREEN,-(SP)
  628.         MOVE.W #5,-(SP)
  629.         TRAP #14
  630.         ADD.L #12,SP
  631.         CLR.W -(SP)            GOOD BYE CRUEL WORLD!!!
  632.         TRAP #1                AAAARRGHHHHHHH!!!!!!!
  633.  
  634. ************************************
  635. *THE TABLE FOR WRAPPING THE SCROLL *
  636. *AROUND THE IMAGINARY BAR. NUMBERS *
  637. *CORRESPOND TO NUMBERS OF BYTES IN *
  638. *THE BUFFER, 160= 1 LINE,320= 2LINE*
  639. ************************************
  640.  
  641. ADDTAB        DC.W 800,640,480,320,320,320,320,160,320,160,320,160,160,160,0,160,160,0
  642.         DC.W    160,160,0,160,160,0,160,0,160,0,160,0,160,0,160,0
  643.         DC.W 0,160,0,160,0,160,0,160,0,160,0,160,160,0,160,160
  644.         DC.W    0,160,160,0,160,160,160,320,160,320,160,320,320,320,480,320,640,800
  645. oldssp        dc.l 0
  646. SAVESCREEN    DC.L 0    
  647. FONTTYPE    DC.L FONT1
  648. SCREEN1        DC.L 0            THE TWO SCREENS
  649. SCREEN        DC.L 0
  650. SWITCH        DC.W 0
  651. SCROLLPOINT    DC.L SCROLLINE        POINTER TO SCROLLINE
  652. TEXT        DC.B $1B,$45,0,0    TEXT FOR CLEARING SCREEN
  653.  
  654. ************************************
  655. *THESE ROUTINES ARE FOR MAKING THE *
  656. *SPECIAL FONTS WHICH THIS SCROLL   *
  657. *USES TO MAKE THE DIAGONAL SCROLL  *
  658. *EACH COPY OF THE ORIGINAL FONT IS *
  659. *SHIFTED LEFT BY 2 PIXELS AND     *
  660. *MOVED UP BY ONE FROM THE PREVIOUS*
  661. *THUS WHEN ALL 8 COPIES ARE ANIMATED*
  662. *THEY APPEAR TO MOVE DIAGONALLY    *
  663. ************************************
  664.  
  665. MAKEFONTS
  666.         LEA MAINFONT,A0        TAKE ORIGINAL FONT
  667.         LEA FONT1,A1        FIRST COPY
  668.         MOVE.W #32,D0        START 8 LINES IN TO CHAR        
  669.         move.w #0,d4        SHIFT LEFT BY 1 PIXEL
  670.         BSR MOVEFONT
  671.         LEA MAINFONT,A0        TAKE ORIGINAL FONT
  672.         LEA FONT2,A1        SECOND COPY
  673.         MOVE.W #28,D0        START 7 LINES IN TO CHAR
  674.         move.w #2,d4        SHIFT LEFT BY 3 PIXELS
  675.         BSR MOVEFONT    
  676.         LEA MAINFONT,A0        TAKE ORIGINAL FONT
  677.         LEA FONT3,A1        THIRD COPY
  678.         MOVE.W #24,D0        START 6 LINE S IN TO CHAR
  679.         move.w #4,d4        SHIFT LEFT BY 5 PIXELS
  680.         BSR MOVEFONT
  681.         LEA MAINFONT,A0        ETC
  682.         LEA FONT4,A1
  683.         MOVE.W #20,D0        ETC
  684.         move.w #6,d4
  685.         BSR MOVEFONT
  686.         LEA MAINFONT,A0
  687.         LEA FONT5,A1
  688.         MOVE.W #16,D0
  689.         move.w #8,d4
  690.         BSR MOVEFONT
  691.         LEA MAINFONT,A0
  692.         LEA FONT6,A1
  693.         MOVE.W #12,D0
  694.         move.w #10,d4
  695.         BSR MOVEFONT
  696.         LEA MAINFONT,A0
  697.         LEA FONT7,A1
  698.         MOVE.W #8,D0
  699.         move.w #12,d4
  700.         BSR MOVEFONT
  701.         LEA MAINFONT,A0        TAKE ORIGINAL FONT 
  702.         LEA FONT8,A1        EIGTH COPY
  703.         MOVE.W #4,D0        START ON 2ND LINE
  704.         move.w #14,d4        SHIFT LEFT BY 15 PIXELS
  705.         BSR MOVEFONT
  706.         RTS
  707. MOVEFONT    MOVE.W #59,D1        60 CHARACTERS
  708. COPYFONT    MOVE.L A1,A2        FIRST MOVE FONT TO COPY 
  709.         ADD.w D0,A2        ADD LINE OFFSET
  710.         MOVE.W #35,D3        36 LINES HIGH
  711.         MOVE.L A2,A3    
  712. COPYFONT2    CLR.W (A2)+        BLANK 1 WORD
  713.         MOVE.W (A0)+,(A2)+    MOVE FONT TO 2ND WORD
  714.         DBF D3,COPYFONT2    LOOP
  715.         MOVE.W D4,D5        MOVE AMOUNT TO SHIFT TO D5
  716. COPYFONT3            
  717.         MOVE.L A3,A4
  718.         MOVE.W #35,D3        NOW SHIFT FONT OVER (36 LINES)
  719. COPYFONT4    LSL.W 2(A4)        SHIFT 1ST WORD     
  720.         ROXL.W (A4)        2ND WORD TAKING SHIFTED BIT FROM FIRST
  721.         ADD.L #4,A4
  722.         DBF D3,COPYFONT4
  723.         DBF D5,COPYFONT3
  724.         ADD.L #144,A1
  725.         DBF D1,COPYFONT
  726.         RTS
  727.  
  728. *******************************************
  729. *WELL THIS IS WHER YOU CAN TYPE ALL THAT  *
  730. *SPONTANEOUS BULLSHIT THAT COMES TO THE   *
  731. *MINDS OF SCROLLINE WRITERS...            *
  732. *SCROLL IS TERMINATED BY $FF BUT THER MUST*
  733. *BE 20 ODD BLANK CHARACTERS AFTER THIS    *
  734. *SO THAT SPURIOUS DATA IS NOT DISPLAYED   *
  735. *******************************************
  736.  
  737. SCROLLINE    dc.b "                      "
  738.     DC.B "  HI THERE, MANIKIN OF THE LOST BOYS HERE ON THE TWIST SCROLL. THE LOST BOYS ARE AN ESTABLISHED DEMO CREW FROM"
  739.     DC.B "  ENGLAND AND THIS SCROLL IS FROM OUR NEWEST DEMO ON THE ST, THE DEFINITIVE DEMO. COPIES AVAILABLE FROM THE BEST"
  740.     DC.B " PD LIBRARIES OR FROM THE ADDRESS IN THIS SOURCE CODE. FOR THE PRICE OF 5 POUNDS, COMPLETE SOURCE CODE FOR THE DEF"
  741.     DC.B " DEMO ALSO AVAILABLE FOR 25 POUNDS AGAIN FROM THIS ADDRESS. "
  742.     DC.B "                      ",$ff
  743.         EVEN
  744.  
  745. ********************************************
  746. *THE FONT IS MADE UP OFF 1 PLANE CHARACTERS*
  747. *WHICH ARE 36 LINES HIGH AND 1 WORD WIDE   *
  748. *THE BOTTOM 8 LINES MUST BE BLANK TO ALLOW *
  749. *FOR THE SPECIAL FORMAT OF CHARACTERS!!    *
  750. *TO MAKE A FONT DRAW ASERIES OF CHARACTERS *
  751. *15 PIXELS WIDE (1 BLANK FOR SPACE BETWEEN *
  752. *LETTERS) AND 28 LINES HIGH. YOU COULD DRAW*
  753. *THEM WITH A SLANT LIKE I DID TO IMPROVE   *
  754. *THE DIAGONAL EFFECT.                      *
  755. ********************************************
  756.  
  757. MAINFONT    INCBIN "TWIST.DAT"
  758.  
  759. ********************************************
  760. *THE INCBIN INSTRUCTION IS USED BY GENST   *
  761. *TO INCLUDE A BINARY FILE INTO AN ASSEMBLED*
  762. *FILE. IF THE ASSEMBLER YOU USE DOES NOT   *
  763. *HAVE THIS INSTRUCTION THEN EITHER CONVERT *
  764. *THE TWIST.DAT FILE INTO DC.W STATEMENTS OR*
  765. *ADD AN ADDITIONAL PIECE OF CODE TO LOAD   *
  766. *THE FILE TO THIS PIECE OF THE PROGRAM.    *
  767. ********************************************
  768.  
  769. FONT1
  770. FONT2    EQU FONT1+8640
  771. FONT3     EQU FONT2+8640
  772. FONT4    EQU FONT3+8640
  773. FONT5    EQU FONT4+8640
  774. FONT6    EQU FONT5+8640
  775. FONT7    EQU FONT6+8640
  776. FONT8    EQU FONT7+8640
  777. FONTEND    EQU FONT8+8640
  778.