Jump to content
IGNORED

7800 Game Development... (Part 3 of 6)


Curt Vendel

Recommended Posts

* SPHINX--SSCROLL.S

 

*COARSE VERTICAL PRECEDES COARSE HORIZONTAL. CHAR MAP GENERATION IS STILL DONE

*ON THE SAME FRAME AS COARSE VERTICAL

 

 

ZERODEF

 

RSEG CODED

 

ZSTHPOS EQU $5A ;STARTING X POS OF CHAR MAP

ZPALWID EQU $4B ;CHARACTER MAP LENGTH 21 BYTES

 

* SUPER DUPER SCROLLING ROUTINE

 

SCROLL

LDA SCROLLS

BEQ SCREND

STA TEMP8

DEC TEMP8

SCROLLP

JSR VSCROLL ;DO IT

JSR HSCROLL ;DOIT

NOSCROLL

INC SCRLLCNT

SCRNXT DEC TEMP8

BPL SCROLLP

SCREND RTS

 

 

* VSCROLL

 

 

VSCROLL

 

INC ZONEOFF ;INC ZONEOFF AND CHECK

BNE NOT0

LDA #$4F ;RESTORE TOP DUMMY ZONES

STA DLLIST ;HIGH AND LOW BYTES SHOULD BE SAME

LDA #$48

STA DLLIST+3

 

LDA #$C0 ;ONE LINE OF ZONE 0

STA DLLIST+6 ;STORE IT

LDA #H(DL0)

STA DLLIST+7

LDA #L(DL0)

STA DLLIST+8

 

LDA #$4F ;FULL ZONE 1 WITH NO DLI

STA DLLIST+9

 

NOT0

LDA ZONEOFF ;CHECK FOR COARSE SCROLL

CMP #15

BEQ COARSEV

 

ORA #$C0 ;ZONEOFF IS HEIGHT OF ZONE0

STA DLLIST+6 ;OFFSET

 

LDA ZONEOFF ;CALCULATE ZONE 11 STUFF FROM ZONEOFF

CLC

ADC #H(CHARS+$100)

STA D11CBASE ;CHARBASE OF ZONE 11

LDA #14

SEC

SBC ZONEOFF

ORA #$C0

STA DLLIST+39

CMP #$C0

BNE MORETH1

;HERE FOR ZONE HEIGHT OF 1

LDA #L(DLZ11A) ;SPECIAL DLI FOR ZONE HEIGHT OF 1

STA DLZDEST

LDA #H(DLZ11A)

STA DLZDEST+1

LDA DLLIST+42

AND #$7F

STA DLLIST+42

RTS

 

MORETH1

LDA #L(DLIZ11) ;REGULAR DLI FOR ZONE 11

STA DLZDEST

LDA #H(DLIZ11)

STA DLZDEST+1

 

LDA DLLIST+42

ORA #$80

STA DLLIST+42

 

RTS

 

COARSEV LDY #$FF ;COARSE V SCROLL

STY ZONEOFF

 

 

INY

STY KPTR0

STY KPTR1

 

LDA #$47 ;CHANGE TOP ZONE TO EIGHT OF BLANK

STA DLLIST

LDA #$48 ;ANOTHER ZONE OF 9 BLANK LINES

STA DLLIST+3

 

LDA #$47 ;DLI TO SET UP PROPER COLOR

STA DLLIST+6 ;MAKE THIRD ZONE 8 OF BLANK

LDA #H(NULHDR) ;SET UP ITS BLANK HEADER

STA DLLIST+7

LDA #L(NULHDR)

STA DLLIST+8

 

LDA #$CF ;ZONE 1 GETS 16 LINES THIS TIME

STA DLLIST+9

 

LDX #11 ;SHUFFLE CHAR MAPS

VSCRLP LDA HIBYE,X

STA KPTR1+1

LDA HIBYE-1,X

STA KPTR0+1

 

LDY #4

LDA (KPTR0),Y ;HPOS

STA (KPTR1),Y

DEY

DEY ;SKIP PALWIDTH

LDA (KPTR0),Y ;HIGH BYTE CHAR MAP

STA (KPTR1),Y

DEY

DEY ;SKIP W1

LDA (KPTR0),Y ;LOW BYTE CHAR MAP

STA (KPTR1),Y

DEX

BPL VSCRLP

 

LDX BAND ;GET NEXT BAND

DEX

BPL NEXBAND

LDY NEWBLK ;GET NEW BLOCK IF NEEDED

STY BLOCK

INC NBFLAG

LDX BANDTBL,Y ;6 IS MAXIMUM BAND NUMBER

NEXBAND STX BAND

 

LDY BLOCK ;GET NEW BLOCK NUMBER

 

LDA MSKLFTLO,Y ;STUFF POINTERS TO LOAD NEW MASK

STA KTEMP0

LDA MSKLFTHI,Y

STA KTEMP1 ;(KTEMP0) POINTS TO MASKL TABLE FOR BLK

LDA MSKMIDLO,Y

STA KPTR0 ;(KPTR0) POINTS TO MASKM TABLE FOR BLK

LDA MSKMIDHI,Y

STA KPTR0+1

LDA MSKRITLO,Y

STA KTEMP2 ;(KTEMP2) POINTS TO MASKR TABLE FOR BLK

LDA MSKRITHI,Y

STA KTEMP3

 

LDA BLKTBLLO,Y ;USE BLOCK TABLE AND TIMES33 TABLE TO

LDX STUFFDEX ;GET POINTER TO CURRENT BAND AND MOVE

STA PTRTBLLO,X ;POINTER TABLES USED FOR LOOKAHEAD

LDA BLKTBLHI,Y

STA PTRTBLHI,X

 

LDY BAND

 

LDA TIMES33,Y

CLC

ADC PTRTBLLO,X ;add to lo byte

STA PTRTBLLO,X

 

LDA PTRTBLHI,X

ADC #0

STA PTRTBLHI,X

 

LDA (KTEMP0),Y ;USE POINTERS TO STUFF MASK TABLE VALUE

STA LEFTMASK,X ;INTO LOCATIONS CORRESPONDING TO CHAR

LDA (KPTR0),Y

STA MIDMASK,X

LDA (KTEMP2),Y ;MAPS

STA RIGTMASK,X

 

INX

TXA

AND #$03

STA STUFFDEX

;THIS IS ADDRESS OF CHAR MAP IN ROM

;NOW WE HAVE TO COPY INTO RAM

 

LDX BUFDEX

LDA BUFFERLO,X

STA KTEMP2

 

LDA BUFFERHI,X

STA KTEMP3

 

DEX

BPL OLDBUF

LDX #11

 

OLDBUF STX BUFDEX

 

LDY LOADFDEX ;COPY POINTER OF CHAR MAP FROM POINTER

LDA PTRTBLLO,Y ;BUFFER TABLE INTO FROM POINTER

STA KTEMP0

LDA PTRTBLHI,Y

STA KTEMP1

INY

TYA

AND #$03

STA LOADFDEX

 

LDY #32

COPYLOP LDA (KTEMP0),Y ;THIS COPIES CHAR MAP INTO RAM

STA (KTEMP2),Y

DEY

BPL COPYLOP

 

LDA #ZSTHPOS ;HEADER FOR NEW CHAR MAP

STA DL0+4

LDA #ZPALWID ;PALLETTE WIDTH

STA DL0+3

LDA KTEMP3 ;HIGH BYTE OF CHAR MAP

STA DL0+2

LDA #$60 ;W1

STA DL0+1

LDA KTEMP2 ;LOW BYTE OF CHAR MAP

STA DL0

 

LDA #H(CHARS)

STA D11CBASE ;CBASE OF ZONE 11

LDA #$CF

STA DLLIST+39

 

CMP #$C0

BNE MORETH1A

;HERE FOR ZONE HEIGHT OF 1

LDA #L(DLZ11A) ;ISN'T THIS THE SAME AS ABOVE

STA DLZDEST

LDA #H(DLZ11A)

STA DLZDEST+1

LDA DLLIST+42

AND #$7F

STA DLLIST+42

RTS

 

MORETH1A

LDA #L(DLIZ11) ;AND ISN'T THIS SIMILAR TO ABOVE

STA DLZDEST

LDA #H(DLIZ11)

STA DLZDEST+1

 

LDA DLLIST+42

ORA #$80

STA DLLIST+42

 

RTS

 

TIMES33 DB 0*33,1*33,2*33,3*33,4*33,5*33,6*33

 

BUFFERLO DB L(ZBUFF0),L(ZBUFF1),L(ZBUFF2),L(ZBUFF3),L(ZBUFF4),L(ZBUFF5)

DB L(ZBUFF6),L(ZBUFF7),L(ZBUFF8),L(ZBUFF9),L(ZBUFFA),L(ZBUFFB)

BUFFERHI DB H(ZBUFF0),H(ZBUFF1),H(ZBUFF2),H(ZBUFF3),H(ZBUFF4),H(ZBUFF5)

DB H(ZBUFF6),H(ZBUFF7),H(ZBUFF8),H(ZBUFF9),H(ZBUFFA),H(ZBUFFB)

 

HIBYE DB H(DL0),H(DL1),H(DL2),H(DL3),H(DL4),H(DL5),H(DL6),H(DL7)

DB H(DL8),H(DL9),H(DL10),H(DL11)

 

BANDTBL DB 6,6,3,2,3,2,3,2,6,3,2,3,2,6

 

* HSCROLL

HSCROLL

 

 

DEC DL0+4 ;DECREMENT HORIZONTAL POSITIONS

DEC DL1+4

DEC DL2+4

DEC DL3+4

DEC DL4+4

DEC DL5+4

 

INC JERKOFF ;INCREMENT HOR SCROLL COUNTER

LDA JERKOFF

CMP #7

BEQ COARSEH

 

DEC DL6+4 ;IF APPROPRIATE, DEC REST OF X POS'S

DEC DL7+4

DEC DL8+4

DEC DL9+4

DEC DL10+4

DEC DL11+4

 

RTS

 

COARSEH LDA #$FF ;COARSE H SCROLL

STA JERKOFF

LDA #0 ;ZERO OUT H POS'S

STA DL6+4

STA DL7+4

STA DL8+4

STA DL9+4

STA DL10+4

STA DL11+4

 

INC DL6 ;INC START OF CHAR MAP

INC DL7

INC DL8

INC DL9

INC DL10

INC DL11

 

RTS

 

 

BLKTBLLO DB L(BLOCK0),L(BLOCK1),L(BLOCK2),L(BLOCK3),L(BLOCK4),L(BLOCK5)

DB L(BLOCK6),L(BLOCK7),L(BLOCK8),L(BLOCK9),L(BLOCKA),L(BLOCKB)

DB L(BLOCKC),L(BLOCKD)

BLKTBLHI DB H(BLOCK0),H(BLOCK1),H(BLOCK2),H(BLOCK3),H(BLOCK4),H(BLOCK5)

DB H(BLOCK6),H(BLOCK7),H(BLOCK8),H(BLOCK9),H(BLOCKA),H(BLOCKB)

DB H(BLOCKC),H(BLOCKD)

 

MSKLFTLO DB L(MASK0L),L(MASK1L),L(MASK2L),L(MASK3L),L(MASK4L),L(MASK5L)

DB L(MASK6L),L(MASK7L),L(MASK8L),L(MASK9L),L(MASKAL),L(MASKBL)

DB L(MASKCL),L(MASKDL)

 

MSKLFTHI DB H(MASK0L),H(MASK1L),H(MASK2L),H(MASK3L),H(MASK4L),H(MASK5L)

DB H(MASK6L),H(MASK7L),H(MASK8L),H(MASK9L),H(MASKAL),H(MASKBL)

DB H(MASKCL),H(MASKDL)

 

MSKMIDLO DB L(MASK0M),L(MASK1M),L(MASK2M),L(MASK3M),L(MASK4M),L(MASK5M)

DB L(MASK6M),L(MASK7M),L(MASK8M),L(MASK9M),L(MASKAM),L(MASKBM)

DB L(MASKCM),L(MASKDM)

 

MSKMIDHI DB H(MASK0M),H(MASK1M),H(MASK2M),H(MASK3M),H(MASK4M),H(MASK5M)

DB H(MASK6M),H(MASK7M),H(MASK8M),H(MASK9M),H(MASKAM),H(MASKBM)

DB H(MASKCM),H(MASKDM)

 

MSKRITLO DB L(MASK0R),L(MASK1R),L(MASK2R),L(MASK3R),L(MASK4R),L(MASK5R)

DB L(MASK6R),L(MASK7R),L(MASK8R),L(MASK9R),L(MASKAR),L(MASKBR)

DB L(MASKCR),L(MASKDR)

 

MSKRITHI DB H(MASK0R),H(MASK1R),H(MASK2R),H(MASK3R),H(MASK4R),H(MASK5R)

DB H(MASK6R),H(MASK7R),H(MASK8R),H(MASK9R),H(MASKAR),H(MASKBR)

DB H(MASKCR),H(MASKDR)

 

 

BLOCK0

Z0BAND0 DB 54,56,58,24,26,24,24,24,28,24,36,24,24,24,112,212,184

DB 184,184,184,184,184,184,184,194,150,82,24,40,42,24,24,28

Z0BAND1 DB 54,56,58,24,24,24,24,24,40,42,40,38,38,24,84,136,212,184

DB 184,184,184,184,184,184,184,184,196,24,24,24,26,38,24

Z0BAND2 DB 54,56,58,24,24,26,24,24,40,24,24,24,24,28,24,24,208,184,184

DB 184,184,184,184,184,184,184,184,184,110,24,40,24,24

Z0BAND3 DB 54,56,58,24,40,24,24,84,136,190,76,24,24,24,24,24,24,24,74,114

DB 176,188,184,184,184,184,184,184,184,184,110,24,24

Z0BAND4 DB 54,56,58,24,24,24,24,28,96,198,150,82,24,24,26,60,62,64,24,24

DB 24,24,24,74,114,176,188,184,184,184,184,184,110

Z0BAND5 DB 54,56,58,24,24,40,42,38,24,24,24,40,24,24,30,24,24,24,66,66

DB 62,64,24,26,24,24,24,24,208,184,184,184,184

Z0BAND6 DB 54,56,58,24,24,24,24,24,40,42,24,24,24,24,36,24,24,24,24,24

DB 24,24,66,70,24,24,24,42,40,112,212,184,184

 

MASK0L DB $FF

DB $FF

DB $FF

DB $FE

DB $FF

DB $FF

DB $FF

 

MASK0M DB $FC

DB $FC

DB $FF

DB $1F

DB $0F

DB $FF

DB $FF

 

MASK0R DB $00,$00,$00,$C0,$FF,$FF,$FF

 

 

BLOCK1

Z1BAND0 DB 54,56,58,30,24,28,24,26,24,24,42,90,92,142,144,212,184

DB 184,184,184,184,184,184,194,146,148,82,28,24,42,40,38,24

Z1BAND1 DB 54,56,58,24,38,90,92,80,80,142,144,186,186,210,204,188

DB 184,184,184,184,184,184,184,194,150,82,24,36,24,40,40,42,38

Z1BAND2 DB 54,56,58,24,28,42,130,212,184,184,184,184,184,194,150,82

DB 24,118,188,184,184,194,150,128,188,196,24,26,38,40,24,28,24

Z1BAND3 DB 54,56,58,24,28,24,24,112,212,184,184,184,194,150,86,88

DB 24,26,42,112,212,194,150,82,42,24,208,110,28,24,24,26,30

Z1BAND4 DB 54,56,58,24,24,42,24,26,38,208,184,184,194,150,82,24

DB 26,42,90,92,136,210,150,82,30,24,26,24,208,110,34,24,24

Z1BAND5 DB 54,56,58,24,24,30,24,24,24,26,24,208,184,184,116,24

DB 42,90,92,136,212,184,184,196,30,24,24,24,24,26,118,110,42

Z1BAND6 DB 54,56,58,24,26,42,24,28,42,40,24,24,28,208,184,184

DB 206,186,186,212,184,184,184,184,194,120,24,26,24,26,24,28,42

 

MASK1L DB $FF

DB $F8

DB $FC

DB $FE

DB $FF

DB $FF

DB $FF

 

MASK1M DB $E0

DB $00

DB $00

DB $00

DB $81

DB $E1

DB $F8

 

MASK1R DB $00

DB $00

DB $80

DB $E0

DB $C0

DB $80

DB $00

 

 

BLOCK2

Z2BAND0 DB 54,56,58,24,26,24,24,24,24,90,92,80,80,142,144,184,184

DB 184,184,184,184,184,184,184,184,150,82,28,24,42,28,26,24

Z2BAND1 DB 54,56,58,24,90,92,80,80,142,144,212,184,184,184,184,184,184

DB 184,184,184,184,184,184,184,194,150,82,24,36,24,26,24,40

Z2BAND2 DB 54,56,58,28,102,104,160,114,176,204,146,148,138,174,184,184

DB 184,184,184,184,184,184,184,184,194,150,82,24,40,42,26,24,34

Z2BAND3 DB 54,56,58,24,98,100,88,24,40,42,24,34,24,84,136,212,184

DB 184,184,184,184,184,184,184,194,150,82,24,28,42,40,42,24

 

MASK2L DB $FF

DB $F0

DB $F0

DB $F1

 

MASK2M DB $80

DB $00

DB $00

DB $F8

 

MASK2R DB $00,$00,$00,$00

 

 

BLOCK3

Z3BAND0 DB 54,56,58,24,26,24,66,68,62,64,24,24,84,80,140,184

DB 184,184,184,184,184,184,194,204,150,138,82,24,26,24,24,24,26

Z3BAND1 DB 54,56,58,24,26,24,28,24,40,24,66,70,24,112,212,184

DB 184,184,184,184,184,184,184,194,122,24,34,24,24,24,24,28,24

Z3BAND2 DB 54,56,58,24,28,24,24,24,24,42,38,40,24,84,136,212

DB 184,184,184,184,184,184,184,184,194,122,24,24,24,26,24,24,24

 

MASK3L DB $FF

DB $FF

DB $FF

 

MASK3M DB $F0

DB $F8

DB $F8

 

MASK3R DB $00,$00,$00

 

 

BLOCK4

Z4BAND0 DB 54,56,58,24,24,24,40,24,24,90,92,80,80,142,144,184

DB 184,184,184,194,150,174,184,184,184,150,82,24,26,42,40,42,24

Z4BAND1 DB 54,56,58,24,24,24,24,24,24,112,186,212,184,184,184,184

DB 184,184,194,150,86,88,112,212,184,194,122,24,26,24,24,24,40

Z4BAND2 DB 54,56,58,24,24,24,26,24,24,24,24,208,184,184,184,184

DB 184,184,184,184,116,42,36,112,212,184,194,122,24,60,62,64,24

Z4BAND3 DB 54,56,58,60,62,64,26,30,24,26,28,24,24,208,184,184

DB 184,184,184,184,184,184,206,186,190,198,146,148,82,24,24,24,66

 

MASK4L DB $FF

DB $FF

DB $FF

DB $FF

 

MASK4M DB $80

DB $80

DB $E0

DB $F8

 

MASK4R DB $00,$00,$06,$00

 

 

BLOCK5

Z5BAND0 DB 54,56,58,24,26,40,42,24,24,26,24,28,84,80,140,212

DB 184,184,184,184,184,184,184,184,184,194,122,24,26,24,30,24,24

Z5BAND1 DB 54,56,58,24,24,24,24,24,38,30,24,24,26,84,202,184

DB 184,184,184,184,184,184,184,194,146,148,86,88,30,24,24,24,24

Z5BAND2 DB 54,56,58,24,26,24,34,24,24,24,40,24,24,84,140,212

DB 184,184,184,184,184,184,184,184,194,122,24,26,24,38,40,42,40

 

MASK5L DB $FF

DB $FF

DB $FF

 

MASK5M DB $F0

DB $F8

DB $F8

 

MASK5R DB $00,$00,$00

 

 

BLOCK6

Z6BAND0 DB 54,56,58,24,28,40,38,24,24,30,24,26,30,36,24,24

DB 26,24,24,24,32,28,24,40,24,24,24,24,90,92,136,212,184

Z6BAND1 DB 54,56,24,60,62,64,24,26,24,40,38,28,24,24,24,90

DB 92,80,80,80,80,80,80,142,144,186,186,186,186,186,212,184,184

Z6BAND2 DB 54,56,58,24,42,26,66,68,68,62,64,24,40,90,92,142

DB 144,212,184,184,184,184,184,184,184,184,184,184,184,184,194

DB 146,148

Z6BAND3 DB 54,56,58,24,42,40,24,26,28,66,72,72,70,84,136,212

DB 184,184,184,184,184,184,184,184,194,146,148,138,138,138,138,86

DB 88

 

MASK6L DB $FF

DB $FF

DB $FF

DB $FF

 

MASK6M DB $FF

DB $FE

DB $F8

DB $F8

 

MASK6R DB $FF,$00,$00,$00

 

 

BLOCK7

Z7BAND0 DB 54,56,58,24,26,40,24,26,24,28,84,80,80,124,126,24

DB 26,24,24,36,24,26,24,40,42,24,90,92,80,142,144,212,184

Z7BAND1 DB 54,56,24,44,46,40,24,24,38,24,26,40,208,184,184,184

DB 206,180,182,124,126,24,24,90,92,80,142,144,212,194,146,148

DB 138

Z7BAND2 DB 54,56,58,24,24,48,50,52,24,24,24,40,24,112,212,184

DB 184,184,184,184,184,184,206,186,190,198,146,148,138,138,86,88

DB 24

 

MASK7L DB $FF

DB $FF

DB $FF

 

MASK7M DB $C1

DB $F0

DB $F8

 

MASK7R DB $FF,$06,$00

 

 

BLOCK8

Z8BAND0 DB 54,56,58,24,24,26,24,28,24,30,24,24,30,24,26,24

DB 24,24,26,24,40,24,24,26,24,24,28,24,84,142,144,212,184

Z8BAND1 DB 54,56,58,84,136,186,186,190,76,24,24,24,26,24,24,28,24

DB 24,24,24,24,28,24,26,24,84,142,144,186,186,212,184,184

Z8BAND2 DB 54,56,84,142,144,212,194,150,86,88,24,26,24,30,24,24,24

DB 24,24,24,24,42,24,24,24,24,130,212,184,184,184,184,184

Z8BAND3 DB 54,56,58,96,198,204,146,148,82,24,42,24,24,24,24,24,60

DB 62,64,24,24,32,24,24,24,38,24,26,208,184,184,184,184

Z8BAND4 DB 54,56,58,24,24,24,34,24,24,38,24,24,24,40,24,24,40

DB 24,24,66,68,62,64,24,24,24,26,24,24,84,202,184,184

Z8BAND5 DB 54,56,58,24,24,26,24,24,26,40,24,24,32,24,24,24,38

DB 24,24,34,24,24,24,66,68,62,64,24,24,24,130,212,184

Z8BAND6 DB 54,56,58,24,24,36,24,24,40,24,24,30,24,24,24,24,24

DB 24,24,26,24,24,24,26,24,24,24,66,70,24,24,84,202

 

MASK8L DB $FF

DB $E0

DB $C0

DB $E0

DB $FF

DB $FF

DB $FF

 

MASK8M DB $FF

DB $7F

DB $3F

DB $7F

DB $FF

DB $FF

DB $FF

 

MASK8R DB $FF,$FF,$FF,$FF,$FF,$FF,$FF

 

 

BLOCK9

Z9BAND0 DB 54,56,58,40,24,24,24,26,24,24,24,26,24,24,40,24

DB 24,24,26,24,24,26,24,24,24,24,24,30,24,84,136,212,184

Z9BAND1 DB 54,56,58,26,24,24,24,36,24,24,24,28,24,24,36,24,24,24,42

DB 24,24,24,24,24,28,24,26,24,28,84,136,212,184

Z9BAND2 DB 54,56,58,24,24,24,24,24,42,24,24,24,24,26,24,24,24,24,36,24

DB 24,26,24,24,24,24,24,24,24,84,136,212,184

Z9BAND3 DB 54,56,58,24,26,24,24,28,24,24,24,40,24,24,24,24,26,24,24,24

DB 24,24,26,28,24,24,24,24,30,94,152,212,184

 

MASK9L DB $FF

DB $FF

DB $FF

DB $FF

 

MASK9M DB $FF,$FF,$FF,$FF

 

MASK9R DB $FF,$FF,$FF,$FF

 

 

BLOCKA

ZABAND0 DB 54,56,58,24,24,24,26,84,142,144,186,134,60,62,64,24,40,84

DB 136,190,76,24,26,24,24,26,24,24,24,24,130,212,184

ZABAND1 DB 54,56,58,24,44,46,24,24,130,212,194,204,150,82,24,66,68,62

DB 64,74,138,82,24,26,24,24,24,24,24,84,142,144,212

ZABAND2 DB 54,56,58,24,24,24,48,50,52,24,74,86,88,24,24,26,24,28

DB 30,66,70,24,24,26,24,24,24,28,24,84,136,212,184

 

MASKAL DB $FE

DB $FF

DB $FF

 

MASKAM DB $0F,$03,$C7

 

MASKAR DB $87,$E3,$FF

 

 

BLOCKB

ZBBAND0 DB 54,56,58,26,24,24,28,24,24,38,24,24,24,26,40,30,24,24,24,24

DB 24,24,24,36,24,30,24,24,90,92,136,212,184

ZBBAND1 DB 54,56,58,24,26,24,24,24,38,24,24,90,92,162,200,200,168,78,24

DB 24,30,24,24,30,90,92,142,144,186,186,212,184,184

ZBBAND2 DB 54,56,58,24,24,26,24,24,24,26,24,102,104,160,86,88,24,24,74

DB 170,166,24,24,84,142,144,198,204,146,148,174,184,184

ZBBAND3 DB 54,56,58,40,24,24,38,24,24,24,24,98,100,88,24,24,28,24,36

DB 24,24,24,164,172,106,108,86,88,24,84,142,144,212

 

MASKBL DB $FF

DB $FF

DB $FF

DB $FF

 

MASKBM DB $FF,$E0,$E0,$E3

 

MASKBR DB $FF,$3F,$C6,$FC

 

 

BLOCKC

ZCBAND0 DB 54,56,58,24,24,24,24,26,24,40,24,28,24,34,24,24,24,24,24

DB 30,26,24,130,132,78,24,40,42,24,84,136,212,184

ZCBAND1 DB 54,56,58,24,24,28,24,26,24,24,40,24,24,24,24,24,40,24,24

DB 40,26,24,80,154,198,204,158,24,26,94,152,212,184

ZCBAND2 DB 54,56,58,24,24,26,24,24,24,24,30,24,24,24,24,26,24,42,24

DB 42,24,24,24,24,74,82,24,42,38,84,136,212,184

 

MASKCL DB $FF

DB $FF

DB $FF

 

MASKCM DB $FF,$FF,$FF

 

MASKCR DB $FC,$FC,$FF

 

 

BLOCKD

ZDBAND0 DB 54,56,58,24,24,24,40,24,24,26,24,28,24,24,28,24,26,24,24

DB 24,24,90,92,78,24,26,24,46,92,142,144,212,184

ZDBAND1 DB 54,56,58,24,26,24,24,24,24,42,42,24,24,30,24,26,24,24,24

DB 90,92,142,144,212,184,206,186,186,190,146,148,114,112

ZDBAND2 DB 54,56,58,90,92,142,144,186,186,190,76,24,40,38,84,80,80,80

DB 80,142,144,212,184,184,184,194,146,148,138,138,82,26,24

ZDBAND3 DB 54,56,58,24,130,212,184,194,146,148,86,88,24,26,24,130,212

DB 184,184,184,184,184,184,184,184,194,150,82,24,26,24,28,24

ZDBAND4 DB 54,56,58,24,24,26,156,204,150,82,24,24,28,24,24,84,136,212

DB 184,184,184,184,184,184,184,194,150,82,24,28,24,24,30

ZDBAND5 DB 54,56,58,24,26,24,36,30,24,24,30,24,24,24,24,24,96,198,188

DB 184,184,194,204,204,204,146,148,82,24,24,40,42,34

ZDBAND6 DB 54,56,58,24,40,24,24,24,28,38,24,24,42,40,26,32,24,24,26

DB 24,74,138,138,82,24,26,24,36,24,84,142,144,186

 

MASKDL DB $FF

DB $FF

DB $E0

DB $F0

DB $FC

DB $FF

DB $FF

 

MASKDM DB $FF,$FF,$1C,$0E,$3E,$FF,$FF

 

MASKDR DB $F9,$E0,$00,$00,$00,$00,$F0

 

END

* SPHINX--SSUBRS.S

* IF YOU DON'T KNOW WHERE TO PUT SOMETHING, PUT IT IN THIS MODULE

 

ZERODEF

 

RSEG CODEF

 

*PROGRAMMERS BEWARE: THIS CODE IS OLD AND VERY UGLY! TAMPER AT YOUR OWN RISK

*

* ADDSCORE

*ASSUMES LOW DIGIT IN TENS, MIDDLE DIGIT IN HUNDS AND HIGH DIGIT IN HUNTHOUS

*ASSUMES PLAYER HAS 0 FOR PLAYER 0 AND A 1 FOR PLAYER 1. RESETS ALL VALUES TO 0

*PRESERVES A,X & Y REGISTERS

 

ADDSCORE BIT AUTOPLAY ;IF AUTOPLAY THEN PUNT

BMI ZPUNTSCR

SED

PHA ;ISN'T IT A WASTE FOR THIS TO SAVE A

TXA ;AND THE REST OF THEM

PHA

TYA

PHA

LDX PLAYER

LDY PLAYER ;VERY NON-OPTIMAL

BEQ PLAYER1

LDX #1

LDY #PL2SCORE-PL1SCORE

PLAYER1 LDA PL1SCORE+3,Y

CLC

ADC TENS

STA PL1SCORE+3,Y

LDA PL1SCORE+2,Y

ADC HUNDS

STA PL1SCORE+2,Y

BCC NOINCLIV

 

INC PL1LIVES,X

 

PHP ;SAVE CARRY AND DECIMAL

CLD ;CLEAR DECIMAL FOR TUNIN

LDA #XLPOWER

JSR TUNIN

PLP ;RESTORE CARRY AND DECIMAL

 

NOINCLIV

LDA PL1SCORE+1,Y

ADC HUNTHOUS

STA PL1SCORE+1,Y

CLD

LDA #0

STA TENS

STA HUNDS

STA HUNTHOUS

PLA

TAY

PLA

TAX

PLA

ZPUNTSCR RTS

 

 

; LDLIVES LOADS UP THE EXTRA LIVES DISPLAY

 

LDLIVES ;GOOD CANDIDATE FOR CRUNCHING

LDX #9 ;MORE ROM INTENSIVE THAN NEED BE

LDY PL1LIVES

LDA PLAYER

BEQ USELESS

INY

USELESS DEY

BEQ DIETCOKE

BMI DIETCOKE

LDA #L(XTRA)

CPY #7 ;6 IS MAXIMUM

BCC PEPPER

LDY #6 ;SEVEN LIVES MAX TO BE ON SCREEN

PEPPER STA PL1LVMAP,X

DEX

DEY

BNE PEPPER

CPX #$FF

BEQ DEW

DIETCOKE LDA #L(BLANKCHR) ;FILLS IN BLANKS

STA PL1LVMAP,X

DEX

BPL DIETCOKE

 

DEW

LDY #0

LDX PL2LIVES ;Y IS ZERO

LDA PLAYER

BNE USELESS2

INX

USELESS2 DEX

BEQ BARLHEAD

BMI BARLHEAD

LDA #L(XTRA)

CPX #7

BCC MELOYELO

LDX #6

MELOYELO STA PL2LVMAP,Y

INY

DEX

BNE MELOYELO

CPY #6

BEQ WITEROCK

BARLHEAD LDA #L(BLANKCHR)

STA PL2LVMAP,Y

INY

CPY #6

BNE BARLHEAD

 

WITEROCK RTS

 

 

;

; LDSCORE LOADS UP SCORE DISPLAY FOR SCORE BYTES

 

LDSCORE LDX #5 ;SIX DIGITS

LDY #3 ;FOUR BYTES

PEPSI LDA PL1SCORE,Y ;GET LOW TWO DIGITS OF PL0'S SCORE

PHA ;SAVE AWAY

AND #$0F ;GET BOTTOM NIBBLE

; CLC ;MULTIPLY BY TWO TO GET NUM IN CHAR MAP

; ADC #L(NUMBERS) ;MAY BE UNNECESSARY

STA TEMP0,X ;STORE AWAY FOR LATER

DEX

PLA ;GET BACK LOW BYTE AND GET NEXT DIGIT

AND #$F0

LSR A

LSR A

LSR A

LSR A

; CLC

; ADC #L(NUMBERS)

STA TEMP0,X

DEX

DEY

BPL PEPSI ;DO UNTIL ALL 6 DIGITS (3 BYTES) ARE

;LOADED

LDA #$69 ;SET OVERFLOW

ADC #$69

LDX #0 ;THIS ELIMINATES LEADING ZEROES

LDA #L(BLANKCHR)

SPRITE LDY TEMP0,X

BVC NOMORE0

CPY #L(NUMBERS)

BNE NOMORE0

STA PL1MAP+4,X

JMP NEXEX

 

NOMORE0 TYA

STA PL1MAP+4,X

CLV

 

NEXEX INX

CPX #6

BNE SPRITE

 

TYA

BNE NOSTUF0

 

LDA #0 ;IF ZERO IS LEAST SIGNIFICANT DIGIT

STA PL1MAP+9 ;THEN DISPLAY IT

 

NOSTUF0 LDX #0 ;PLAYER 1 NOW

LDY #1 ;LEFT JUSTIFY AND BLANK LEADING ZEROES

ZJM3 LDA PL2SCORE,Y

PHA

AND #$F0

BNE REAL

PLA

AND #$0F

BNE REAL2

INY

CPY #4

BNE ZJM3

LDA #L(NUMBERS) ;ALL MUST BE ZERO

STA PL2MAP

RTS

 

COKE LDA PL2SCORE,Y ;MUST BE NONZERO NUMBER BY NOW

PHA ;IN HIGH DIGIT OF BYTE

AND #$F0

REAL LSR A

LSR A

LSR A

LSR A

; CLC ;YEA ITS CLEAR

; ADC #L(NUMBERS)

STA PL2MAP,X

INX

PLA

REAL2 AND #$0F ;MUST BE NONZERO NUMBER BY NOW IN

; ASL A ;LOW DIGIT

; CLC

; ADC #L(NUMBERS)

STA PL2MAP,X

INX

CRUSH INY

CPY #4

BNE COKE

TAB CPX #10

BEQ ARECEE

LDA #L(BLANKCHR)

STA PL2MAP,X

INX

BPL TAB ;ALWAYS POSITIVE

 

ARECEE RTS

 

 

******************************************

* SPHINX--SLOADER.S *

******************************************

LDDONE LDA #0 ;STORE ZEROES AT END OF DLISTS

TAX ;TRADE ROM FOR TIME

LDY #1 ;TWO ZEROS EACH

STA (ZNDLPOS,X)

STA (ZNDLPOS),Y

STA (ZNDLPOS+2,X)

STA (ZNDLPOS+2),Y

STA (ZNDLPOS+4,X)

STA (ZNDLPOS+4),Y

STA (ZNDLPOS+6,X)

STA (ZNDLPOS+6),Y

STA (ZNDLPOS+8,X)

STA (ZNDLPOS+8),Y

STA (ZNDLPOS+10,X)

STA (ZNDLPOS+10),Y

STA (ZNDLPOS+12,X)

STA (ZNDLPOS+12),Y

STA (ZNDLPOS+14,X)

STA (ZNDLPOS+14),Y

STA (ZNDLPOS+16,X)

STA (ZNDLPOS+16),Y

STA (ZNDLPOS+18,X)

STA (ZNDLPOS+18),Y

STA (ZNDLPOS+20,X)

STA (ZNDLPOS+20),Y

STA (ZNDLPOS+22,X)

STA (ZNDLPOS+22),Y

 

LDA #5 ;THIS SHOULD ADJUST HIGH BYTES OF

STA ZNDLPOS+22 ;HEADERS IN LAST ZONE TO MAKE UP FOR

LDA ZONEOFF ;SCROLLING

;THE 5 IN ZNDLPOS IS FOR CHAR MAP

CLC

ADC #1

STA KTEMP10 ;THIS NUMBER REFLECTS ZONEOFF'S EFFECT

LDY #2 ;Y IS 2 SO THAT IT FALLS INTO LOOP

;CORRECTLY

HACKKKK DEY ;Y = 1 FOR PALWIDTH

LDA (ZNDLPOS+22),Y ;IF PW IS ZERO, END OF DISPLAY LIST

BEQ THATSALL

INY ;LOOK AT HIGH BYTE

LDA (ZNDLPOS+22),Y

CLC

ADC KTEMP10 ;ADD THE MAGIC CONSTANT

STA (ZNDLPOS+22),Y

LDA ZNDLPOS+22 ;ADD FOUR TO ZNDLPOS TO GET NEXT HEADER

CLC

ADC #4

STA ZNDLPOS+22

BNE HACKKKK ;JMP

 

THATSALL

LDA #0 ;THIS MEANS WE MADE IT THROUGH LOADER

STA FUCKFLAG

NOLODE RTS

 

LOADER

LDA #$80 ;THIS MEANS WE STARTED LOADER

STA FUCKFLAG

 

LDA #5 ;SET LOW BYTE OF DL POINTERS TO 5

STA ZNDLPOS ;THIS ALLOCATES SPACE USED FOR CHAR MAP

STA ZNDLPOS+2

STA ZNDLPOS+4

STA ZNDLPOS+6

STA ZNDLPOS+8

STA ZNDLPOS+10

STA ZNDLPOS+12

STA ZNDLPOS+14

STA ZNDLPOS+16

STA ZNDLPOS+18

STA ZNDLPOS+20

STA ZNDLPOS+22

 

LDA ZONEOFF ;MAKE KTEMP10 RANGE FROM F1 TO 00

SEC

SBC #14

STA KTEMP10 ;THIS IS LIKE NEGATIVE ZONEOFF

LDY LOWEST ;FOLLOW LINKED LIST TO LOAD

LDLOOP BPL CYCLES

JMP LDDONE

 

CYCLES CPY #ZREF0

BCS LDNEXT ;PUNT OUT ON REF. POINTS

 

LDA HPTBL,Y

CMP #160

BCC FINEHORZ

CMP #-36

BCC LDNEXT

 

FINEHORZ

LDA VPTBL,Y ;VERT POS, RANGING FROM F1 TO #SCRENBOT

CMP #-15 ;TALK TO JEM ABOUT THIS ONE GRRRR!

BCS LOADY

CMP #SCRENBOT

BCS LDNEXT

LOADY SEC

SBC KTEMP10 ;THIS IS LIKE ADDING 16 FOR ZONEOFF UV

;FF OR ADDING 1 FOR ZONEOFF OF E

;OR ANYTHING IN BETWEEN.

STA KTEMP1 ;THE RESULT GOES INTO KTEMP1

 

CMP #-15 ;SEE IF TOP ZONE WOULD BE NEGATIVE

BCS PUNTTOP ;IT TAKES THIS ON F1 THROUGH FF

AND #$F0 ;CARRY SHOULD BE CLEAR

 

;IF SOMEHOW WE FALL THROUGH HERE THEN...

 

LSR A ;THIS PICKS OUT ZONE NUMBER X2 FOR

LSR A ;INDIRECT INDEXING BY X

LSR A

TAX

 

LDA ZNDLPOS,X

CMP #75 ;IF 75 OR BIGGER, WE CAN'T FIT A 4

BCS LDNEXT ;BYTE HEADER AND TWO ZEROS, SO PUNT

 

LDA SLTBL,Y ;LOAD AND STORE LOWBYTE

STA (ZNDLPOS,X)

INC ZNDLPOS,X

LDA PWTBL,Y ;LOAD AND STORE PALWIDTH

STA (ZNDLPOS,X)

INC ZNDLPOS,X

LDA KTEMP1 ;THIS IS POSITIVE AND NONZERO

;SOOOO, WE ARE ALWAYS ADDING AT LEAST 1 TO THE HIGH BYTES

AND #$F

CLC ;CARRY SHOULD BE CLEAR FROM SHIFTS

ADC SHTBL,Y ;ADD TO HIGH BYTE

CMP SMTBL,Y ;COMPARE TO THE MAGIC NUMBER

STA KTEMP1 ;REPLACE OLD KTEMP1 (THIS IS WHY WE

;AND WITH F ABOVE) I DON'T SEE WHY THIS

;WOULD EVER WORK

STA (ZNDLPOS,X) ;STORE INTO HIGH BYTE

INC ZNDLPOS,X

LDA HPTBL,Y ;LOAD AND STORE HPOS

STA (ZNDLPOS,X)

INC ZNDLPOS,X

 

DOBOTTOM BCC LDNEXT ;IF HIGH BYTE IS LESS THAN MAGIC NUMBER

INX ;THEN DON'T DO NEXT ZONE

INX

CPX #24 ;ALSO PUNT IF OFF BOTTOM OF SCREEN

BCS LDNEXT ;FALLS IN NEXT ZONE ALSO?

 

HEREOJ

LDA ZNDLPOS,X ;DON'T WANT TO FILL ZONE

CMP #75

BCS LDNEXT

 

LDA SLTBL,Y ;CARRY IS CLEAR

STA (ZNDLPOS,X) ;LOAD AND STORE LOW BYTE

INC ZNDLPOS,X

LDA PWTBL,Y ;LOAD AND STORE PALWIDTH

STA (ZNDLPOS,X)

INC ZNDLPOS,X

LDA KTEMP1 ;LOAD IN LAST ZONES HIGH BYTE

; SEC ;CARRY IS CLEAR AND THEREFORE

SBC #15 ;SUBTRACT 16-1 = 15

STA (ZNDLPOS,X) ;SUBTRACT 16 FOR THIS ZONE'S HI BYTE

INC ZNDLPOS,X

LDA HPTBL,Y ;LOAD AND STORE H POS

STA (ZNDLPOS,X)

INC ZNDLPOS,X

 

LDNEXT LDA RLTBL,Y ;FOLLOW RIGHT LINK

TAY

JMP LDLOOP

 

PUNTTOP

;HERE THE OBJECT STARTS OFF SCREEN AND FALLS OVER INTO ZONE 0

 

 

;KTEMP1 IS IN A ALREADY

; LDA KTEMP1 ;GET NEW HIGH BYTE FROM KTEMP1

AND #$F

CLC

ADC SHTBL,Y ;CHECK FOR OVERLAP INTO NEXT ZONE

CMP SMTBL,Y ;COMPARE TO MAGIC NUMBER

STA KTEMP1 ;STORE BACK TO KTEMP1 FOR NEXT ZONE

BCC LDNEXT

LDX0 LDX #0 ;ZONE FF WRAPS TO ZONE 0

BEQ HEREOJ ;JMP

 

END

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...