robotron/RRTABLE.ASM

551 lines
15 KiB
NASM
Executable File

OPT NOL
LIB RRFRED
OPT LIS
TCOL1 EQU GETLRM
TCOL2 EQU GETLRM+1
ORG TABORG HIGH SCORE TABLE ORIGIN
* PD - FONT SIZE
* PD+1 NUMBER PER COLUMN
* PD+2 NUMBER OF COLUMNS LEFT
* PD+3 HEIGHT SPACING BETWEEN ROWS
* PD+4 WIDTH SPACING BETWEEN COLUMNS
* PD+5 NUMBER LEFT IN THIS COLUMN
* PD+6 INDEX OF CURRENT ENTRY
* PD+7 X ADDRESS DURING SLEEP
* PD+9 CMOS PTR DURING SLEEP
* PD+11 RETURN ADDRESS SAVE
* PD+18 TOP LEVEL RETURN ADDRESS
* PD+15 X RETURN
* PD+16 Y RETURN
* PD+17 NUMBER UNTIL SLEEP
TABLE PULS D GET RETURN
LDU CRPROC
STD PD+18,U SAVE "RETURN ADDRESS"
MAKP LOOPP START THE COLORING PROCESS
JSR FRAMER PUT OUT THE FRAME
LDA #$99
STA TCOL1
LDA #$CC
STA TCOL2
LDY #TODAYS POINT AT FIRST TODAYS SCORE
LDU CRPROC POINT RIGHT
LDA #7 USE 7 FONT
STA PD,U
LDD #$502 5 PER COLUMN, 2 COLUMNS
STD PD+1,U
LDD #$934
STD PD+3,U 7 HEIGHT, 50 WIDTH
LDA #1 START WITH INDEX OF 1
STA PD+6,U INDEX POINTER
LDX #$1A35 UPPER LEFT OF PLACE TO DO IT
JSR PRJNK PRINT THE STUFF
LDA #$AA
STA TCOL1 NEW COLOR
LDA #$DD
STA TCOL2
LDY #GODSCR+34
JSR CLSET SET THE COLOR
LDX #GODSCR+38 POINT AT LAST CHAR
TABLE1 JSR RCMOSA GET A CHAR
LEAX -4,X
CMPA #$3A SPACE??
BNE TABLE2 NOPE
CMPX #GODSCR ARE WE POINTING AT FIRST??
BHS TABLE1
TABLE2 LEAX 2,X POINT AT FIRST NON BLANK
PSHS X SAVE ON STACK
LDX #$157A PLACE FOR GOD
LDA #$31
JSR PR57V
LDA #$5C RIGHT PAREN
JSR PR57V
LEAX $300,X SPACE OVER
LDY #GODSCR
TABLE3 EXG X,Y SWAP CMOS, CURSOR
JSR RCMOSA GET A LETTER
EXG X,Y RESTORE CURSOR
JSR PR57V PRINT IT
CMPY ,S SEE IF WE'RE DOWN TO SPACES ONLY
BLS TABLE3
LEAX $200,X SPACE OVER
LDY #GODSCR+40 POINT AT SCORE
JSR PRSCOR PRINT OUT A SCORE (FONT IS 7 IN PD,U)
STX XTEMP SAVE X
LDX #GA2
JSR RCMOSA
CMPA #3
BEQ NOINTS
LDX XTEMP
LEAX $500,X MOVE FOR INITIALS
LDA #$5B LEFT PAREN
JSR PR57V
LDY #GODINT
LDB #3
TABL33 EXG X,Y
JSR RCMOSA
EXG X,Y
JSR PR57V
DECB
BNE TABL33
LDA #$5C RIGHT PAREN
JSR PR57V
NOINTS LDU CRPROC
LDA #5 FONT
STA PD,U
LDD #$C03 9 ROWS BY FOUR COLUMNS
STD PD+1,U
LDD #$728 SPACING
STD PD+3,U
LDA #2 FIRST INDEX
STA PD+6,U
LDX #$1488 PLACE TO START
LDY #CMSCOR PLACE OF SCORES
BSR PRJNK
LDA #SCRMES PUT OUT HEADERS ETC.
JSR WRD7V DO IT
MAKP DECAZ
MAKP COLA
MAKP COLC
MAKP COLD
LDU CRPROC
LDA #200
STA PD,U NUMBER OF FRAMES TO FREEZE
TAB888 NAP 3,TABLE6
TABLE6 DEC PD,U
BNE TAB888
LDA #$FF
STA PD,U
TAB777 NAP 4,TAB999
TAB999 LDA PIA3
ANDA #$3 ONLY 2 SWS HERE
ORAA PIA2 ANY PRESSED?
BEQ TABLE7 NONE PRESSED
DEC PD,U 1 LESS COUNT
BNE TAB777
TABLE7 JMP [PD+18,U] RETURN
PRJNK PULS D GET RETURN
LDU CRPROC
STD PD+11,U SAVE RETURN
STX PD+15,U SAVE W,H RETURN STOPS
STX PD+7,U
STY PD+9,U
LDA PD+1,U GET NUMMBER PER COLUMN
STA PD+5,U MAKE THIS NUMBER LEFT IN THIS COMUMN
TOD44 LDA #4 NUMBER OF ENTRIES PER SLEEP
STA PD+17,U
LDX PD+7,U RESTORE POINTERS
LDY PD+9,U
TOD33 BSR CLSET SET THE COLOR FOR THIS LINE
LDB PD+6,U GET INDEX
LDA #INDMES
JSR PWSUB PRINT "WORD" AT PROPER HEIGHT
PSHS X SAVE POINTER
LDB #3 3 CHARS
TOD1 EXG X,Y GET CMOS POINTER IN X
JSR RCMOSA GET THE LETTER
EXG X,Y
JSR PCSUB PRINT THE CHARACTER PROPERLY
DECB
BNE TOD1
PULS X GET THE INITIAL POINTER BACK
LDA PD,U GET HEIGHT OF FONT
LDB #3
MUL
LSRB 1/2
INCB ADD 2 PIXELS
TFR B,A
LDB PD,U CHECK FOR 5
CMPB #5
BNE TABFIX
INCA 1 MORE IN CASE OF STUPID WWW
TABFIX CLRB
LEAX D,X PLACE FOR SCORE
JSR PRSCOR PRINT THE GUYS SCORE
LDA PD+6,U
ADDA #1
DAA
STA PD+6,U
TFR X,D MOVE CURSOR OVER
LDA PD+15,U RESTORE X
ADDB PD+3,U ADD COLUMN SPACING
TFR D,X RETURN AS POINTER
DEC PD+5,U 1 LESS IN CURRENT COLUMN
BEQ TOD22 DONE WITH COLUMN
TOD66 DEC PD+17,U 1 LESS TILL SLEEP
BNE TOD33
STX PD+7,U SAVE POINTERS
STY PD+9,U
NAP 1,TOD44
TOD22 LDD PD+15,U GET CORNER POINTER
ADDA PD+4,U ADD WIDTH SPACING
STA PD+15,U
TFR D,X AND SHOVE IN X
LDA PD+1,U GET NUMBER PER COLUMN
STA PD+5,U NUMBER TO DO
DEC PD+2,U NUMBER OF COLUMNS
BNE TOD66
JMP [PD+11,U] RETURN NOW
* CLSET - Y POINTS AT SCORE-6...IF IT IS EQUAL TO
* EITHER PLAYERS SCORE, AND NOT THE NEXT CMOS SCORE,
* THEN THE COLOR IS CHANGED TO TCOL2, ELSE TCOL1
CLSET PSHS X,Y,D
LEAY 6,Y POINT AT SCORE
LDX #ZP1SCR CHECK PLAYER 1'S SCORE
BSR CKME
BEQ CLS1 IT WAS GOOD
LDB PLRCNT HOW MANY PLAYERS
DECB
BEQ CLS2 NO GOOD
LDX #ZP2SCR
BSR CKME
BNE CLS2 NO GOOD
CLS1 BSR CKNXT SEE IF NEXT MATCHES
BEQ CLS2 IT MATCHES...HOLD OFF
LDA TCOL2 USE NORMAL COLOR
BRA CLS3
CLS2 LDA TCOL1
CLS3 STA TEXCOL
PULS X,Y,D,PC
* CKME BEQ FOR EQUAL
* Y POINTS AT CMOS SCORE
* X POINTS AT RAM SCORE
CKME PSHS Y
EXG X,Y CMOSER USE X
JSR RCMOSA
ANDA #$F
LDB #4
CKME2 CMPA ,Y+ DO WE MATCH
BNE CKME1 NOPE
JSR RCMOSA GET NEXT
DECB
BNE CKME2
CKME1 PULS Y,PC
CKNXT LEAY 1,Y PUSH PAST CHECKSUM
LEAX SCRSIZ,Y X POINTS AT NEXT SCORE
LDB #7 7 BYTES TO CHECK
CKNXT1 LDA ,X+
EORA ,Y+ LOWER GUYS
ANDA #$F
BNE CKBYE NOT EQUAL
DECB
BNE CKNXT1
CKBYE RTS
PRSCOR EXG X,Y
JSR RCMOSA
JSR RCMOSB GET 2 BYTES OF SCORE
EXG X,Y
ANDA #$0F TAKE AWAY CHECK NIBBLE
BNE PR2SC 2 PARTER
TSTB ALL ZERO??
BNE PR2SC
LDA #HIGH3
BRA PR3SC
PR2SC PSHS Y
TFR D,Y
LDA #HIGH1
JSR PWSUB PRINT WORD IN PROPER FONT
PULS Y RESTOE Y
LDA #AUDM2 USE AUDIT TEXT FOR LOW HALF
PR3SC PSHS A SAVE MESSAGE
EXG X,Y
JSR RCMOSD GET THE STUFF
EXG X,Y
PSHS Y SAVE Y AGAIN
TFR D,Y PRINTED STUFF IN Y
LDA 2,S RESTORE MESSAGE NUMBER
BSR PWSUB PRINT IT
PULS Y RESTOE Y
PULS A,PC AND RETURN
PWSUB PSHS U,X,A
LDX #WRD7V
LDA PD,U GET FONT
CMPA #7 BIG??
BEQ PWSUB1
LDX #WRD5V SMALL
PWSUB1 TFR X,U
PULS A,X
JSR ,U
PULS U,PC
PCSUB PSHS U,X,A
LDX #PR57V
LDA PD,U
CMPA #7
BEQ PWSUB1
LDX #PR35V
BRA PWSUB1
FCC ' ROBOTRON: 2084 '
FCC ' COPYRIGHT 1982 WILLIAMS ELECTRONICS INC. '
FCC ' ALL RIGHTS RESERVED '
* HASSLER UPPER LEFT IS $0308
* HASSLER LOWER RIGHT IS $94F4 (BOTH INCLUSIVE)
FRAMER PULS D GET RETURN ADDRESS
LDU CRPROC
STD PD+8,U AND SAVE
LDX #PCRAM
LDD #0
FRAME7 STD ,X++
CMPX #PCRAM+16
BLO FRAME7
*
LDX #$60D TERMINAL POINT
STX PD+16,U
LDA #$11
STA PD+14,U
*
FRAME3 LDX #$3E7D
STX PD+10,U
LDY #$597F
STY PD+12,U
FRAME1 LDA #2
STA PD+15,U SLEEP COUNT
LDX PD+10,U
LDY PD+12,U
LDA PD+14,U
FRAME2 JSR MARQ
CMPX PD+16,U
BEQ FRBYE
LEAX -$102,X
LEAY $102,Y
BSR GETA GET THE A TO USE
DEC PD+15,U
BNE FRAME2
STA PD+14,U
STX PD+10,U
STY PD+12,U
NAP 1,FRAME1 NIGHTY NIGHT
GETA PSHS B
LDB PD+16,U
CMPB #6 WRITING??
BNE GETA1 NOPE...LEAVE THE ZERO
SUBA #$11
BNE GETA1
LDA #$88
GETA1 PULS B,PC
FRBYE LDX PD+16,U CHECK LIMIT
CMPX #$60D
BEQ FRCONT NOT DONE YET
JMP [PD+8,U] RETURN
FRCONT LDX #$E1D THIS IS OTHER LIMIT
STX PD+16,U NEW LIMIT
CLR PD+14,U STORE ZEROS
JMP FRAME3
LOOPP LDX #COLTAB GET FIRST OF COLOR TABLE
LOOP1 LDA ,X+ GET THE NEXT BYTE
BSR OUTCOL CYCLE IT IN
STX PD,U SAVE X
NAP 3,LOOP2
LOOP2 LDX PD,U RESTORE X
CMPX #TABEDD
BLO LOOP1
BRA LOOPP
OUTCOL LDY #PCRAM+1 START AT 1
OUTC1 LDB 1,Y
STB ,Y+
CMPY #PCRAM+8
BLO OUTC1 NOT THERE YET
STA ,Y
RTS
COLA LDY #PCRAM+$A Y = PCRAM LOCATION
LDX #CATAB X = PLACE TO START
COMMM LDD #CATAB D = START OF TABLE
COLENT STD PD+4,U
STY PD+2,U
BRA COLA4
COLA3 LDX PD+4,U
COLA4 STX PD,U
COLA5 LDX PD,U
LDA ,X+ GET NEXT BYTE
BEQ COLA3
STA [PD+2,U]
STX PD,U
NAP 4,COLA5
CATAB FCB $7,$7,$7,$7,$7,$7,$7,$7,$57,$A7,$FF,$FF,$A7,$57,0
CCTAB FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$E4,$D2,$C0,$C0,$C0
FCB $D2,$E4,0
DECAZ LDX #CATAB+7 OUT OF PHASE PLEASE
LDY #PCRAM+9
BRA COMMM
COLC LDX #CCTAB+7
LDY #PCRAM+$C
COLLL LDD #CCTAB
BRA COLENT
COLD LDX #CCTAB
LDY #PCRAM+$D
BRA COLLL
COLTAB FCB $37,$2F,$27,$1F,$17,$47,$47,$87
FCB $87,$C7,$C7,$C6,$C5,$CC,$CB,$CA
FCB $C0,$D0,$98,$38,$33
TABEDD EQU *
UPPER EQU PD
LOWER EQU PD+1
LEFT EQU PD+2
RIGHT EQU PD+3
HFLAV EQU PD+4
LFLAV EQU PD+5
* MARQ - DRAW A LINKY MARQUIS. PASS UPPER LEFT IN X.
* PASS LOWER RIGHT IN Y.
* RANGES ARE INCLUSIVE. LOWER-UPPER MUST BE EVEN (ODD INCLUSIVE)
* A CONTAINS THE HIGH AND LOW FLAVOR COLORS (<OUTER><INNER>)
MARQ PSHS X,Y,D
LDU CRPROC
ANDA #$F0
STA HFLAV,U SAVE FLAVOR COLORS
LDA ,S
ANDA #$0F
STA LFLAV,U
TFR X,D
STA LEFT,U
STB UPPER,U
TFR Y,D
STA RIGHT,U
STB LOWER,U
SUBB UPPER,U LOWER-UPPER ODD???
RORB CHECK
BCC MARQ1 NOPE
DEC LOWER,U NOT THAT LOW...OK?
MARQ1 LDA UPPER,U DO TOP LINE
BSR HHIGH HIGH PART OF TOP HORIZONTAL LINE
INCA
BSR HLOW LOW PART
*
LDA LOWER,U
BSR HHIGH 1 LESS FOR GEN PURP
DECA
BSR HLOW
*
LDA LEFT,U LEFT BYTE
BSR VHIGH HIGH FLAVOR STUFF IN A VERT LINE
BSR VLOW LOW FLAVOR STUFF IN A VERT LINE
*
LDA RIGHT,U
BSR VHIGH
DECA
BSR VLOW
PULS D,X,Y,PC
* VHIGH - PLOT VERTICAL LINE FROM [UPPER TO LOWER]
* CONSISTING OF EVERY OTHER BYTE GETTING THE HIGH NIBBLE COLOR
* A HAS THE X TO USE
VHIGH PSHS D,X
BSR SETUPV SETUP X,B
INCB 1 MORE TO BE INCLUSIVE
LDA HFLAV,U GET HIGH FLAVOR
VHIGH1 STA ,X++ STORE THE BYTE
DECB
BNE VHIGH1
PULS D,X,PC
VLOW PSHS D,X
BSR SETUPV SETUP X,B
LEAX 1,X MOVE X UP 1
LDA LFLAV,U USE LOW FLAVOR
BRA VHIGH1
SETUPV LDB UPPER,U GET UPPER Y
TFR D,X THIS IS PONTER
LDB LOWER,U
SUBB UPPER,U THIS IS GUARANTEED EVEN
LSRB 1/2 PLEASE (EVERY 2 IS PLOTTED)
RTS
* HHIGH - THIS ROUTINE PLOTS HIGH COLOR IN THE HIGH HALF OF
* CONSECUTIVE HORIZONTAL PIXELS GOING FROM
* [LEFT TO RIGHT] AT THE HEIGHT GIVEN IN REGISTER A.
HHIGH PSHS X,D
BSR SETUPH SETUP COUNT IN B, X POINTS AT FIRST BYTE
INCB ADD 1 TO MAKE IT INCLUSIVE
LDA HFLAV,U GET THE DATA BYTE
HHIGH1 STA ,X STORE 1
LEAX $100,X PUSH TO NEXT
DECB 1 LESS
BNE HHIGH1
PULS X,D,PC
* HLOW - THIS ROUTINE PLOTS LOW COLOR IN THE LOW HALF OF
* CONSECUTIVE HORIZONTAL PIXELS GOING FROM
* [LEFT TO RIGHT) AT THE HEIGHT GIVEN IN REGISTER A.
HLOW PSHS X,D
BSR SETUPH
LDA LFLAV,U USE LOW FLAVOR
BRA HHIGH1 AND DO NORMAL PROCESSING ABOVE
SETUPH TFR A,B MOVE Y OVER
LDA LEFT,U GET LEFT X
TFR D,X MAKE POINTER
LDB RIGHT,U
SUBB LEFT,U FIND DIFFERENCE (EXCLUSIVE
RTS AND RETURN
END