Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Landing site BG tileset lookup
- org $88AD9C
- DW B180, B980, C180, C980, D180,
- ; west ocean BG tileset lookup
- org $88ADA6
- DW B180, B980, C180, C980, D980, E180
- ; Main ASM Update Screen BG2 (dynamically loads the background)
- $88:AFB0 C2 30 REP #$30 ; 16bit
- $88:AFB2 AD 15 09 LDA $0915 [$7E:0915] ; Screen Y position
- $88:AFB5 85 B7 STA $B7 [$7E:00B7] ; $2110 BG 2 Vertical Scroll Offset
- $88:AFB7 AE 30 03 LDX $0330 [$7E:0330] ; D table index
- $88:AFBA A9 40 00 LDA #$0040
- $88:AFBD 95 D0 STA $D0,x [$7E:00D7] ; DMA0 size
- $88:AFBF 95 D7 STA $D7,x [$7E:00DE] ; DMA1 size
- $88:AFC1 95 DE STA $DE,x [$7E:00E5] ; DMA2 size
- $88:AFC3 95 E5 STA $E5,x [$7E:00EC] ; DMA3 size
- ; Get Source for DMA0-1
- $88:AFC5 AD 15 09 LDA $0915 [$7E:0915] ;Screen Y
- $88:AFC8 29 F8 07 AND #$07F8 ; #$ 00000111 11111000
- $88:AFCB 38 SEC
- $88:AFCC E9 10 00 SBC #$0010 ; -10
- $88:AFCF 48 PHA ; PHA
- $88:AFD0 29 00 FF AND #$FF00
- $88:AFD3 EB XBA
- $88:AFD4 0A ASL A ; LSR 7
- $88:AFD5 A8 TAY ; Y = 0 - E (even)
- $88:AFD6 68 PLA ; PLA
- $88:AFD7 29 FF 00 AND #$00FF ; #$ 00000000 11111000
- $88:AFDA 0A ASL A
- $88:AFDB 0A ASL A
- $88:AFDC 0A ASL A ; ASL 3
- $88:AFDD 18 CLC
- $88:AFDE 77 00 ADC [$00],y[$88:AF9A] ; ADD to ROM GFX table lookup
- $88:AFE0 95 D2 STA $D2,x [$7E:00D9] ; DMA0 Source
- $88:AFE2 18 CLC
- $88:AFE3 69 40 00 ADC #$0040 ; Add 40 byte offset
- $88:AFE6 95 D9 STA $D9,x [$7E:00E0] ; DMA1 Source
- ; Get Source for DMA2-3
- $88:AFE8 AD 15 09 LDA $0915 [$7E:0915] ; Screen Y position
- $88:AFEB 29 F8 07 AND #$07F8 ; #$ 00000111 11111000
- $88:AFEE 18 CLC
- $88:AFEF 69 F0 00 ADC #$00F0 ; +F0
- $88:AFF2 48 PHA ; PHA
- $88:AFF3 29 00 FF AND #$FF00
- $88:AFF6 EB XBA
- $88:AFF7 0A ASL A ; LSR 7
- $88:AFF8 A8 TAY ; Y = 0 - E (even)
- $88:AFF9 68 PLA ; PLA
- $88:AFFA 29 FF 00 AND #$00FF ; #$ 00000000 11111000
- $88:AFFD 0A ASL A
- $88:AFFE 0A ASL A
- $88:AFFF 0A ASL A ; ASL 3
- $88:B000 18 CLC
- $88:B001 77 00 ADC [$00],y[$88:AD9C] ; ADD to ROM GFX table lookup
- $88:B003 95 E0 STA $E0,x [$7E:00E7] ; DMA2 Source
- $88:B005 18 CLC
- $88:B006 69 40 00 ADC #$0040 ; Add 40 byte offset
- $88:B009 95 E7 STA $E7,x [$7E:00EE] ; DMA3 Source
- $88:B00B E2 20 SEP #$20 ; 8bit
- $88:B00D A9 8A LDA #$8A ; ROM GFX bank (8A)
- $88:B00F 95 D4 STA $D4,x [$7E:00DB] ; DMA0 Source Bank
- $88:B011 95 DB STA $DB,x [$7E:00E2] ; DMA1 Source Bank
- $88:B013 95 E2 STA $E2,x [$7E:00E9] ; DMA2 Source Bank
- $88:B015 95 E9 STA $E9,x [$7E:00F0] ; DMA3 Source Bank
- $88:B017 C2 20 REP #$20 ; 16 bit
- $88:B019 A5 59 LDA $59 [$7E:0059] ; $2108 BG 2 Address and Size (aaaaaabb)
- $88:B01B 29 FC 00 AND #$00FC ; #$ 00000000 11111100
- $88:B01E EB XBA ; ASL 8
- $88:B01F 85 12 STA $12 [$7E:0012] ; STA 12
- $88:B021 AD 15 09 LDA $0915 [$7E:0915] ; Screen Y position
- $88:B024 38 SEC
- $88:B025 E9 10 00 SBC #$0010 ; -10
- $88:B028 29 F8 01 AND #$01F8 ; #$ 00000001 11111000
- $88:B02B 0A ASL A
- $88:B02C 0A ASL A ; ASL 2
- $88:B02D 18 CLC
- $88:B02E 65 12 ADC $12 [$7E:0012] ; Add to BG2 Base Address
- $88:B030 95 D5 STA $D5,x [$7E:00DC] ; DMA0 Destination
- $88:B032 18 CLC
- $88:B033 69 20 00 ADC #$0020 ; Add 20
- $88:B036 95 DC STA $DC,x [$7E:00E3] ; DMA1 Destination
- $88:B038 AD 15 09 LDA $0915 [$7E:0915] ; Screen Y position
- $88:B03B 18 CLC
- $88:B03C 69 F0 00 ADC #$00F0 ; +F0
- $88:B03F 29 F8 01 AND #$01F8 ; #$ 00000001 11111000
- $88:B042 0A ASL A
- $88:B043 0A ASL A ; ASL 2
- $88:B044 18 CLC
- $88:B045 65 12 ADC $12 [$7E:0012] ; Add to BG2 Base Address
- $88:B047 95 E3 STA $E3,x [$7E:00EA] ; DMA2 Destination
- $88:B049 18 CLC
- $88:B04A 69 20 00 ADC #$0020 ; Add 20
- $88:B04D 95 EA STA $EA,x [$7E:00F1] ; DMA3 Destination
- $88:B04F 8A TXA
- $88:B050 18 CLC
- $88:B051 69 1C 00 ADC #$001C
- $88:B054 8D 30 03 STA $0330 [$7E:0330] ; Update D Table head
- $88:B057 6B RTL
- }
- ;pre-Instruction HDMA code (Handles the scrolling effect)
- $88:ADC2 E2 30 SEP #$30 ; 8 bit
- $88:ADC4 A9 4A LDA #$4A
- $88:ADC6 85 59 STA $59 [$7E:0059] ; $2108 Screen address
- $88:ADC8 C2 30 REP #$30 ; 16 bit
- $88:ADCA A0 00 00 LDY #$0000
- ; Setup HDMA scroll updates
- $88:ADCD B9 C7 AE LDA $AEC7,y[$88:AEC7] ; Load HDMA Address
- $88:ADD0 AA TAX
- $88:ADD1 B9 C3 AE LDA $AEC3,y[$88:AEC3] ; Load Row Scroll Speed
- $88:ADD4 18 CLC
- $88:ADD5 7F 00 00 7E ADC $7E0000,x[$7E:9F80]; Add the scroll speed to scroll
- $88:ADD9 9F 00 00 7E STA $7E0000,x[$7E:9F80]; Save new scroll
- $88:ADDD B9 C5 AE LDA $AEC5,y[$88:AEC5] ; Always 0?
- $88:ADE0 7F 02 00 7E ADC $7E0002,x[$7E:9F82]; add 0?
- $88:ADE4 9F 02 00 7E STA $7E0002,x[$7E:9F82]; Do nothing?
- $88:ADE8 98 TYA
- $88:ADE9 18 CLC
- $88:ADEA 69 08 00 ADC #$0008 ; Increment Y to next line
- $88:ADED A8 TAY
- $88:ADEE C9 B8 00 CMP #$00B8
- $88:ADF1 30 DA BMI $DA [$ADCD] ; For each line
- ; I can only assume this sets up the HDMA in some way
- $88:ADF3 A9 00 00 LDA #$0000
- $88:ADF6 8F D8 9F 7E STA $7E9FD8[$7E:9FD8]
- $88:ADFA 8F DA 9F 7E STA $7E9FDA[$7E:9FDA]
- $88:ADFE A9 1F 00 LDA #$001F
- $88:AE01 8F 00 9F 7E STA $7E9F00[$7E:9F00]
- $88:AE05 A9 9E 05 LDA #$059E
- $88:AE08 8F 01 9F 7E STA $7E9F01[$7E:9F01]
- $88:AE0C AD 15 09 LDA $0915 [$7E:0915] ; Screen Y position
- $88:AE0F 18 CLC
- $88:AE10 69 20 00 ADC #$0020
- $88:AE13 85 12 STA $12 [$7E:0012] ; Screen Y + 20 (top viewable)
- $88:AE15 18 CLC
- $88:AE16 69 C0 00 ADC #$00C0
- $88:AE19 85 14 STA $14 [$7E:0014] ; Screen Y + E0 (bottom viewable)
- $88:AE1B A0 00 00 LDY #$0000
- $88:AE1E A2 03 00 LDX #$0003
- $88:AE21 A5 12 LDA $12 [$7E:0012]
- $88:AE23 D9 C1 AE CMP $AEC1,y[$88:AEC1]
- $88:AE26 30 05 BMI $05 [$AE2D] ; If screen y+20 > curr height
- $88:AE28 D9 C9 AE CMP $AEC9,y[$88:AEC9]
- $88:AE2B 30 44 BMI $44 [$AE71] ; and < next height go to cont
- $88:AE2D 98 TYA
- $88:AE2E 18 CLC
- $88:AE2F 69 08 00 ADC #$0008 ; Increment Y
- $88:AE32 A8 TAY
- $88:AE33 C9 B8 00 CMP #$00B8
- $88:AE36 30 E9 BMI $E9 [$AE21] ; While not end of lines...
- ; screen is below the scroll lines (partial or completely)
- $88:AE38 A9 FF 05 LDA #$05FF
- $88:AE3B 38 SEC
- $88:AE3C E5 12 SBC $12 [$7E:0012]
- $88:AE3E 85 18 STA $18 [$7E:0018] ; height of visisble lines
- $88:AE40 C9 80 00 CMP #$0080
- $88:AE43 30 19 BMI $19 [$AE5E] ; No more scrolling line visisble
- $88:AE45 A9 7F 00 LDA #$007F
- $88:AE48 9F 00 9F 7E STA $7E9F00,x[$7E:9F15]
- $88:AE4C A9 B5 00 LDA #$00B5
- $88:AE4F 9F 01 9F 7E STA $7E9F01,x[$7E:9F16]; HDMA stuff?
- $88:AE53 E8 INX
- $88:AE54 E8 INX
- $88:AE55 E8 INX
- $88:AE56 A5 18 LDA $18 [$7E:0018]
- $88:AE58 38 SEC
- $88:AE59 E9 7F 00 SBC #$007F
- $88:AE5C 80 E0 BRA $E0 [$AE3E] ; Scan again for next line
- ; finished scanning for scrolling lines on a partial screen
- $88:AE5E 9F 00 9F 7E STA $7E9F00,x[$7E:9F1B];HDMA stuff?
- $88:AE62 A9 B5 00 LDA #$00B5
- $88:AE65 9F 01 9F 7E STA $7E9F01,x[$7E:9F1C]
- $88:AE69 A9 00 00 LDA #$0000
- $88:AE6C 9F 03 9F 7E STA $7E9F03,x[$7E:9F1E]
- $88:AE70 6B RTL ;Finished
- ; screen is is completely filled with scrolling lines
- $88:AE71 B9 C9 AE LDA $AEC9,y[$88:AED1] ; bottom of this scrolling line
- $88:AE74 38 SEC
- $88:AE75 E5 12 SBC $12 [$7E:0012]
- $88:AE77 85 18 STA $18 [$7E:0018] ; height of visible lines
- $88:AE79 C9 80 00 CMP #$0080
- $88:AE7C 30 19 BMI $19 [$AE97] ; No more scrolling line visible
- $88:AE7E A9 7F 00 LDA #$007F
- $88:AE81 9F 00 9F 7E STA $7E9F00,x[$7E:9F06]
- $88:AE85 B9 C7 AE LDA $AEC7,y[$88:AED7]
- $88:AE88 1A INC A
- $88:AE89 1A INC A
- $88:AE8A 9F 01 9F 7E STA $7E9F01,x[$7E:9F07]; HDMA stuff
- $88:AE8E E8 INX
- $88:AE8F E8 INX
- $88:AE90 E8 INX
- $88:AE91 A5 18 LDA $18 [$7E:0018]
- $88:AE93 38 SEC
- $88:AE94 E9 7F 00 SBC #$007F ; Scane again for next line
- ; finished scanning for scrolling lines on a complete screen
- $88:AE97 9F 00 9F 7E STA $7E9F00,x[$7E:9F03]
- $88:AE9B B9 C7 AE LDA $AEC7,y[$88:AECF]
- $88:AE9E 18 CLC
- $88:AE9F 69 02 00 ADC #$0002
- $88:AEA2 9F 01 9F 7E STA $7E9F01,x[$7E:9F04];HDMA stuff
- $88:AEA6 A5 18 LDA $18 [$7E:0018]
- $88:AEA8 18 CLC
- $88:AEA9 65 12 ADC $12 [$7E:0012]
- $88:AEAB 85 12 STA $12 [$7E:0012] ; Update the bottom of the scanned screen
- $88:AEAD E8 INX
- $88:AEAE E8 INX
- $88:AEAF E8 INX
- $88:AEB0 A5 12 LDA $12 [$7E:0012]
- $88:AEB2 C5 14 CMP $14 [$7E:0014]
- $88:AEB4 10 03 BPL $03 [$AEB9] ; If not done scanning
- $88:AEB6 4C 21 AE JMP $AE21 [$88:AE21] ; go to partial cover scan
- $88:AEB9 A9 00 00 LDA #$0000
- $88:AEBC 9F 03 9F 7E STA $7E9F03,x[$7E:9F15]; HDMA stuff
- $88:AEC0 6B RTL ; Finish
- $88:AEC1
- ;AEC1 ;AEC3 ;AEC5 ;AEC7
- ;Height ;Speed ;??? ;HDMA ADR
- DW $0000, $8000, $0000, $9F80,
- DW $0010, $C000, $0000, $9F84,
- DW $0038, $8000, $0000, $9F88,
- DW $00D0, $C000, $0000, $9F8C,
- DW $00E0, $8000, $0000, $9F90,
- DW $0120, $C000, $0000, $9F94,
- DW $01A0, $8000, $0000, $9F98,
- DW $01D8, $C000, $0000, $9F9C,
- DW $0238, $8000, $0000, $9FA0,
- DW $0268, $C000, $0000, $9FA4,
- DW $02A0, $8000, $0000, $9FA8,
- DW $02E0, $C000, $0000, $9FA0,
- DW $0300, $8000, $0000, $9FB0,
- DW $0320, $C000, $0000, $9FB4,
- DW $0350, $8000, $0000, $9FB8,
- DW $0378, $C000, $0000, $9FBC,
- DW $03C8, $8000, $0000, $9FC0,
- DW $0440, $7000, $0000, $9FC4,
- DW $0460, $C000, $0000, $9FC8,
- DW $0480, $8000, $0000, $9FCC,
- DW $0490, $0000, $0000, $9FD0, ; stationary line?
- DW $04A8, $0000, $0000, $9FD4, ; stationary line?
- DW $04B8, $0000, $0000, $9FD8, ; stationary line?
- DW $0500 ;; extra line to use and hight of previous pand
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement