Raster Scroller By Neil Raine 1987 Disassembled by White Flame, September 2004 C000: StartScroll lda $D016 C003: and#$F8 C005: and#$F7 C007: ora#$10 C009: sta $C376 C00C: jsr SC0C7 (C0C7) C00F: rts C010: SC010 lda vIRQFlags (D019) C013: clc C014: ror a C015: bcc LC06D C017: lda#$FF C019: sta vIRQFlags (D019) C01C: lda topRaster (C374) C01F: sta vRaster (D012) C022: lda borderColrBottom (C382) C025: sta vBorderCol (D020) C028: lda vMemControl (D018) C02B: and#$0F C02D: ora#$10 C02F: sta vMemControl (D018) C032: lda vMemControl (D018) C035: and#$F0 C037: clc C038: adc charsetFixed (C381) C03B: sta vMemControl (D018) C03E: lda#$C8 C040: sta $D016 C043: LC043 jsr SC0E6 (C0E6) C046: inc $C388 C049: lda $C388 C04C: cmp scrollSpeed (C378) C04F: bne LC043 C051: lda#$00 C053: sta $C388 C056: sta vSprBackColl (D01F) C059: lda#$7F '¦' C05B: and $D011 C05E: sta $D011 C061: sei C062: lda#$70 'p' C064: sta lCINV (0314) C067: lda#$C0 C069: sta $0315 C06C: cli C06D: LC06D jmp SEA31 (EA31) C070: SC070 lda vIRQFlags (D019) C073: clc C074: ror a C075: bcc LC06D C077: lda#$FF C079: sta vIRQFlags (D019) C07C: lda bottomRaster (C375) C07F: sta vRaster (D012) C082: lda multicolor1 (C384) C085: sta vBackgCol1 (D022) C088: lda multicolor2 (C385) C08B: sta vBackgCol2 (D023) C08E: lda borderColorTop (C383) C091: sta vBorderCol (D020) C094: lda vMemControl (D018) C097: and#$0F C099: ora#$F0 C09B: sta vMemControl (D018) C09E: lda $C376 C0A1: sta $D016 C0A4: lda vMemControl (D018) C0A7: and#$F0 C0A9: clc C0AA: adc charsetScroll (C380) C0AD: sta vMemControl (D018) C0B0: lda#$7F '¦' C0B2: and $D011 C0B5: sta $D011 C0B8: sei C0B9: lda#$10 C0BB: sta lCINV (0314) C0BE: lda#$C0 C0C0: sta $0315 C0C3: cli C0C4: jmp SEA31 (EA31) C0C7: SC0C7 lda $DC0E C0CA: and#$FE C0CC: sta $DC0E C0CF: sei C0D0: lda#$10 C0D2: sta CINV (0314) C0D5: lda#$C0 C0D7: sta $0315 C0DA: cli C0DB: lda#$FF C0DD: sta vIRQFlags (D019) C0E0: lda#$01 C0E2: sta vIRQMasks (D01A) C0E5: rts C0E6: SC0E6 sty $C387 C0E9: lda scrollDir (C386) C0EC: cmp#$01 C0EE: beq LC0FB C0F0: lda scrollDir (C386) C0F3: cmp#$02 C0F5: beq LC0FF C0F7: ldy $C387 C0FA: rts C0FB: LC0FB jsr SC21D (C21D) C0FE: rts C0FF: LC0FF jsr SC118 (C118) C102: rts C103: SC103 lda $D011 C106: and#$EF C108: sta $D011 C10B: lda#$00 C10D: lda vSprEnable (D015) C110: sta $C37F C113: lda#$00 C115: sta vSprEnable (D015) C118: SC118 lda vSprEnable (D015) C11B: sta $C37C C11E: lda $C376 C121: cmp#$D0 C123: beq LC168 C125: lda $C376 C128: cmp#$D7 C12A: beq LC178 C12C: lda $C376 C12F: cmp#$D1 C131: beq LC168 C133: lda $C376 C136: cmp#$D2 C138: beq LC168 C13A: lda $C376 C13D: cmp#$D3 C13F: beq LC168 C141: lda $C376 C144: cmp#$D4 C146: beq LC168 C148: lda $C376 C14B: cmp#$D5 C14D: beq LC168 C14F: lda $C376 C152: cmp#$D6 C154: beq LC168 C156: inc vBorderCol (D020) C159: lda $D011 C15C: ora#$10 C15E: sta $D011 C161: lda $C37F C164: sta vSprEnable (D015) C167: rts C168: LC168 inc $C376 C16B: lda $C37C C16E: sta vSprEnable (D015) C171: rts C172: SC172 lda#$04 C174: sta scrollSpeed (C378) C177: rts C178: LC178 lda $C376 C17B: and#$F8 C17D: and#$F7 C17F: sta $C376 C182: ldy#$EF C184: LC184 lda $3BFF,y C187: sta $3C00,y C18A: lda $3DDF,y C18D: sta $3DE0,y C190: lda $3CEF,y C193: sta $3CF0,y C196: dey C197: cpy#$00 C199: bne LC184 C19B: dec $C379 C19E: dec $C37A C1A1: lda zR6510 (0001) C1A3: and#$FE C1A5: sta zR6510 (0001) C1A7: ldy $C379 C1AA: lda $A000,y C1AD: sta $3C00 C1B0: lda $A0FF,y C1B3: sta $3C28 C1B6: lda $A1FE,y C1B9: sta $3C50 C1BC: lda $A2FD,y C1BF: sta $3C78 C1C2: lda $A3FC,y C1C5: sta $3CA0 C1C8: lda $A4FB,y C1CB: sta $3CC8 C1CE: lda $A5FA,y C1D1: sta $3CF0 C1D4: lda $A6F9,y C1D7: sta $3D18 C1DA: lda $A7F8,y C1DD: sta $3D40 C1E0: lda $A8F7,y C1E3: sta $3D68 C1E6: lda $A9F6,y C1E9: sta $3D90 C1EC: lda $AAF5,y C1EF: sta $3DB8 C1F2: lda $ABF4,y C1F5: sta $3DE0 C1F8: lda $ACF3,y C1FB: sta $3E08 C1FE: lda $ADF2,y C201: sta $3E30 C204: lda $AEF1,y C207: sta $3E58 C20A: lda $AFF0,y C20D: sta $3E80 C210: lda $B0EF,y C213: sta $3EA8 C216: lda zR6510 (0001) C218: ora#$01 C21A: sta zR6510 (0001) C21C: rts C21D: SC21D lda $C376 C220: cmp#$D1 C222: beq LC256 C224: lda $C376 C227: cmp#$D0 C229: beq LC25A C22B: lda $C376 C22E: cmp#$D2 C230: beq LC256 C232: lda $C376 C235: cmp#$D3 C237: beq LC256 C239: lda $C376 C23C: cmp#$D4 C23E: beq LC256 C240: lda $C376 C243: cmp#$D5 C245: beq LC256 C247: lda $C376 C24A: cmp#$D6 C24C: beq LC256 C24E: lda $C376 C251: cmp#$D7 C253: beq LC256 C255: rts C256: LC256 dec $C376 C259: rts C25A: LC25A ldy#$00 C25C: LC25C lda $3C01,y C25F: sta $3C00,y C262: lda $3CF1,y C265: sta $3CF0,y C268: lda $3DE1,y C26B: sta $3DE0,y C26E: iny C26F: cpy#$F0 C271: bne LC25C C273: lda $C376 C276: and#$F8 C278: clc C279: adc#$07 C27B: sta $C376 C27E: inc $C37A C281: inc $C379 C284: lda zR6510 (0001) C286: and#$FE C288: sta zR6510 (0001) C28A: ldy $C37A C28D: lda $A000,y C290: sta $3C27 C293: lda $A0FF,y C296: sta $3C4F C299: lda $A1FE,y C29C: sta $3C77 C29F: lda $A2FD,y C2A2: sta $3C9F C2A5: lda $A3FC,y C2A8: sta $3CC7 C2AB: lda $A4FB,y C2AE: sta $3CEF C2B1: lda $A5FA,y C2B4: sta $3D17 C2B7: lda $A6F9,y C2BA: sta $3D3F C2BD: lda $A7F8,y C2C0: sta $3D67 C2C3: lda $A8F7,y C2C6: sta $3D8F C2C9: lda $A9F6,y C2CC: sta $3DB7 C2CF: lda $AAF5,y C2D2: sta $3DDF C2D5: lda $ABF4,y C2D8: sta $3E07 C2DB: lda $ACF3,y C2DE: sta $3E2F C2E1: lda $ADF2,y C2E4: sta $3E57 C2E7: lda $AEF1,y C2EA: sta $3E7F C2ED: lda $AFF0,y C2F0: sta $3EA7 C2F3: lda $B0EF,y C2F6: sta $3ECF C2F9: lda zR6510 (0001) C2FB: ora#$01 C2FD: sta zR6510 (0001) C2FF: rts C300: ClearScrollData lda scrollDir (C386) C303: sta $C389 C306: lda#$00 C308: sta scrollDir (C386) C30B: sta $C37D C30E: lda#$00 C310: sta $0002 C312: lda#$3C '<' C314: sta zADRAY1 (0003) C316: LC316 ldy#$00 C318: clc C319: LC319 lda $C37E C31C: sta($0002),y C31E: iny C31F: bne LC319 C321: inc zADRAY1 (0003) C323: inc $C37D C326: lda $C37D C329: cmp#$03 C32B: bne LC316 C32D: lda $C389 C330: sta scrollDir (C386) C333: rts C334: PauseScroll lda scrollDir (C386) C337: sta $C38A C33A: sei C33B: lda scrollSpeed (C378) C33E: sta $C38D C341: lda topRaster (C374) C344: sta $C38B C347: lda bottomRaster (C375) C34A: sta $C38C C34D: lda#$00 C34F: sta topRaster (C374) C352: sta scrollDir (C386) C355: lda#$1E C357: sta bottomRaster (C375) C35A: rts C35B: ResumeScroll lda $C38B C35E: sta topRaster (C374) C361: lda $C38C C364: sta bottomRaster (C375) C367: lda $C38D C36A: sta scrollSpeed (C378) C36D: lda $C38A C370: sta scrollDir (C386) C373: rts C374: topRaster 31 C1 00 00 01 00 27 00 00 00 20 00 04 06 00 0B C384: multicolor1 0B 0C 02 00 00 00 00 00 00 00 00