; Below is the beginning of the source code for Solaris. Thanks to ; Glenn Saunders for sending me a printout of the original code. ; I used Distella to disassemble the ROM image of the game, then ; manually added all of the variable names, formatting and ; comments from the original author. The goal was to make the ; listing as authentic as possible while keeping it compilable. ; The full listing is compilable with Dasm 2.12 and will create a ; binary file identical to the real Solaris ROM image. This listing ; is provided solely for educational purposes to try and learn more ; about how to program the Atari 2600. If you do not own an ; original Atari 2600 Solaris cartridge, you are not permitted to ; download the source code. You can purchase an original ; cartridge for 80 cents at http://www.oshealtd.com/. processor 6502 seg.u stella ;LIST ON ;PW 80 ;PL 253 ;SYNTAX 6502 ;CODE ;RADIX 10 ;ABSOLUTE ; VERSION 19.4 DATE 22-FEB-86 ; ;TITLE UNIVERSE COPYRIGHT 1986, DOUGLAS NEUBAUER ; ; ; ******************************** ; COPYRIGHT (C) 1986, DOUGLAS NEUBAUER ; THIS SOURCE LISTING IS COPYRIGHTED. ; NO RIGHT TO REPRODUCE THIS LISTING ; IS GRANTED UNLESS BY WRITTEN AGREEMENT ; OR WRITTEN PERMISSION BY DOUGLAS NEUBAUER ; ******************************** ; ; FILE NAME UNIV.ASM,UNIV.OBJ ; ; BEGINS 07-JAN-83 ; SCREEN 11-MAR-83 ; ENDS ???????? ; ; ******************************** ; BURN = 1 THEN BURN PROMS, BURN = 0 THEN ASSEMBLE FOR DEVELOPMENT SYSTEM BURN EQU 1 ; ******************************** ; ; BANK2 BANK4 ; 0 FIGHTER PLN FIG ; 8 PIRATE PLN PIR ; 10 WARP GRA. MISC GRAPH ; 14 DARTER ---- ; 18 HYPERJUMPER MAN + KEY ; 20 P KILLER LANDING ZONE ; 28 BLOCKADER TRN TOWER ; 30 ENEMY PHOTON ENE PHOTON ; 38 EXPLOSIONS EXPLOS ; 40 SATURN RINGS CRATER ; 48-53 MOON1 ; 54-5F MOON2 ; E0 PBLK (60+80) ; ; ; *** ZERO PAGE RAM *** ; ; BEGIN DATA SECTION ;DATA ; ORG $80 MAZRAM DS 8 CURSOR DS 1 JMPCNT DS 1 MAZSTA DS 1 ;MUST BE RIGHT AFTER JMPCNT (FOR FINDV) RANDOM DS 2 PROGST DS 1 HCOLP1 DS 2 JMPTIM DS 1 NOCLER ; DONT CLEAR PREVIOUS RAM ON WARM START NEWLEV DS 1 ;NO CLEAR ON GAME SEL. PNTR1 DS 2 PNTR2 DS 2 PNTR3 DS 2 PNTR4 DS 2 PNTR5 DS 2 PNTR6 DS 2 ATRACT DS 2 ;2 BYTE FRAME TIMER ONESHT DS 1 ; HGRAP1 DS 3 ; PLAYER TYPE DS 1 HGRAP0 DS 4 IQREAP DS 1 ;ALSO HWARF TARGET NUM. ; HHORP1 DS 3 ; PLAYER X DS 1 HHORP0 DS 4 PLINES DS 1 ; HVERP1 DS 3 ; PLAYER Y DS 1 HVERP0 DS 4 VWALL DS 1 ; ZPOSP1 DS 2 ; PHOTON Z DS 1 ZPOSP0 DS 4 DS 1 ;IQPATH-1 IQPATH DS 4 ; ; TEMPORARY STUFF ********* STARS DS 2 ;STAR PNTR REQUST DS 1 BOTSCN DS 1 HHORM2 DS 1 ; STAR HPOS NEWATT DS 1 PAUTIM DS 1 CENTER DS 1 ; HORIZ ZOOM BYTE IQPNTR DS 1 ;IQ RAM IQSTAK DS 1 IQWARP DS 1 SHIPST DS 1 HOLDM2 DS 1 HOLDM0 DS 1 ; END TEMP ****************** ; GAMTIM DS 1 LSTCUR DS 1 GAMEST DS 1 LIVES DS 1 TARNUM DS 1 FUEL DS 1 SCORE DS 3 CH0PTR DS 1 CH1PTR DS 1 CH0SHD DS 1 CH1SHD DS 1 ORG $E3 ; BEGIN CHART BLOCK EXPNTR DS 1 ; ALSO USED AS CHART TIMER CHTBLK VECTP1 DS 2 PNTRP1 DS 1 DS 1 XDELP0 DS 4 DS 1 YDELP0 DS 4 DS 1 ZDELP0 DS 4 ; SPEED OF OBJS. VELOC DS 1 ; FOR HORIZ SHIP HPOSL DS 1 ; FOR HORIZ SHIP HHITP0 DS 4 ; USES STAK1 TOO ,ALSO USED FOR STACK IN BRAIN, 4LEV DEEP ; END CHART BLOCK ; FOLLOWING VARIABLES RESIDE IN STACK STAK1 DS 1 STAK2 DS 1 STAK3 DS 1 STAK4 DS 1 ; ; ; END DATA SECTION ;; CODE ; ; ; VCS EQUATES VSYNC EQU 0 VBLANK EQU 1 WSYNC EQU 2 SIZPM0 EQU 4 SIZPM1 EQU 5 COLPM0 EQU 6 COLPM1 EQU 7 COLPF EQU 8 COLBK EQU 9 PRIOR EQU $A REFP0 EQU $B REFP1 EQU $C GRFPF0 EQU $D GRFPF1 EQU $E GRFPF2 EQU $F HPOSP0 EQU $10 HPOSP1 EQU $11 HPOSM0 EQU $12 HPOSM1 EQU $13 HPOSM2 EQU $14 AUDC0 EQU $15 AUDC1 EQU $16 AUDF0 EQU $17 AUDF1 EQU $18 AUDV0 EQU $19 AUDV1 EQU $1A GRAFP0 EQU $1B GRAFP1 EQU $1C GRAFM0 EQU $1D GRAFM1 EQU $1E GRAFM2 EQU $1F HDELP0 EQU $20 HDELP1 EQU $21 HDELM0 EQU $22 HDELM1 EQU $23 HDELM2 EQU $24 VDELP0 EQU $25 VDELP1 EQU $26 VDELM2 EQU $27 GCTLM0 EQU $28 GCTLM1 EQU $29 ADDEL EQU $2A CLRDEL EQU $2B HITCLR EQU $2C M0PL EQU $30 M1PL EQU $31 P0PF EQU $32 P1PF EQU $33 M0PF EQU $34 M1PF EQU $35 M2PF EQU $36 MIPL EQU $37 POT0 EQU $38 POT1 EQU $39 POT2 EQU $3A POT3 EQU $3B TRIG0 EQU $3C TRIG1 EQU $3D PORTA EQU $280 RACTL EQU $281 PORTB EQU $282 PBCTL EQU $283 RTIMER EQU $284 RFLAG EQU $285 STIME1 EQU $294 STIME8 EQU $295 STIM64 EQU $296 ST1024 EQU $297 FTIME1 EQU $29C FTIME8 EQU $29D FTIM64 EQU $29E FT1024 EQU $29F ; ; ; BANK SELECT EQUATES IFCONST BURN BANK1 EQU $F000 BANK2 EQU $F000 BANK3 EQU $F000 BANK4 EQU $F000 ELSE BANK1 EQU $C000 BANK2 EQU $D000 BANK3 EQU $E000 BANK4 EQU $F000 ENDIF STROB1 EQU $FFF6 STROB2 EQU $FFF8 STROB3 EQU $FFF7 STROB4 EQU $FFF9 ; ; ; GAME EQUATES NUMCOL EQU 3+4 K EQU 8 ; CHTRAM POS. OF HOME PLANET U EQU 1 TOPSCN EQU $99 SCNSIZ EQU TOPSCN+39 MTNTOP EQU $62 TRNTOP EQU $62 VSHIP EQU $1D ZVIS EQU $78 PBLK EQU $60+$80 ; BLANK P0 POFF EQU $A8 ;NEW P0 SCLR EQU $F2 ;STAR COLOR VCENT EQU $53 ;VERT ZOOM CENTR OF SCRN SKYCOL EQU $70 SURCOL EQU $62 TRNCOL EQU $84 ; Z= USED IN BANK2 ; EQUATE Q= BRNTB1 ; EQUATE W= TYPTAB ; EQUATE J= AUDTAB ; BOTTOM OF SCREEN = 0 ; ; VBLANK EQUATES ; TEMP4 EQU PNTR5+0 TEMP5 EQU PNTR2+1 TEMP6 EQU PNTR1+0 TEMP7 EQU PNTR1+1 TEMP9 EQU PNTR4+0 TEMP10 EQU PNTR4+1 JOYRMH EQU PNTR6+0 JOYRMV EQU PNTR6+1 TEMP11 EQU PNTR2+0 TEMP12 EQU PNTR3+0 TEMP13 EQU PNTR3+1 THGRP1 EQU PNTR5+1 ;SHIP GRAPHIC 0,1,2 NEWAVE EQU STARS+1 ; ; ; SCREEN EQUATES VECTP0 EQU PNTR1 HOLDP1 EQU PNTR2+0 CROSP1 EQU PNTR2+1 VERTP0 EQU PNTR3+0 VERTP1 EQU PNTR3+1 MISC1 EQU PNTR4 MOON2 EQU PNTR5 MOON1 EQU PNTR6 MOON3 EQU STAK1 ;AND STAK2 MISC2 EQU STAK3 ;AND STAK4 ; ; ; ; .BEGIN PROGRAM ; ; LIST OFF ; INCLUDE B:BANK2.ASM ; ; ; LIST OFF ; INCLUDE B:BANK3.ASM ; ; ; LIST OFF ; INCLUDE B:BANK4.ASM ; ; ; LIST OFF ; INCLUDE B:BANK1.ASM ; ; ; LIST OFF IFNCONST BURN ; JUMP VECTORS FOR UNIV.ASM DURNING DEVELOPMENT ; BK3 ORG BANK3+$FCC JMP BANK2+$FCF JMP BANK1+$FD2 JMP BANK4+$FD5 ORG BANK3+$FEA JMP BANK2+$FED JMP BANK4+$FF0 ; BK1 ORG BANK1+$FCF JMP BANK4+$FD2 ORG BANK1+$FD5 JMP BANK3+$FD8 ORG BANK1+$FDE JMP BANK2+$FE1 ORG BANK1+$FF0 JMP BANK3+$FF3 ; BK4 ORG BANK4+$FD2 JMP BANK3+$FD5 ORG BANK4+$FD8 JMP BANK1+$FDB ORG BANK4+$FE4 JMP BANK3+$FE7 ORG BANK4+$FEA JMP BANK1+$FED JMP BANK3+$FF0 ; BK2 ORG BANK2+$FCC JMP BANK1+$FCF ORG BANK2+$FD5 JMP BANK3+$FD8 ORG BANK2+$FDE JMP BANK4+$FE1 ORG BANK2+$FE4 JMP BANK4+$FE7 ; DEFINE PC (FOR DEVELOPMENT SYSTEM) ORG $9C04 DW INIT ; FOR HALT DURING VBLANK ORG HACKCLI CLI ORG HACKSEI SEI ENDIF ;.END ; bank 1 seg bank1 ORG $0000 rorg $f000 DIVTB1 .byte $08,$03,$02,$01,$01,$01,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $0C,$08,$05,$13,$13,$12,$12,$22 .byte $22,$31,$41,$51,$61,$71,$80,$F0 .byte $0E,$09,$18,$16,$14,$24,$23,$33 .byte $32,$42,$62,$72,$82,$91,$91,$F1 .byte $0F,$0B,$19,$18,$26,$25,$34,$34 .byte $43,$63,$73,$82,$92,$92,$A2,$F2 .byte $0F,$1C,$19,$28,$38,$37,$46,$45 .byte $54,$74,$83,$93,$A3,$A3,$B2,$F2 .byte $0F,$1D,$1B,$29,$38,$48,$47,$56 .byte $65,$85,$94,$A4,$B4,$B3,$C3,$F3 .byte $0F,$1E,$2B,$3A,$39,$48,$58,$67 .byte $76,$95,$95,$A4,$B4,$C4,$D3,$F3 .byte $0F,$1F,$2C,$3A,$49,$59,$68,$78 .byte $87,$96,$A6,$B5,$C5,$D4,$E4,$F4 ZOOMTB .byte $0F,$7F,$5D,$4B,$3A,$29,$29,$28 .byte $28,$17,$17,$16,$15,$15,$15,$04 .byte $1F,$0F,$1E,$0B,$9A,$89,$99,$89 .byte $08,$18,$07,$07,$06,$16,$05,$05 .byte $8F,$8F,$9C,$8C,$0B,$0A,$09,$09 .byte $08,$18,$08,$07,$07,$06,$06,$05 .byte $0F,$0F,$1F,$0C,$0B,$0A,$0A,$09 .byte $89,$88,$88,$88,$07,$07,$06,$06 .byte $9F,$8F,$8F,$8D,$0C,$0B,$0A,$09 .byte $89,$89,$88,$88,$08,$07,$07,$06 .byte $0F,$0F,$0F,$0E,$8C,$8B,$8A,$9A .byte $09,$09,$09,$08,$08,$08,$07,$07 .byte $0F,$0F,$0F,$0E,$0C,$0B,$0A,$0A GRATB7 .byte $09,$09,$89,$08,$88,$08,$08,$07 .byte $8F,$8F,$0F,$0F,$8D,$0C,$8B,$8A .byte $0A,$89,$89,$89,$88,$88,$88,$88 ; ; ; ; SUBROUTINES FOR BANK 1 NEWOB1 ; SUB. STY IQSTAK NEWOB2 ; GTO STA IQPNTR ; NEWOBJ LDY IQPNTR LDA TYPTAB,Y BMI NEWOB3 STA PNTR3 LDA #>NEWOB1 STA PNTR3+1 CLC LDA TYPTAB+1,Y JMP.ind (PNTR3) NEWB55 ; EMP CMP HGRAP0+3 JMP NEWB62 NEWB78 ; RNW CMP RANDOM NEWB62 LDA TYPTAB+2,Y BCC NEWB61 BCS NEWOB2 ;JMP NEWB50 ; LVS ADC NEWAVE TAX LDA NEWT11,X STA IQREAP JMP NEWOB7 NEWB51 ; BRN DEC IQREAP BPL NEWOB2 BMI NEWOB7 ;JMP NEWOB5 ; RET LDY IQSTAK LDA #$00 STA IQSTAK BEQ NEWOB7 ;JMP NEWB81 ; INL LDA LIVES CMP #$05 BCS NEWOB8 INC LIVES BCC NEWOB8 ;JMP NEWB41 ; STO TAX LDA #$00 BEQ NEWB60 ;JMP NEWOB4 ; ENB TAX LDA 0,X NEWB60 ORA TYPTAB+2,Y NEWB54 STA 0,X NEWB61 INY NEWOB7 INY NEWOB8 INY STY IQPNTR NEWB58 RTS NEWB40 ; RND LDA RANDOM AND #$03 ADC TYPTAB+1,Y TAY LDA NEWTB7-$E0,Y ; FALL THRU TO NEWOB3 ; EQUATES **** SUB EQU <NEWOB1 GTO EQU <NEWOB2 ENB EQU <NEWOB4 STO EQU <NEWB41 RET EQU <NEWOB5 RNW EQU <NEWB78 LVS EQU <NEWB50 RND EQU <NEWB40 BRN EQU <NEWB51 EMP EQU <NEWB55 INL EQU <NEWB81 ; ; NEWOB3 ; BEGIN LOAD CMP #$E0 BCS NEWOB8 ;2ND BYTE OF RND CMP #$A8 ;? BCS NEWB94 LDY IQWARP CPY #$F1 BCS NEWB94 LDA #$CB ;TOO FAST NEWB94 STA TEMP10 LDY #$05 STY TEMP4 NEWB18 LDA.wy HGRAP0-2,Y ASL BPL NEWB19 DEC TEMP4 NEWB19 DEY BNE NEWB18 BIT PROGST BVC NEWB13 ; PLANET/TRENCH LDX #$03 LDA TEMP10 AND #$04 BEQ NEWB52 INX ;LZ OR MAN NEWB52 LDA TEMP10 AND #$03 CMP TEMP4 BCS NEWB48 LDA #$CB STA TEMP10 ;CRATER DEFAULT NEWB48 LDA HGRAP0-1,X CMP #PBLK BNE NEWB58 ;ABORT LDA HVERP0-2,X CMP #$4E BCS NEWB58 ;ABORT LDA TEMP10 AND #$7C CMP #$40 BCC NEWB93 LDA PROGST SBC #$08 ;C=1 AND #$68 ;40=PLN, 28=TRN NEWB93 STA HGRAP0-1,X LDA #$56 STA HVERP0-1,X CPX #$04 BEQ NEWB53 ;LZ OR MAN LDY #$04 NEWB11 JMP NEWB10 NEWB53 LDA #AUDMAN-J STA CH1SHD LDY NEWAVE BEQ NEWB11 ; EASY JUMP JMP NEWB29 |