Curt Vendel Posted June 3, 2004 Share Posted June 3, 2004 * 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+,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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.