592 lines
15 KiB
NASM
Executable File
592 lines
15 KiB
NASM
Executable File
OPT NOL
|
|
LIB RRFRED
|
|
|
|
IFNC &A,NOL
|
|
OPT LIS
|
|
ENDIF
|
|
|
|
WSTART EQU $183A
|
|
|
|
RAPRAM EQU OLIST+(18*OSIZE) LEAVE 18 OBJECTS FOR APPEARS
|
|
|
|
ORG 0 OFFSETS
|
|
O1PT RMB 4 TOP OBJECT POINTER
|
|
O2PT RMB 4 BOTTOM OBJECT POINTER
|
|
APADD RMB 2 ADRESS TO EXPAND
|
|
DATA1 RMB 14*11 DATA FOR FIRST OBJECT
|
|
DATA2 RMB 13*11 DATA FOR SECOND OBJECT
|
|
RAPSIZ EQU *
|
|
|
|
ORG LOGORG
|
|
|
|
JMP LOGGER
|
|
FDB COLC
|
|
|
|
LOGGER JSR GNCIDE
|
|
CLR ATFLAG NO COIN SEEN YET
|
|
MAKP CCHECK MONITOR CREDITS
|
|
LDX #LOGG1 LOOK....UP IN THE SKY....
|
|
CLRA ITS A BIRD......ITS A PLANE....NO,
|
|
JSR MSPROC ITS S U P E R P R O C E S S !
|
|
JMP SUCIDE AND DIE
|
|
|
|
CCHECK LDA CREDIT
|
|
STA PD,U
|
|
CCHEK1 LDA CREDIT
|
|
CMPA PD,U
|
|
BEQ CCHEK2
|
|
INC ATFLAG INDICATE IN COIN JUST INSERTED MODE
|
|
JMP FAMPAG GO TO FAMILY PAGE FOR COIN
|
|
CCHEK2 NAP 8,CCHEK1
|
|
|
|
RMAK FDB LR,LO,LB,LO,LT,LR,LO,LN,LC,0 ROBOTRON POINTERS
|
|
|
|
LOGG1 JSR SCRCLR
|
|
JSR TABORG
|
|
|
|
CLR ATFLAG NORMAL PATH INTO FAMILY PAGE...NO CREDS
|
|
JMP FAMPAG AND DO THAT PAGE
|
|
|
|
RUNIT CLR ATFLAG
|
|
JSR GNCIDE
|
|
JSR OINIT
|
|
JSR SCRCLR
|
|
MAKP CCHECK MONITOR CREDITS
|
|
CLR PCRAM+$C ROBOTRON COLORS
|
|
CLR PCRAM+$E
|
|
|
|
NAP 3,RUNNME MAKE SURE THE PCRAM STUFF TAKES EFFECT
|
|
|
|
RUNNME LDX #WSTART PLACE FOR UPPER LEFT OF LOGO
|
|
STX PD+2,U
|
|
|
|
LDX #RAPRAM RAM DATA AT
|
|
LDY #RMAK
|
|
|
|
RUNIT3 STY PD,U LETTER POINTER AT PD
|
|
STX PD+4,U RAM POINTER AT PD+4
|
|
|
|
NAP 1,RUNIT2 SLEEPY TIME
|
|
|
|
RUNIT2 LDY PD+4,U GET DATA BLOCK
|
|
LDD #$B0E 11 X 14 FOR TOP
|
|
STD O1PT,Y
|
|
LDB #13 11 X 13 FOR BOTTOM
|
|
STD O2PT,Y
|
|
LEAX DATA1,Y FIRST DATA POINTER
|
|
STX O1PT+2,Y DATA POINTER
|
|
LEAX DATA2,Y
|
|
STX O2PT+2,Y
|
|
LDX PD+2,U GET NEXT LETTER SCREEN POINTER
|
|
STX APADD,Y AND SAVE FOR APPEAR
|
|
|
|
LDY PD,U GET LETTER POINTER
|
|
LDU ,Y GET NEXT LETTER
|
|
BEQ WDONE DONE WRITING...TIME FOR BLASTOFF!
|
|
|
|
CLRB NO FLAVOR PLEASE
|
|
LDA #$CE COLORS
|
|
PSHS X SAVE POINTER WE'RE USING
|
|
JSR LETOUT PUT THE LETTER ON THE SCREEN
|
|
LDU CRPROC RESTORE PROCESS BASE
|
|
LEAX $200,X SPACER
|
|
STX PD+2,U NEXT ONE
|
|
|
|
PULS X PLACE WE WROTE IT
|
|
|
|
LDY PD+4,U GET PLACE TO WRITE IT
|
|
LEAY DATA1,Y POINT WHERE DATA GOES
|
|
LDD #$B1B REAL FOR 11 BY 27
|
|
JSR RWMOVE DO IT JACK!
|
|
|
|
LDX PD+4,U GET RAM POINTER
|
|
LEAX RAPSIZ,X
|
|
|
|
LDY PD,U
|
|
LEAY 2,Y
|
|
BRA RUNIT3
|
|
|
|
GETBAL PSHS A
|
|
LDA FREEPL+1 SEE IF BALLS ALLOWED
|
|
ANDA #$0F GET THE BYTE
|
|
PULS A,PC
|
|
|
|
* TIME TO STAGE THE APPEARS
|
|
|
|
WDONE BSR GETBAL SEE IF FANCY
|
|
BEQ NOBA11
|
|
|
|
JSR SCRCLR CLEAR THE SCREEN
|
|
|
|
NOBA11 LDA #$7
|
|
STA PCRAM+$C RED
|
|
|
|
LDA #$3F
|
|
STA PCRAM+$E
|
|
|
|
BSR GETBAL
|
|
LBEQ LOGG2 NO APPEARS NECESSARY
|
|
|
|
LDA STATUS
|
|
ANDA #$FB
|
|
STA STATUS
|
|
|
|
LDU CRPROC
|
|
|
|
LDY #RAPRAM POINT AT FIRST
|
|
STY PD,U
|
|
LDA #9 9 CHARS
|
|
STA PD+2,U
|
|
BRA WDONE1 NO EXTRA NAPPING!
|
|
|
|
WDONE0 NAP 8,WDONE1
|
|
|
|
WDONE1 LDY PD,U GET THE LETTER TO DO
|
|
LDD APADD,Y GET THE ADDRESS OF TOP
|
|
ADDB #13
|
|
STB CENTMP+1
|
|
SUBB #13
|
|
LEAX O1PT,Y GET THE OBJECT
|
|
|
|
JSR AMAP DO THE APPEAR
|
|
|
|
ADDB #14 PULL TO THE TOP
|
|
STB CENTMP+1
|
|
|
|
LEAX O2PT,Y POINT AT SECOND OBJECT
|
|
|
|
JSR AMAP
|
|
|
|
LEAY RAPSIZ,Y FORM NEXT
|
|
STY PD,U
|
|
DEC PD+2,U
|
|
BNE WDONE0
|
|
NAP $20,LOGG2 LET THEM FINISH, THEN DO OTHER STUFF
|
|
|
|
COLE LDA #$3F COLOR F IS YELLOW ALSO
|
|
STA PCRAM+$F
|
|
|
|
LDA #$7
|
|
STA PCRAM+$D
|
|
|
|
MAKP LFV MAKE THE LASER COLORER (COLOR A)
|
|
|
|
LDY #L2084 POINTER TO THE STUFF
|
|
CLRB
|
|
LDX #$395C SCREEN PTR
|
|
LDA #$FD YELLOW PRIMARY, RED TRIM
|
|
COLE2 LDU [,Y++]
|
|
BEQ COLLLE DONE!
|
|
JSR LETOUT PUT IT OUT
|
|
BRA COLE2
|
|
|
|
COLLLE LDU ,Y++
|
|
BEQ COLE1
|
|
JSR LETOUT
|
|
BRA COLLLE
|
|
|
|
COLE1 MAKP COLC
|
|
|
|
LDX #CEPTR
|
|
LDY #PCRAM+$E
|
|
LDA #1
|
|
|
|
COLENT LDU CRPROC
|
|
STX PD+2,U
|
|
STY PD+4,U
|
|
STA PD+6,U
|
|
|
|
COLE4 LDX PD+2,U
|
|
STX PD,U
|
|
|
|
COLE3 LDX PD,U
|
|
LDA ,X+
|
|
BEQ COLE4
|
|
|
|
STA [PD+4,U]
|
|
STX PD,U
|
|
LDA PD+6,U
|
|
LDX #COLE3
|
|
JMP SLEEP
|
|
|
|
COLC LDA LSEED
|
|
BPL COLC1
|
|
|
|
LDA #7 RED ME
|
|
STA PCRAM+$C
|
|
JSR RAND
|
|
ANDA #$7 3 BITS OF SLEEP
|
|
INCA
|
|
LDX #COLC1
|
|
JMP SLEEP
|
|
|
|
COLC1 LDA SEED HOW RANDOM DO I FEEL?
|
|
ANDA #$3
|
|
BEQ COLC11 NOT VERY
|
|
|
|
CLR PCRAM+$C
|
|
NAP 3,COLC11
|
|
|
|
COLC11 LDX #COLTAB
|
|
JSR RAND
|
|
ANDA #$0F
|
|
LDA A,X
|
|
STA PCRAM+$C
|
|
NAP 7,COLC2
|
|
|
|
COLC2 LDA LSEED
|
|
ANDA #$3
|
|
BEQ COLC
|
|
|
|
CLR PCRAM+$C
|
|
NAP 4,COLC
|
|
|
|
CEPTR FCB $3F,$3F,$3F,$37,$2F,$27,$1F,$17,$F,7,7,7
|
|
FCB $F,$17,$1F,$27,$2F,$37,$3F,$3F,$3F,0
|
|
|
|
COLTAB FCB $FF,$C0,$C7,$1F,$7
|
|
FCB $07,$C0,$C7
|
|
FCB $FF,$C0,$C7,$16,$7
|
|
FCB $FF,$C0,$C7
|
|
|
|
*OLTAB FCB $38,$FF,$3A,$3B,$3C
|
|
*FCB $3D,$3E,$3F,$37,$2F,$27,$FF,$FF
|
|
*FCB $FF,$47,$87,$87,$C7,$C7
|
|
*FCB $C6,$C5,$CC,$CB,$CA,$DA,$E8,$F8
|
|
*FCB $FA,$FB,$FD,$FF,$BF,$3F,$3E
|
|
*FCB $3C,0
|
|
|
|
HISTRY EQU *
|
|
|
|
IFC &A,NOL
|
|
|
|
OPT LIS
|
|
LIB RRSCRIPT
|
|
OPT NOL
|
|
|
|
ELSE
|
|
LIB RRSCRIPT
|
|
|
|
ENDIF
|
|
|
|
LOGG2 JSR OINIT REDO THE OBJECT STRUCTURE
|
|
|
|
LDA STATUS CAN EXPLOSIONS NOW
|
|
ORAA #4
|
|
STA STATUS
|
|
|
|
MAKP COLE COLOR E PROCESS NEEDED,(ALSO PUT OUT 2084)
|
|
JSR CSET
|
|
MAKP MESSER HANDLE OPERATOR MESSAGE THEN TAKE OVER
|
|
|
|
JSR GETBAL SEE IF INHIBITED
|
|
BNE DOBALL
|
|
|
|
MAKP COL1 START THE WHITE PROCESS
|
|
|
|
NAP $FF,NOBA22
|
|
NOBA22 NAP $FF,HISTRY
|
|
|
|
DOBALL JSR WILSUB SETUP FIRST WILL BALL
|
|
LDA #28 WE'LL DO 28 AND THEN DIE
|
|
LDU CRPROC
|
|
STA PD,U COUNTER
|
|
RUN1 LDX LASTX
|
|
LDA BALCOL
|
|
JSR BALOUT OUTPUT A BALL AT INITIAL PLACE
|
|
JSR FORMX
|
|
NAP 4,RUN2
|
|
RUN2 DEC PD,U
|
|
BNE RUN1
|
|
JMP WILLME NOW SPIN EM'
|
|
|
|
MESSER JSR ATMCK SEE IF OPERATOR MESSAGE IS INTACT
|
|
BEQ MESS01 YEP
|
|
LDX DOPMES GET THE DEFAULT MESSAGE
|
|
LDY #MESOUT 52 BYTES WORTH
|
|
MESS02 LDD ,X++
|
|
STD ,Y++
|
|
CMPY #MESOUT+52
|
|
BLO MESS02
|
|
BRA MESS03
|
|
MESS01 LDX #OPMESS
|
|
LDY #MESOUT
|
|
MESS04 JSR RCMOSD GET 2 BYTES
|
|
STD ,Y++
|
|
CMPY #MESOUT+52
|
|
BLO MESS04
|
|
MESS03 LDA MESOUT+50 GET X OF FIRST LINE
|
|
LDB #$86 HEIGHT
|
|
LDY #MESOUT FIRST CHAR
|
|
BSR LINOUT PUT OUT A LINE
|
|
LDA MESOUT+51
|
|
LDB #$96
|
|
LDY #MESOUT+25
|
|
BSR LINOUT OUT LINE 2
|
|
LDB CREDIT
|
|
LDA #CPM1 COPYRIGHT ETC
|
|
JSR WRD5V PUT IT OUT
|
|
JMP SUCIDE WE'RE DONE..BYE
|
|
|
|
LINOUT PULS X GET RETURN ADDR
|
|
LDU CRPROC
|
|
STX PD,U AND SAVE
|
|
TFR D,X POINTER IN X PLEASE
|
|
LDA #25
|
|
STA PD+2,U NUMBER OF LETTERS TO OUTPUT
|
|
LDA #$66 COLOR OF OPERATOR MESSAGE
|
|
STA TEXCOL PUT IT AWAY
|
|
LINO1 LDA ,Y+ GET A LETTER
|
|
JSR PR57V PRINT IT
|
|
STX PD+3,U
|
|
STY PD+5,U
|
|
NAP 2,LINO2
|
|
LINO2 LDX PD+3,U
|
|
LDY PD+5,U
|
|
DEC PD+2,U
|
|
BNE LINO1
|
|
JMP [PD,U]
|
|
|
|
FCC ' ROBOTRON: 2084 '
|
|
FCC ' COPYRIGHT 1982 WILLIAMS ELECTRONICS INC. '
|
|
FCC ' ALL RIGHTS RESERVED '
|
|
|
|
WILSUB JSR FINIT FIRST TWO LOCATIONS FOR INITIAL MOVE
|
|
LDY #ARAM1
|
|
LDA #$10 MOVE OUTER COLOR TO ARAM1
|
|
BSR WMOVE DO IT
|
|
JMP FINIT INIT THE DATABASE AND RETURN
|
|
|
|
WILLME BSR WILSUB DO SETUP STUFF
|
|
|
|
MAKP COL1 MAKE THE COLOR PROC
|
|
|
|
LDU CRPROC
|
|
LDX #$2C0
|
|
STX PD+6,U SAVE
|
|
|
|
LDA #6
|
|
STA PD+4,U
|
|
|
|
LDX LASTX
|
|
LDA BALCOL
|
|
BRA WILL55
|
|
|
|
WILL1 LDA #6
|
|
STA PD+4,U
|
|
|
|
WILL44 JSR FORMX
|
|
JSR XUPD UPDATE POINTER TO MAKE THIS STUPID BEAM RUN
|
|
|
|
WILL55 LDY ERPTR GET HEIGHT OF GUY WE'RE GONNA ERASE
|
|
LDB VERTCT IT MUST BE 10 LINES BEYOND US
|
|
STB XTEMP KEEP IT HONEST
|
|
CMPB 1,Y FIND WHICH SIDE ITS ON
|
|
BLO WILL33 ITS ABOVE US!
|
|
|
|
SUBB 1,Y ITS BELOW US, SUBTRACT US
|
|
CMPB #20
|
|
BLS WILL55 LOOP PLEASE
|
|
LDB XTEMP GET THE COUNTER
|
|
CMPB #$EC ARE WE REAL LOW??
|
|
BHS WILL55 THEN WE NEED TO LET IRQ IN TO CHANGE PCRAM
|
|
BRA WILL66
|
|
|
|
WILL33 LDB 1,Y GET THE Y VALUE
|
|
CMPB #30 IS THE Y WE'RE TRYING TO PLOT HIGH??
|
|
BLS WILL55 THEN WAIT FOR BELOW US
|
|
|
|
SUBB VERTCT ELSE FIND OUT HOW HIGH?
|
|
CMPB #30 LETS SAY WE NEED 30 LINES TO DO IT
|
|
BLS WILL55
|
|
|
|
WILL66 JSR BALOFF TURN OFF THE BALL WE'RE ABOUT TO DO
|
|
|
|
JSR BALOUT PUT OUT THE BALL AT THAT POINT
|
|
|
|
LDU CRPROC
|
|
DEC PD+4,U
|
|
BNE WILL44
|
|
|
|
LDX PD+6,U TIME LEFT
|
|
LEAX -1,X
|
|
LBEQ HISTRY START OVER
|
|
STX PD+6,U
|
|
|
|
NAP 1,WILL1
|
|
|
|
WMOVE PSHS Y,A SAVE THE EVENTUAL TARGET
|
|
LDX LASTX GET THE FIRST X FOR SETUP
|
|
PULS A
|
|
PSHS X SAVE THE X
|
|
CLRB
|
|
LDU #BILL
|
|
JSR LETOUT NOW ITS ALLEGEDLY ON SCREEN
|
|
|
|
PULS X,Y GET BACK X (SCREEN) Y (RAM)
|
|
LDD #$E1B 14 X 28 IN REAL
|
|
JMP RWMOVE DO THE XFER FROM PRIME REAL ESTATE AND RET
|
|
|
|
X1 EQU $5
|
|
X2 EQU $85
|
|
Y1 EQU $F
|
|
Y2 EQU $CF
|
|
|
|
FINIT PSHS D,X
|
|
LDA #X1
|
|
LDB #Y1
|
|
STD LASTX
|
|
CLR SIDE SIDE 0
|
|
CLR SLIDER
|
|
LDA #$77
|
|
STA BALCOL
|
|
LDX #ERLIST
|
|
STX ERPTR
|
|
LDD #$13AF ERASE SCREEN CENTER ON FIRST PASS
|
|
FINIT1 STD ,X++
|
|
CMPX #EREND WHOLE LIST??
|
|
BLO FINIT1
|
|
PULS D,PC,X
|
|
|
|
FORMX PSHS B
|
|
LDA SIDE SIDE 0,1,2 OR 3??
|
|
ANDA #$3 LOW IS ALL THATS IMPORTANT
|
|
DECA
|
|
BMI SIDE0
|
|
DECA
|
|
BMI SIDE1
|
|
DECA
|
|
BMI SIDE2
|
|
SIDE3 LDD LASTX
|
|
SUBB #32 MOVE UP 1
|
|
BCS BADSID
|
|
CMPB #Y1 LOW Y??
|
|
BHI SIDEX DONE IF HIGH
|
|
BADSID LDA SLIDER FIND SLIDE AMOUNT
|
|
ADDA #2 2 UNITS PER
|
|
CMPA #16
|
|
BLO SLID1
|
|
CLR SLIDER
|
|
LDA #X1+16
|
|
LDB #Y1
|
|
BRA SIDCH
|
|
SLID1 STA SLIDER
|
|
LDB #Y1
|
|
LDA #X1
|
|
ADDA SLIDER SHIFT OVER BY SLIDER
|
|
BRA SIDCH NEW SIDE!
|
|
SIDE2 LDD LASTX
|
|
SUBA #16
|
|
BCS SIDE25
|
|
CMPA #X1
|
|
BHI SIDEX
|
|
SIDE25 LDA #X1
|
|
LDB SLIDER
|
|
NEGB
|
|
ASLB
|
|
ADDB #Y2 HIGH Y
|
|
BRA SIDCH
|
|
SIDE1 LDD LASTX
|
|
ADDB #32
|
|
CMPB #Y2
|
|
BLO SIDEX
|
|
LDB #Y2
|
|
LDA #X2
|
|
SUBA SLIDER
|
|
BRA SIDCH
|
|
SIDE0 LDD LASTX
|
|
ADDA #16
|
|
CMPA #X2
|
|
BLO SIDEX
|
|
LDA #X2
|
|
LDB SLIDER
|
|
ASLB
|
|
ADDB #Y1
|
|
SIDCH INC SIDE CHANGE TO A NEW SIDE
|
|
SIDEX STD LASTX SAVE THE X
|
|
TFR D,X RETURN IN X
|
|
LDA BALCOL RETURN OLD COLOR
|
|
SUBA #$11 NEXT COLOR
|
|
BCS SIDE8
|
|
BNE SIDE7
|
|
SIDE8 LDA #$77
|
|
SIDE7 STA BALCOL
|
|
PULS B,PC
|
|
|
|
XUPD PSHS X
|
|
LDX ERPTR GET CURRENT ERASE POSITION
|
|
LEAX 2,X POINT TO NEXT
|
|
CMPX #EREND DONE??
|
|
BLO BALOF1 IN RANGE
|
|
LDX #ERLIST
|
|
BALOF1 STX ERPTR PLACE
|
|
PULS X,PC
|
|
|
|
BALOFF PSHS X,D,CC
|
|
LDX [ERPTR] GET ENTRY 32 AGO
|
|
SEI
|
|
STX DEST PLACE TO ERASE
|
|
LDD #$A1F SIZE
|
|
STD HORIZ
|
|
CLR CONST
|
|
LDD #ARAM1 SOURCE IS WILLY BALL
|
|
STD ORIG
|
|
LDA #$1E
|
|
STA CONTRL
|
|
PULS CC,X,D,PC
|
|
|
|
BALOUT PSHS CC,A
|
|
STX [ERPTR] SAVE THIS BALLS POS. FOR ERASE MUCH LATER
|
|
SEI
|
|
STA CONST COLOR
|
|
STX DEST PLACE TO GO
|
|
LDD #$A1F
|
|
STD HORIZ SIZE ME
|
|
LDD #ARAM1 HALO
|
|
STD ORIG
|
|
LDA #$1E SLOW SER TO BLK CONST ZWS
|
|
STA CONTRL
|
|
|
|
* LDD #ARAM2 W
|
|
* STA ORIG
|
|
|
|
* CLR CONST CLEAR THIS FRAME
|
|
|
|
* LDA #$1E ZWS ETC
|
|
* STA CONTRL
|
|
PULS CC,A,PC
|
|
|
|
CSET PSHS X,Y,A
|
|
LDX #LCTAB USE LOGO COLOR TABLE FOR 1-7
|
|
LDY #PCRAM+1
|
|
COLLL LDA ,X+
|
|
STA ,Y+
|
|
CMPY #PCRAM+8
|
|
BLO COLLL
|
|
PULS X,Y,A,PC
|
|
|
|
COL1 LDX #PCRAM+1
|
|
STX PD+2,U
|
|
COLL BSR CSET SET THE COLORS WE'LL USE
|
|
COLL5 LDX PD+2,U GET WHITE POINTER
|
|
LEAX 1,X KICK IT UP
|
|
CMPX #PCRAM+8
|
|
BLO COLL8
|
|
LDX #PCRAM+1
|
|
COLL8 STX PD+2,U
|
|
LDA #$FF
|
|
STA ,X
|
|
NAP 3,COLL
|
|
|
|
LCTAB FCB $7 RED
|
|
FCB $C0 BLUE
|
|
FCB $17 ORANGE-BROWN
|
|
FCB $30 GREEN
|
|
FCB $C7 VIOLET
|
|
FCB $1F ORANGE
|
|
FCB $3F YELLOW
|
|
|
|
LIB RRLOGD
|
|
|
|
END
|