scene.org File Archive

File download

<root>­/­resources­/­code­/­sources/snesintro.txt

File size:
23 185 bytes (22.64K)
File date:
2023-08-02 05:45:02
Download count:
all-time: 289

Preview

 +-------------------------------------------------------------------------+
 |                        THIS FILE WAS LEECHED FROM                       |
 | +49-711-ELiTE!         -+* S A D O  C I T Y  *+-          49-711-ELiTE! |
 |   !CALL NOW!                !NeMeSiS! GHQ!                  !CALL NOW!  |
 |        -!*!- RUNNiNG ON 68030/882/5MB * 16.8 HST aT 57.6BPS-!*!-        |
 |                           NOW ALSO SUPPORTiNG:                          |
 |               \*\ MEGADRIVE /*/ FAMiCOM \*\ PC ENGiNE /*/               |
 +-------------------------------------------------------------------------+

-----------------------------------------------------------------------------
                       This File Was Downloaded From

              D . A . N . S . E     M . A . C . A . B . R . E

            Node 1         Node 2         Node 3         Node 4   

         713-324-2139   713-324-2826   713-324-3088   713-PRI-VATE

             4 Nodes Running AmiExpress -- GVP 68030 At 50 MHZ
           Amiga And Console Wares -- Phantasm Distribution Site

       ---> Date And Time Uploaded -- Wed 16-Sep-92  4:38:48 AM <---
-----------------------------------------------------------------------------
   -+- QUARTEX UKHQ (AMIGA & CONSOLE) -+-  &  -+- TRSi UKHQ (IBM/PC) -+-  
   ______________________________________________________________________
  /                                    __                                \
  \  THE _______________    __      ___\ \___   __    ______  ______     /
  /[u]   \  ___________ \ /\\ \    / _  \ \_/  / //\  \____ \ \  __ \    \
  \------/ /-__---____/ //  \\ \--/ // /_\ \--/ //  \-____/ /-/ /-/ /----/
  /-----/ /-/_ \-/ _  _// /\ \\ \/ // __/-\ \/ // /\ \\_  _/-/ /-/ /-----\
  \----/ /___/ // /-\ \/ /-_\ \\  // /____-\  // /-_\ \-\ \_/ /_/ /------/
  /    \______// /___\___//___/_\/_\_____/_/ / \_//___/  \/\_____/       \
  \           / //__________________________/                            /
   \_____     \/                                                   _____/
         \   0-DAY WAREZ FOR -AMIGA- & -IBM/PC- & -SNES/FAMICOM-  / 
          \                                                      /
           \ RUNNING - KS2-AMI-X 2.1-LOCKED 38400-210MB ONLINE! /
           /                                                    \
        __/            SYSOPS:  UNDERTAKER & SABBATH             \__
       /                                                            \
      /         CO-SYSOPS: RAMRAIDER & ELRIC/QTX & SABINE/AFL        \
     /                                                                \
    /                     TELEPHONE: +44-91-5160560                    \
    \__________________________________________________________________/

    -+- QUARTEX UKHQ (AMIGA & CONSOLE) -+-  &  -+- TRSi UKHQ (IBM/PC) -+-
; Corsair presents an example of how to drive the hardware - basically I used this intro

; cos everyone knows how it looks and thus it seemed a good bit of code to do..

; the comments outside the hardware stuff are a bit sparse - i'm not teaching you how

; Fairlight write code , just their use of hardware!!

;

; questions as usual leave on GRAVEYARD, Treasure Island or Oasis..

;





Start Of Intro From Fairlight

------------------------------------------------

00E000 78                     SEI			; disable irq ints  

00E001 A9 8F                  LDA #$8F			;

00E003 8D 00 21               STA Screen_Fader		; turn screen on at full brightness

00E006 9C 00 42               STZ $4200			;

00E009 9C 0C 42               STZ Start_DMA_Hi		; disable all 8 DMA channels

00E00C 9C 0B 42               STZ Start_DMA_Lo		;

00E00F 18                     CLC 			;

00E010 FB                     XCE 			; place in native (16 bit) mode

00E011 C2 30                  REP #$30			; set x,y,a all to 16 bit

00E013 A9 00 00               LDA #$0000		; 

00E016 5B                     TCD 			; set direct register to bank zero

00E017 64 07                  STZ $07			; clear memory loc. 7

00E019 A9 20 00               LDA #$0020		;

00E01C 85 0B                  STA $0B			; set $0b.w = $0020

00E01E E2 20                  SEP #$20			; set accum. to 8 bit

00E020 A9 80                  LDA #$80			;

00E022 8D 15 21               STA Video_Port_Control	; initialise Video Port Controller

00E025 A2 00 10               LDX #$1000		;

00E028 8E 16 21               STX Video_Port_Address	; Point Vram Pointer To $1000



00E02B A9 5B                  LDA #$5B        		;

00E02D 85 0D                  STA $0D         		; Copies $5bx8 bytes of char

00E02F A2 00 00               LDX #$0000      		; data into Video Ram via the port

outer_loop:						; thus giving 2

00E032 A0 08 00               LDY #$0008      		;

inner_loop:						;

00E035 BD D3 E2               LDA CHAR_SET,X  		; .: Character set for intro

00E038 8D 18 21               STA Video_Port_Lo		;    and FLT logo.

00E03B 9C 19 21               STZ Video_Port_Hi		;

00E03E E8                     INX             		;

00E03F 88                     DEY             		;

00E040 D0 F3                  BNE inner_loop   		;

00E042 C6 0D                  DEC $0D         		;

00E044 D0 EC                  BNE outer_loop   		;



00E046 9C 05 21               STZ $2105			; clear Video Reg. unknown

00E049 A9 04                  LDA #$04        		; set Playfield 0 To $400 and 32x32 chars

00E04B 8D 07 21               STA Playfield_0_Addr	; 

00E04E A9 08                  LDA #$08        		; set Playfield 1 to $800 and 32x32 chars

00E050 8D 08 21               STA Playfield_1_Addr	;

00E053 A9 11                  LDA #$11        		; Set Playfield 0+1 Tile Addr To $100

00E055 8D 0B 21               STA Tile01_Vram_Addr	;



00E058 A2 07 00               LDX #$0007      		;

00E05B 9E 0D 21               STZ Plane_0_Scroll_X,X	; Clear All The Scroll Pointers

00E05E 9E 0D 21               STZ Plane_0_Scroll_X,X 	;

00E061 CA                     DEX 			;

00E062 10 F7                  BPL $00E05B		;



00E064 A2 07 00               LDX #$0007		;

00E067 9E 23 21               STZ $2123,X		; Clear Video Registers $2123-$212a

00E06A CA                     DEX 			;

00E06B 10 FA                  BPL $00E067		;



00E06D A9 03                  LDA #$03			;

00E06F 8D 2C 21               STA Playfield_Enable	; Enable playfields 0 & 1

00E072 A2 04 00               LDX #$0004		;

00E075 9E 2D 21               STZ $212D,X		; Clear Video Registers $212d-$2130

00E078 CA                     DEX 			;

00E079 10 FA                  BPL $00E075		;



00E07B 9C 33 21               STZ Interlace_Flags	; Disable Interlace Mode

00E07E A9 04                  LDA #$04			;

00E080 9C 16 21               STZ Video_Port_Address	; Set Video Port Address to $400

00E083 8D 17 21               STA Video_Port_Address+1	;

00E086 A9 80                  LDA #$80			;

00E088 8D 15 21               STA Video_Port_Controller	; Initialise Video Controller



00E08B A2 00 08               LDX #$0800		;

00E08E 9C 19 21               STZ Video_Port_Data+1	; Clear $800 bytes of Vram from $400 upwards

00E091 CA                     DEX             		;

00E092 D0 FA                  BNE $00E08E		;



00E094 A2 AB E5               LDX #$E5AB      		; Display Text From $e5ab on..

00E097 20 3E E2               JSR DO_TEXT     		; 

00E09A A9 08                  LDA #$08			;

00E09C 9C 16 21               STZ Video_Port_Address	; Set Video Port Address to $800 

00E09F 8D 17 21               STA Video_Port_Address+1	; 

00E0A2 9C 15 21               STZ Video_Port_Controller	; Clear Video Port Controller



00E0A5 A2 00 00               LDX #$0000		;

00E0A8 BD 91 E6               LDA $E691,X     		; Copy $a0 bytes down into Vram location

00E0AB 8D 18 21               STA Video_Port_Data	; $800 onwards

00E0AE E8                     INX 			; 

00E0AF E0 A0 00               CPX #$00A0		;

00E0B2 D0 F4		      BNE $E0A8			;



00E0B4 A9 20		      LDA #$20			;

00E0B6 8D 18 21               STA Video_Port_Data	; Fill One Screen Worth of VRAM with 

00E0B9 E8                     INX 			; spaces

00E0BA E0 00 04               CPX #$400			;

00E0BD D0 F7		      BNE $E0B6			;



00E0BF A9 A8		      LDA #$A8			;

00E0C1 8D 00 0C               STA $0C00			; $c00 = $a8

00E0C4 8D 00 0D               STA $0D00			; $d00 = $a8



00E0C7 A9 21                  LDA #$21			;

00E0C9 A2 00 00               LDX #$0000		; set $c01-$c028 = $21

00E0CC 9D 01 0C               STA $0C01,X		;

00E0CF E8                     INX 			; ie set up the color pointer table

00E0D0 E0 28 00               CPX #$0028		;

00E0D3 D0 F7		      BNE $E0CC			;



00E0D5 A9 F8		      LDA #$F8			;

00E0D6 F8                     SED 			; set decimal flag on

00E0D7 9D 01 0C               STA $0C01,X		;

00E0DA A9 01                  LDA #$01			; set more low memory

00E0DC 9D 02 0C               STA $0C02,X		;

00E0DF E8                     INX 			;

00E0E0 E0 A0 00               CPX #$00A0		; and further color palette set-up

00E0E3 D0 F7		      BNE $E0DC			;



00E0E5 9e 02 0C		      STZ $C02,X		;

00E0E8 A9 0B                  LDA #$0B			;

00E0EA A2 00 00               LDX #$0000		; set even more low memory 

00E0ED 9D 01 0D               STA $0D01,X		; - seems to set it to $b and then clear it??

00E0F0 E8                     INX 			;

00E0F1 9E 01 0D               STZ $0D01,X		;

00E0F4 1A                     INC A			; pallete data set up

00E0F5 E8                     INX 			;

00E0F6 E0 28 00               CPX #$0028		;

00E0F9 D0 F2		      BNE $E0ED			;



00E0FB 9D 01 0D		      STA $0D01,X               ;   

00E0FE E8                     INX 			;

00E0FF 9E 01 0D               STZ $0D01,X		;

00E102 3A                     DEC A			; and more 'irelevant' low mem stuff

00E103 E8                     INX 			;

00E104 E0 50                  CPX #$0050		; more palette data set-up

00E107 D0 F2                  BNE $E0FB			;



00E109 A9 F8		      LDA #$F8			;

00E10B 9D 01 0D               STA $0D01,X		;

00E10E A9 FF                  LDA #$FF			; and more 'irelevant' low mem stuff

00E110 9D 02 0D               STA $0D02,X		;

00E113 E8                     INX 			; more palette data set-up

00E114 E0 40 01               CPX #$0140		;

00E117 D0 F7		      BNE $E109			;

00E119 9E 02 0D		      STZ $D02,X		;



00E11C 9C 0C 42               STZ DMA_Enable		; Disable all DMA channels

00E11F 9C 10 43               STZ DMA_Control_1		;

00E122 A9 02                  LDA #$02       		; set up control regs for channel 1+2

00E124 8D 20 43               STA DMA_Control_2		;

00E127 A9 21                  LDA #$21       		; Select pallete pointer + color for

00E129 8D 11 43               STA DMA_Destination_1	; DMA dump destination

00E12C 1A                     INC A          		;

00E12D 8D 21 43               STA DMA_Destination_2	;

00E130 A2 00 0C               LDX #$0C00     		;

00E133 8E 12 43               STX DMA_Source_Addr_1	; Palette numbers from $0c00 

00E136 A2 00 0D               LDX #$0D00     		;

00E139 8E 22 43               STX DMA_Source_Addr_2	; Palette data from $0d00

00E13C 9C 14 43               STZ DMA_Source_Bank_1	;

00E13F 9C 24 43               STZ DMA_Source_Bank_2	;

00E142 A9 06                  LDA #$06			; turn on DMA channels 1+2

00E144 8D 0C 42               STA DMA_Enable		;



00E147 A9 0F                  LDA #$0F			; turn off screen

00E149 8D 00 21               STA Screen_Fader		;

00E14C A9 01                  LDA #$01			;

00E14E 8D 00 42               STA $4200			; errmm

00E151 20 C1 E1               JSR Pad_Poll_Hi		; Wait for poll hi

00E154 9C 21 21               STZ Palette_Color_Pointer ; 

00E157 9C 22 21               STZ Palette_Color_Data	; set background to black

00E15A 9C 22 21               STZ Palette_Color_Data	;

00E15D 4C 97 E1               JMP $00E197

------------------------------------------------

00E160 20 C1 E1               JSR Pad_Poll_Hi		; wait for poll hi

00E163 20 13 E2               JSR PROC_B



00E166 AD 12 42               LDA Pad_Poll		; Wait until a button has been

00E169 4A                     LSR A			; pressed

00E16A B0 FA                  BCS $00E166		;



00E16C 20 CD E1               JSR PROC_A		;

00E16F A9 F0                  LDA #$F0			;

00E171 25 0A                  AND $0A			;

00E173 F0 46                  BEQ $00E1BB		;

00E175 5C 00 80 00            JMP GAME			; and run the game..

------------------------------------------------

00E179 A9 01                  LDA #$01			;

00E17B A2 01 00               LDX #$0001		;

00E17E 20 C1 E1               JSR Pad_Poll_Hi		;

00E181 8D 06 21               STA Pixelation		;

00E184 20 C7 E1               JSR Pad_Poll_Lo		;

00E187 CA                     DEX 			;

00E188 10 F4                  BPL $00E17E		;

00E18A 18                     CLC 			;

00E18B 69 10                  ADC #$10			;

00E18D C9 01                  CMP #$01			;

00E18F D0 EA                  BNE $00E17B		;



00E191 20 40 E2               JSR $00E240		;

00E194 20 C7 E1               JSR Pad_Poll_Lo		;



00E197 20 C1 E1               JSR Pad_Poll_Hi		; wait for b7 pad_poll to go hi.

00E19A 20 13 E2               JSR PROC_B		;



00E19D A9 F1                  LDA #$F1       		;

00E19F A2 01 00               LDX #$0001		; 'Reverse Pixelate' the text into vision

00E1A2 20 C1 E1               JSR Pad_Poll_Hi   	;

00E1A5 8D 06 21               STA Pixelation		;

00E1A8 20 C7 E1               JSR Pad_Poll_Lo    	;

00E1AB CA                     DEX            		;

00E1AC 10 F4                  BPL $00E1A2    		;

00E1AE 38                     SEC            		;

00E1AF E9 10                  SBC #$10       		;

00E1B1 C9 F1                  CMP #$F1       		;

00E1B3 D0 EA                  BNE $00E19F    		;



00E1B5 20 C1 E1               JSR Pad_Poll_Hi		;

00E1B8 9C 06 21               STZ Pixelation 		; set pixels to normal.

00E1BB 20 C7 E1               JSR Pad_Poll_Lo		;

00E1BE 4C 60 E1               JMP $00E160		; and jump into the main loop

------------------------------------------------

00E1C1 2C 12 42 Pad_Poll_Hi   BIT Pad_Poll		; wait until bit 7 of pad_ready goes hi

00E1C4 10 FB                  BPL Pad_Poll_Hi		;

00E1C6 60                     RTS			;

------------------------------------------------

00E1C7 2C 12 42 Pad_Poll_Lo   BIT Pad_Poll		;

00E1CA 30 FB                  BMI Pad_Poll_Lo       	; wait until bit 7 of pad_ready goes lo

00E1CC 60                     RTS 			;

------------------------------------------------

00E1CD C2 20    PROC_A        REP #$20			; 16 bit accum.

00E1CF A2 00 00               LDX #$0000		;



00E1D2 A9 FF 7F               LDA #$7FFF		;

00E1D5 E4 0B                  CPX $0B			;

00E1D7 F0 07                  BEQ $00E1E0		; set up table of $7fff in memory

00E1D9 9D B0 0D               STA $0DB0,X		;

00E1DC E8                     INX 			;

00E1DD E8                     INX 			;

00E1DE 80 F5                  BRA $00E1D5		;

00E1E0 A0 00 00               LDY #$0000		; and then follow the table with 5 zeros

00E1E3 B9 C3 E2               LDA $E2C3,Y   		;



00E1E6 9D B0 0D               STA $0DB0,X		;

00E1E9 C8                     INY 			;

00E1EA C8                     INY 			;

00E1EB E8                     INX 			;

00E1EC E8                     INX 			;

00E1ED C0 10 00               CPY #$0010		;

00E1F0 D0 F1                  BNE $00E1E3		;



00E1F2 A9 FF 7F               LDA #$7FFF		; and if x<>$90 then add more $7fff's

00E1F5 E0 90 00               CPX #$0090		;

00E1F8 F0 07                  BEQ $00E201		;

00E1FA 9D B0 0D               STA $0DB0,X		;

00E1FD E8                     INX 			;

00E1FE E8                     INX 			;

00E1FF 80 F4                  BRA $00E1F5		;

------------------------------------------------

00E201 A6 07                  LDX $07			; preserve old pad data

00E203 AD 18 42               LDA Pad_0_Data_Lo		; get new data

00E206 85 07                  STA $07			; and store it as the old

00E208 8A                     TXA 			; wop it in accum.

00E209 49 FF FF               EOR #$FFFF		; not the old data

00E20C 25 07                  AND $07			; and then use as a mask on new data

00E20E 85 09                  STA $09			; and then store in 9

00E210 E2 20                  SEP #$20			; and back to 8 bit accum..

00E212 60                     RTS 			; and back..

------------------------------------------------

00E213 9C 15 21 PROC_B        STZ Video_Port_Control	; Reset Video Port

00E216 A9 04                  LDA #$04          	;

00E218 9C 16 21               STZ Video_Port_Addr	; set video ram pointer to $400

00E21B 8D 17 21               STA Video_Port_Addr_Hi	;

00E21E 9C 19 21               STZ Video_Port_Data_Hi	;

00E221 9C 00 43               STZ DMA_Control_0		; reset dma controller #0

00E224 A9 18                  LDA #$18			;

00E226 8D 01 43               STA DMA_Destination_0	; point dma #0 to vram

00E229 A2 00 04               LDX #$0400		;

00E22C 8E 02 43               STX DMA_Source_Addr_0	; copy from address $400 to vram

00E22F 9C 04 43               STZ DMA_Source_Bank_0	;

00E232 A2 00 04               LDX #$0400		; copy $400 bytes into vram

00E235 8E 05 43               STX DMA_Size_0		;

00E238 A9 01                  LDA #$01			; and enable dma #0

00E23A 8D 0B 42               STA DMA_Enable		;

00E23D 60                     RTS 

------------------------------------------------

00E23E 86 00    DO_TEXT       STX $00          		; store text location

00E240 A2 00 04               LDX #$0400       		; set pointer to text

00E243 86 02                  STX $02          		; store text location again

00E245 64 06                  STZ $06			; clear 6

00E247 A2 00 00               LDX #$0000		; 

00E24A B2 00                  LDA ($00)			; get next char

00E24C 30 55                  BMI $00E2A3      		; if bit 7 set then off we go..

00E24E C9 20                  CMP #$20			; is it a space

00E250 90 11                  BCC $00E263      		; branch if less than a space..

00E252 92 02                  STA ($02)        		; store char

00E254 E8                     INX 			;

00E255 E6 00                  INC $00          		; next char

00E257 D0 02                  BNE $00E25B		;

00E259 E6 01                  INC $01			;

00E25B E6 02                  INC $02          		; next dest spot

00E25D D0 EB                  BNE $00E24A		;

00E25F E6 03                  INC $03			; 

00E261 80 E7                  BRA $00E24A		;

------------------------------------------------

00E263 E6 00                  INC $00          		; increment counter 

00E265 D0 02                  BNE $00E269      		; if not end of 255 boundary skip

00E267 E6 01                  INC $01			; increment hi byte of pointer

00E269 48                     PHA 			;

00E26A A9 20                  LDA #$20			;

00E26C E0 20                  CPX #$0020		; 

00E26F F0 0B                  BEQ $E27C			;

00E271 92 02                  STA ($02)			; basically these routines strip

00E273 E8                     INX 			; chars unnecessary and prepare the

00E274 E6 02                  INC $02			; text for output..

00E276 D0 F4                  BNE $00E26C		;

00E278 E6 03                  INC $03			; these lines increment the 16 bit pointer

00E27A 80 F0                  BRA $00E26C		; as 2 8 bit pointers

------------------------------------------------

00E27C 68                     PLA 			;

00E27D A2 00 00               LDX #$0000		;

00E280 E6 06                  INC $06			;

00E282 C5 06                  CMP $06			;

00E284 D0 E3                  BNE $00E269		;

00E286 B2 00                  LDA ($00)			;

00E288 E6 00                  INC $00			;

00E28A D0 02                  BNE $00E28E		;

00E28C E6 01                  INC $01			;

00E28E 85 0D                  STA $0D			;

00E290 64 0E                  STZ $0E			;

00E292 A9 20                  LDA #$20			;

00E294 E4 0D                  CPX $0D			;

00E296 F0 B2                  BEQ $00E24A		;

00E298 92 02                  STA ($02)			;

00E29A E8                     INX 			;

00E29B E6 02                  INC $02			;

00E29D D0 02                  BNE $00E2A1		; and again increment pointer as 2 8 bit

00E29F E6 03                  INC $03			;

00E2A1 80 F1                  BRA $00E294		;

------------------------------------------------

00E2A3 A5 06                  LDA $06			;

00E2A5 C9 20                  CMP #$20			;

00E2A7 F0 19                  BEQ $00E2C2		;

00E2A9 A9 20                  LDA #$20			;

00E2AB E0 20                  CPX #$0020		;

00E2AE F0 0B                  BEQ $E2BB			;

00E2B0 92 02                  STA ($02)			;

00E2B2 E8                     INX 			;

00E2B3 E6 02                  INC $02			;

00E2B5 D0 F4                  BNE $00E2AB		;

00E2B7 E6 03                  INC $03			;

00E2B9 80 F0                  BRA $00E2AB		;

------------------------------------------------

00E2BB A2 00 00               LDX #$0000		;

00E2BE E6 06                  INC $06			;

00E2C0 80 E1                  BRA $00E2A3		;

00E2C2 60                     RTS 			;

------------------------------------------------



The End..

[0 p
              _                                           _
             /(__  __  ________  __    __  ________  __  /(__  ________
        /\   \   \/  \/   __   \/  \  /  \/   __   \/  \ \   \/   __   \
       /  \  /   /   /   /_/   /   / /   /   /_/   /    \/   /   /_/   /
   _  /    \/   /   /       __/   / /   /   __    /         /   __    /
  /(_/         /   /   /\   \/   / /   /   / /   /   /\    /   / /   / _
 /      /\    /   /   /  \   \   \/   /   / /   /   /  \  /   /  \   \_)\
 \_____/  \__/\__/\__/    \__/\______/\__/  \__/\__/    \/\__/    \_____/

               /\ C C E S S i O N   U S A   H E A D Q U A R T E R S

                      T D T  US  H E A D Q U A R T E R S

   NODE #1  516-364-6257  <--- RingDown On --->   NODE #3  516-364-6261
   NODE #2  516-364-6259  <---- All Nodes ---->   NODE #4  516-PRI-VATE
                          NODE #5  516-PRI-VATE

                         Sysop : NUISANCE
               Co's  : TCM & JOKER - VENOM - EDDIE/ACC!