
               00010 *EIGHT WAY SCROLLING DAN PINAL

               00015 *EQUATES
0230:          00020 SDLSTL    EQ $230
0278:          00030 STICKO    EQ $278
D402:          00040 DLISTL    EQ $D402
D404:          00050 HSCROL    EQ $D404
D405:          00060 VSCROL    EQ $D405
E45C:          00070 SETVBV    EQ $E45C
E462:          00080 XITVBV    EQ $E462
               00090 *
0000:          00100 SCREEN    EQ $0000
0400:          00110 WIDTH    EQ $0400
0040:          00120 HEIGHT    EQ $0040
0028:          00130 SCREENH    EQ 40
0014:          00140 SCREENV    EQ 20
9F60:          00150 WINDOW    EQ $9C40+800 FOR A 40K OR 48K COMPUTER WITH CARTRIDGE
               00160 *
               00170 START
4000: A9 00    00180    LDA #$00

4002: 8D 5D 42 00190    STA ENABLE ; SET VBI FLAG TO OFF

               00200 * INIT SCROLL VARIABLES TO STARTUP VALUES

4005: 8D 4E 42 00210    STA MAPH    SET SCREEN COORD. TO 0
4008: 8D 4F 42 00220    STA MAPH+1
400B: 8D 50 42 00230    STA MAPV
400E: 8D 51 42 00240    STA MAPV+1
4011: 8D 59 42 00250    STA FINEV
4014: 8D 05 D4 00260    STA VSCROL

4017: A9 0C    00270    LDA #$OC
4019: 8D 58 42 00280    STA FINEH
401C: 8D 04 D4 00290    STA HSCROL
               00300 INIT BASE ADDRESS TO SCREEN ADDRESS
401F: A9 00    00310    LDA #SCREEN
4021: 8D 56 42 00320    STA BASE
4024: A9 00    00330    LDA /SCREEN

4026: 8D 57 42 00340    STA BASE+1
4029: 20 BB 41 00350    JSR WRITEDL ; WRITE NEW DISPLAY LIST
               00360 TELL ANTIC WHERE NEW DLIST IS
402C: A9 02    00370    LDA #NDLIST
402E: 8D 30 02 00380    STA SDLSTL
4031: A9 42    00390    LDA /NDLIST
4033: 8D 31 02 00400    STA SDLSTL+1
               00410 SETUP VBLANK

4036: A9 07    00420    LDA #$07    DEFFERED VBI
4038: A0 45    00430    LDY #VBI
403A: A2 40    00440    LDX /VBI
403C: 20 5C E4 00450    JSR SETVBV
403F: A9 01    00460    LDA #$O1

4041: 8D 5D 42 00470    STA ENABLE    TURN VBLANK FLAG TO ON
4044: 60       00480    RTS    BACK TO YOUR MONITOR
               00490
               00500 VBI
4045: D8       00510    CLD    JUST A PRECAUTION

4046: AD 5D 42 00520    LDA ENABLE    CHECK THE SOFTWARE FLAG
4049: D0 03    00530    BNE CKSTK    OK
404B: 4C B8 41 00540    JMP XVBI    LEAVE VBI
               00550 CKSTK

               00560 ; COPY OLD MAP VARIABLES IN CASE NEW VALUES ARE INVALID

404E: AD 58 42 00570    LDA FINEH
4051: 8D 5A 42 00580    STA NEWFH
4054: AD 59 42 00590    LDA FINEV

4057: 8D 5B 42 00600    STA NEWFV

405A: A9 00    00610    LDA #$00

405C: 8D 5C 42 00620    STA CHANGE ; SET CHANGE FLAG TO 0
               00630 * USE JOYSTICK VALUE TO INDEX INTO TABLE OF +1,0, OR -1

405F: AE 78 02 00640        LDX STICKO
4062: BD E2 41 00650        LDA HOFFS,X
4065: 8D 52 42 00660        STA HOFF
4068: BD F2 41 00670        LDA VOFFS,X
406B: 8D 54 42 00680        STA VOFF
               00690 CHECKH
406E: AD 52 42 00700    LDA HOFF
4071: F0 6C    00710    BEQ CHECKV    IF 0 NO CHANCE LEAVE

               00720    ADD OFFSET TO FINEH

4073: 18       00730    CLC
4074: AD 5A 42 00740        LDA NEWFH
4077: 6D 52 42 00750        ADC HOFF
407A: 8D 5A 42 00760        STA NEWFH
407D: C9 10    00770    CMP 010    TIME TO CRUDE SCROLL?
407F: F0 0D    00780    BEQ RSHIFT
4081: C9 0B    00790    CMP #$OR    TIME TO CRUDE SCROLL?
4083: F0 30    00800    BEQ LSHIFT
4085: 8D 58 42 00810        STA FINEH
4088: 8D 04 D4 00820    STA HSCROL
408B: 4C DF 40 00830    JMP CHECKV    GO CHECK VERTICAL
               00840 RSHIFT
408E: AD 4E 42 00850        LDA MAPH    CHECK IF HORIZONTAL ALREADY AT 0?
4091: 0D 4F 42 00860        ORA MAPH+1
4094: F0 49    00870    BEQ CHECKV        CAN'T GO LESS THAN 0
4096: 38       00880    SEC
4097: AD 4E 42 00890        LDA MAPH
409A: E9 01    00900    SBC #$O1
409C: 8D 4E 42 00910        STA MAPH
409F: AD 4F 42 00920        LDA MAPH+1
40A2: E9 00    00930    SBC #$00
40A4: 8D 4F 42 00940        STA MAPH+1
40A7: A9 0C    00950    LDA #$OC
40A9: 8D 58 42 00960        STA FINEH
40AC: 8D 04 D4 00970        STA HSCROL
40AF: EE 5C 42 00980        INC CHANGE    SET FLAG TO WRITE NEW DISPLAY LIST
40B2: 4C DF 40 00990        JMP CHECKV
               01000 LSHIFT

               01010 ; FIRST CHECK IF ALREADY AT LIMIT

40B5: AD 4E 42 01020    LDA MAPH

40B8: C9 D8    01030    CMP #WIDTH-SCREENH
40BA: D0 07    01040    BNE .1
40BC: AD 4F 42 01050    LDA MAPH+1

40BF: C9 03    01060    CMP /WIDTH-SCREENH

40C1: F0 1C    01070    BEQ CHECKV
               01080 .1

               01090 * CHANGE MAPH & SET FINE SCROLL

40C3: 18       01100    CLC

40C4: AD 4E 42 01110    LDA MAPH
40C7: 69 01    01120    ADC #$O1

40C9: 8D 4E 42 01130        STA MAPH
40CC: AD 4F 42 01140    LDA MAPH+1
40CF: 69 00    01150    ADC #$00
40D1: 8D 4F 42 01160        STA MAPH+1
40D4: A9 0F    01170    LDA #$OF
40D6: 8D 58 42 01180        STA FINEH
40D9: 8D 04 D4 01190        STA HSCROL
40DC: EE 5C 42 01200    INC CHANGE    SET FLAG FOR CKLIST
               01210 CHECKV

               01220 * VERTICAL WORKS SAME AS HORIZONTAL

40DF: AD 54 42 01230    LDA VOFF
40E2: F0 6F    01240    BEQ CKLIST ; LEAVE IF No CHANGES TO MAKE
               01250 * ADD OFFSET TO FINE SCROLL VALUE
40E4: 18       01260    CLC
40E5: 6D 5B 42 01270    ADC NEWFV
40E8: 8D 5B 42 01280    STA NEWFV
               01290 * CHECK TO SEE IF IT'S TIME TO CRUDE SCROLL

40EB: C9 08    01300    CMP #$08
40ED: F0 0D    01310    BEQ DSHIFT
40EF: C9 FF    01320    CMP #$FF
40F1: F0 39    01330    BEQ USHIFT

40F3: 8D 59 42 01340        STA FINEV
40F6: 8D 05 D4 01350        STA VSCROL
40F9: 4C 53 41 01360        JMP CKLIST
               01370 DSHIFT

               01380 * CHECK TO SEE IF MAP IS AT LIMIT

40FC: AD 50 42 01390    LDA MAPV
40FF: C9 2C    01400    CMP #HEIGHT-SCREENV
4101: D0 07    01410    BNE .1
4103: AD 51 42 01420    LDA MAPV+1

4106: C9 00    01430    CMP /HEIGHT-SCREENV
4108: F0 49    01440    BEQ CKLIST
               01450 .1

               01460 * SET MAP VERT. OFFSET & RESET FINE SCROLL VALUE

410A: 18       01470    CLC

410B: AD 50 42 01480        LDA MAPV
410E: 69 01    01490    ADC #$O1
4110: 8D 50 42 01500        STA MAPV
4113: AD 51 42 01510        LDA MAPV+1
4116: 69 00    01520    ADC #$00
4118: 8D 51 42 01530        STA MAPV+1
411B: AD 5B 42 01540        LDA NEWFV
411E: 29 07    01550    AND #$07
4120: 8D 59 42 01560        STA FINEV
4123: 8D 05 D4 01570    STA VSCROL
4126: EE 5C 42 01580        INC CHANGE
4129: 4C 53 41 01590        JMP CKLIST
               01600 USHIFT

               01610    CHECK FOR MAP AT LIMIT

412C: AD 50 42 01620        LDA RAPV
412F: 0D 51 42 01630        ORA MAPV+1
4132: F0 1F    01640    BEQ CKLIST
4134: 38       01650    SEC
4135: AD 50 42 01660        LDA MAPV
4138: E9 01    01670    SBC #$O1
413A: 8D 50 42 01680        STA MAPV
413D: AD 51 42 01690        LDA MAPV+1
4140: E9 00    01700    SBC #$00
4142: 8D 51 42 01710        STA MAPV+1
4145: AD 5B 42 01720        LDA NEWFV
4148: 29 07    01730    AND #$07
414A: 8D 59 42 01740        STA FINEV
414D: 8D 05 D4 01750        STA VSCROL
4150: EE 5C 42 01760        INC CHANGE
               01770 CKLIST
4153: AD 5C 42 01780        LDA CHANGE; CHECK IF MAP HORIZONTAL OR VERTICAL HAS BEEN CHANGE
4156: F0 60    01790    BEQ XVBI ; NO NEED TO REWRITE DISPLAY LIST IF NO CHANGE

               01800    SET UP TO MULTIPLY WIDTH X MAP VERTICAL OFFSET

4158: A9 00    01810    LDA #WIDTH
415A: 8D 4A 42 01820    STA RESULT
415D: A9 04    01830    LDA /WIDTH
415F: 8D 4B 42 01840    STA RESULT+1

4162: A9 00    01850    LDA #$00    OVERFLOW SHOULD NOT BE NEEDED BUT ITS HERE ANYWAY
4164: 8D 4C 42 01860    STA OVERFL
4167: 8D 4D 42 01870    STA OVERFL+1
416A: A2 11    01880    LDX #$11
416C: 18       01890     CLC

               01900 * THIS IS A 16 BIT MULTIPLY TO CALCULATE OFFSET FROM STARTING MA

               01910 MULT16
416D: 6E 4D 42 01920        ROR OVERFL+1
4170: 6E 4C 42 01930        ROR OVERFL
4173: 6E 4B 42 01940        ROR RESULT+1
4176: 6E 4A 42 01950        ROR RESULT
4179: 90 13    01960    BCC .1
417B: 18       01970    CLC
417C: AD 50 42 01980        LDA MAPV
417F: 6D 4C 42 01990        ADC OVERFL
4182: 8D 4C 42 02000        STA OVERFL
4185: AD 51 42 02010        LDA MAPV+1
4188: 6D 4D 42 02020        ADC OVERFL+1
418B: 8D 4D 42 02030        STA OVERFL+1
               02040 .1

418E: CA       02050    DEX
418F: D0 DC    02060    BNE MULT16

               02070 * NOW SCREEN ADDRESS IS ADDED

4191: 18       02080    CLC
4192: A9 00    02090    IDA #SCREEN

4194: 6D 4A 42 02100    ADC RESULT
4197: 8D 56 42 02110    STA BASE
419A: A9 00    02120    LDA /SCREEN
419C: 6D 4B 42 02130    ADC RESULT+1
419F: 8D 57 42 02140    STA BASE+1

               02150    NOW THE COLUMN OFFSET IS ADDED TO FORM THE NEW BASE ADDRESS

41A2: 18       02160    CLC     FOR THE TOP

41A3: AD 56 42 02170    LDA BASE
41A6: 6D 4E 42 02180    ADC MAPH
41A9: 8D 56 42 02190    STA BASE
41AC: AD 57 42 02200    LDA BASE+1
41AF: 6D 4F 42 02210    ADC MAPH+1
41B2: 8D 57 42 02220    STA BASE+1
               02230
41B5: 20 BB 41 02240    JSR WRITEDL WRITE NEW DISPLAY LIST
               02250 XVBI
41B8: 4C 62 E4 02260    JMP XITVBV
               02270 *
               02280 WRITEDL

               02290 * SPOT POINTS TO THE FIRST ADDRESS IN THE DISPLAY LIST.
41BB: A2 00    02300    LDX #$00
               02310 .1
               02320 * STORE NEW ADDRESS IN DISPLAY LIST

41BD: AD 56 42 02330    LDA BASE
41C0: 9D 06 42 02340    STA SPOT,X
41C3: AD 57 42 02350    LDA BASE+1
41C6: 9D 07 42 02360    STA SPOT+1,X

               02370    ADD MAP WIDTH TO GET ADDRESS OF NEXT LINE

41C9: 18       02380    CLC
41CA: A9 00    02390    LDA #WIDTH
41CC: 6D 56 42 02400    ADC BASE
41CF: 8D 56 42 02410    STA BASE
41D2: A9 04    02420    LDA /WIDTH
41D4: 6D 57 42 02430    ADC BASE+1
41D7: 8D 57 42 02440    STA BASF,+1

               02450    SET TO    POINT TO NEXT SET OFF ADDRESSES IN DLIST
41DA: E8       02460         INX

41DB: E8       02470    INX

41DC: E8       02480    INX
41DD: E0 3C    02490    CPX #60
41DF: D0 DC    02500    BNE .1
41E1: 60       02510    RTS
               02520 *
               02530 HOFFS
41E2: 00 00 00
41E5: 00 00 01
41E8: 01 01    02540        HS 0000000000010101
41EA: 00 FF FF
41ED: FF 00 00
41F0: 00 00    02550        HS OOFFFFFFOOOOOOOO
               02560 VOFFS
41F2: 00 00 00
41F5: 00 00 01
41F8: FF 00    02570        HS 000000000OO1FFOO
41FA: 00 01 FF
41FD: 00 00 01
4200: FF 00    02580        HS OOO1FFOOOOO1FFO0
               02590 NDLIST

4202: 70 70 70 02600    HS 707070
4205: 72       02610    HS 72
               02620 SPOT
4206: 00 00    02630    HS 0000
4208: 72 00 00 02640    HS 720000
420B: 72 00 00 02650        HS 720000
420E: 72 00 00 02660    HS 720000
4211: 72 00 00 02670        HS 720000
4214: 72 00 00 02680    HS 720000
4217: 72 00 00 02690    HS 720000
421A: 72 00 00 02700        HS 720000
421D: 72 00 00 02710    HS 720000
4220: 72 00 00 02720    HS 720000
4223: 72 00 00 02730    HS 720000
4226: 72 00 00 02740        HS 720000
4229: 72 00 00 02750        HS 720000
422C: 72 00 00 02760    HS 720000
422F: 72 00 00 02770        HS 720000
4232: 72 00 00 02780    HS 72MOO
4235: 72 00 00 02790    HS 720000
4238: 72 00 00 02800        HS 720000
423B: 72 00 00 02810        HS 720000
423E: 52 00 00 02820        HS 520000
4241: 42       02830    HS 42
4242: 60 9F    02840    DA WINDOW
4244: 02 02 02 02850        HS 020202

4247: 41       02860    HS 41
4248: 02 42    02870    DA NDLIST
               02880
424A: 00 00    02890 RESULT    BS 2
424C: 00 00    02900 OVERFL    BS 2
424E: 00 00    02910 MAPH    BS 2
4250: 00 00    02920 MAPV    BS 2
4252: 00 00    02930 HOFF    BS 2
4254: 00 00    02940 VOFF    BS 2
4256: 00 00    02950 BASE    BS 2
4258: 00       02960 FINEH    BS 1
4259: 00       02970 FINEV    BS I
425A: 00       02980 NEWFR    BS I
425B: 00       02990 NEWFV    BS I
425C: 00       03000 CHANGE    BS 1
425D: 00       03010 ENABLE    BS 1
