base:flexible_32_sprite_multiplexer
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | base:flexible_32_sprite_multiplexer [2015-04-17 04:31] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== Flexible 32 Sprite Multiplexer ===== | ||
+ | Here's an example of a flexible 32 Sprite Multiplexer with dynamic interrupts and very fast y-pos sorting. I wanted to use this in a sequel of Vincent, a jump and run game I wrote in 1990. The sorting routine is based on ' | ||
+ | |||
+ | Should assemble with Dasm 2.12 or newer. | ||
+ | |||
+ | Written in 1994 by The Human Code Machine / Masters' | ||
+ | |||
+ | < | ||
+ | | ||
+ | |||
+ | ORG $C000 | ||
+ | ; | ||
+ | ;VARBASE | ||
+ | |||
+ | VARBASE EQU $02 | ||
+ | |||
+ | AREG EQU VARBASE+$000 | ||
+ | XREG EQU VARBASE+$001 | ||
+ | YREG EQU VARBASE+$002 | ||
+ | |||
+ | ABUF EQU VARBASE+$003 | ||
+ | XBUF EQU VARBASE+$004 | ||
+ | YBUF EQU VARBASE+$005 | ||
+ | |||
+ | IOBUF EQU VARBASE+$006 | ||
+ | |||
+ | FLAG EQU VARBASE+$007 | ||
+ | |||
+ | BUFFER EQU VARBASE+$008 | ||
+ | |||
+ | MAXSPR EQU VARBASE+$009 | ||
+ | COUNTER EQU VARBASE+$00A | ||
+ | |||
+ | COUNTERX1 EQU VARBASE+$00B | ||
+ | COUNTERX2 EQU VARBASE+$00C | ||
+ | |||
+ | COUNTERY1 EQU VARBASE+$00D | ||
+ | COUNTERY2 EQU VARBASE+$00E | ||
+ | |||
+ | XDIF EQU VARBASE+$00F | ||
+ | YDIF EQU VARBASE+$010 | ||
+ | |||
+ | XSPEED EQU VARBASE+$011 | ||
+ | YSPEED EQU VARBASE+$012 | ||
+ | |||
+ | XOFFSET EQU VARBASE+$13 | ||
+ | YOFFSET EQU VARBASE+$14 | ||
+ | |||
+ | JUMPLO EQU VARBASE+$15 | ||
+ | JUMPHI EQU VARBASE+$16 | ||
+ | |||
+ | BAL EQU VARBASE+$17 | ||
+ | BAH EQU VARBASE+$18 | ||
+ | |||
+ | OLDLO EQU VARBASE+$19 | ||
+ | OLDHI EQU VARBASE+$1A | ||
+ | |||
+ | INDEXTABLE EQU $E0 | ||
+ | |||
+ | ; | ||
+ | ;MEMORY | ||
+ | SPRITEPOINTER EQU $07F8 | ||
+ | |||
+ | ; | ||
+ | ;VALUES | ||
+ | |||
+ | ITEMS EQU 32 | ||
+ | |||
+ | ; | ||
+ | ;MACROS | ||
+ | |||
+ | ; | ||
+ | START SUBROUTINE | ||
+ | SEI | ||
+ | CLD | ||
+ | LDA #$35 | ||
+ | STA $01 | ||
+ | |||
+ | LDX #$FF | ||
+ | TXS | ||
+ | INX | ||
+ | |||
+ | STX $D021 | ||
+ | STX $DC0E | ||
+ | STX $D020 | ||
+ | |||
+ | INX | ||
+ | STX $D01A | ||
+ | |||
+ | LDA #$1B | ||
+ | STA $D011 | ||
+ | |||
+ | LDA #< | ||
+ | STA $FFFE | ||
+ | LDA #> | ||
+ | STA $FFFF | ||
+ | |||
+ | LDA #$7F | ||
+ | STA $DC0D | ||
+ | |||
+ | LDA #$20 | ||
+ | STA $D012 | ||
+ | |||
+ | LDX #$02 | ||
+ | LDA #$80 | ||
+ | .3 STA $00,X | ||
+ | INX | ||
+ | BNE .3 | ||
+ | |||
+ | LDA #$FF | ||
+ | .4 STA $2000,X | ||
+ | INX | ||
+ | BNE .4 | ||
+ | |||
+ | LDA #24 | ||
+ | STA MAXSPR | ||
+ | |||
+ | LDA #$40 | ||
+ | STA XOFFSET | ||
+ | |||
+ | LDA #$00 | ||
+ | STA YOFFSET | ||
+ | |||
+ | LDA #$FF | ||
+ | STA XSPEED | ||
+ | |||
+ | LDA #$01 | ||
+ | STA YSPEED | ||
+ | |||
+ | LDA #$0A | ||
+ | STA XDIF | ||
+ | LDA #$09 | ||
+ | STA YDIF | ||
+ | |||
+ | JSR INITSORT | ||
+ | |||
+ | .2 CLI | ||
+ | JMP .2 | ||
+ | ; | ||
+ | MAININTER SUBROUTINE | ||
+ | STA AREG | ||
+ | STX XREG | ||
+ | STY YREG | ||
+ | |||
+ | DEC $D020 | ||
+ | |||
+ | LDA #$00 | ||
+ | STA $D017 | ||
+ | STA $D01B | ||
+ | STA $D01D | ||
+ | STA $D01C | ||
+ | |||
+ | LDX MAXSPR | ||
+ | CPX #$09 | ||
+ | BCS .MORETHAN8 | ||
+ | |||
+ | LDA #$4C ;JMP $0000 | ||
+ | STA .SWITCH | ||
+ | |||
+ | LDA .ACTIVATETAB, | ||
+ | STA $D015 | ||
+ | |||
+ | LDA .JUMPLO,X | ||
+ | STA JUMPLO | ||
+ | LDA .JUMPHI,X | ||
+ | STA JUMPHI | ||
+ | LDA #$00 | ||
+ | STA $D010 | ||
+ | JMP (JUMPLO) | ||
+ | |||
+ | .MORETHAN8 LDA #$FF | ||
+ | STA $D015 | ||
+ | LDA #$08 | ||
+ | STA COUNTER | ||
+ | |||
+ | LDA #$2C ;BIT $0000 | ||
+ | STA .SWITCH | ||
+ | LDA #$00 | ||
+ | |||
+ | ; | ||
+ | .DOSPR7 LDY INDEXTABLE+7 | ||
+ | LDX YTABLE,Y | ||
+ | STX $D00F | ||
+ | LDX XTABLELO,Y | ||
+ | STX $D00E | ||
+ | LDX FRAME,Y | ||
+ | STX SPRITEPOINTER+7 | ||
+ | LDX COLOR,Y | ||
+ | STX $D02E | ||
+ | LDX XTABLEHI,Y | ||
+ | BEQ .DOSPR6 | ||
+ | LDA #$80 | ||
+ | ; | ||
+ | .DOSPR6 LDY INDEXTABLE+6 | ||
+ | LDX YTABLE,Y | ||
+ | STX $D00D | ||
+ | LDX XTABLELO,Y | ||
+ | STX $D00C | ||
+ | LDX FRAME,Y | ||
+ | STX SPRITEPOINTER+6 | ||
+ | LDX COLOR,Y | ||
+ | STX $D02D | ||
+ | LDX XTABLEHI,Y | ||
+ | BEQ .DOSPR5 | ||
+ | ORA #$40 | ||
+ | ; | ||
+ | .DOSPR5 LDY INDEXTABLE+5 | ||
+ | LDX YTABLE,Y | ||
+ | STX $D00B | ||
+ | LDX XTABLELO,Y | ||
+ | STX $D00A | ||
+ | LDX FRAME,Y | ||
+ | STX SPRITEPOINTER+5 | ||
+ | LDX COLOR,Y | ||
+ | STX $D02C | ||
+ | LDX XTABLEHI,Y | ||
+ | BEQ .DOSPR4 | ||
+ | ORA #$20 | ||
+ | ; | ||
+ | .DOSPR4 LDY INDEXTABLE+4 | ||
+ | LDX YTABLE,Y | ||
+ | STX $D009 | ||
+ | LDX XTABLELO,Y | ||
+ | STX $D008 | ||
+ | LDX FRAME,Y | ||
+ | STX SPRITEPOINTER+4 | ||
+ | LDX COLOR,Y | ||
+ | STX $D02B | ||
+ | LDX XTABLEHI,Y | ||
+ | BEQ .DOSPR3 | ||
+ | ORA #$10 | ||
+ | ; | ||
+ | .DOSPR3 LDY INDEXTABLE+3 | ||
+ | LDX YTABLE,Y | ||
+ | STX $D007 | ||
+ | LDX XTABLELO,Y | ||
+ | STX $D006 | ||
+ | LDX FRAME,Y | ||
+ | STX SPRITEPOINTER+3 | ||
+ | LDX COLOR,Y | ||
+ | STX $D02A | ||
+ | LDX XTABLEHI,Y | ||
+ | BEQ .DOSPR2 | ||
+ | ORA #$08 | ||
+ | ; | ||
+ | .DOSPR2 LDY INDEXTABLE+2 | ||
+ | LDX YTABLE,Y | ||
+ | STX $D005 | ||
+ | LDX XTABLELO,Y | ||
+ | STX $D004 | ||
+ | LDX FRAME,Y | ||
+ | STX SPRITEPOINTER+2 | ||
+ | LDX COLOR,Y | ||
+ | STX $D029 | ||
+ | LDX XTABLEHI,Y | ||
+ | BEQ .DOSPR1 | ||
+ | ORA #$04 | ||
+ | ; | ||
+ | .DOSPR1 LDY INDEXTABLE+1 | ||
+ | LDX YTABLE,Y | ||
+ | STX $D003 | ||
+ | LDX XTABLELO,Y | ||
+ | STX $D002 | ||
+ | LDX FRAME,Y | ||
+ | STX SPRITEPOINTER+1 | ||
+ | LDX COLOR,Y | ||
+ | STX $D028 | ||
+ | LDX XTABLEHI,Y | ||
+ | BEQ .DOSPR0 | ||
+ | ORA #$02 | ||
+ | ; | ||
+ | .DOSPR0 LDY INDEXTABLE | ||
+ | LDX YTABLE,Y | ||
+ | STX $D001 | ||
+ | LDX XTABLELO,Y | ||
+ | STX $D000 | ||
+ | LDX FRAME,Y | ||
+ | STX SPRITEPOINTER | ||
+ | LDX COLOR,Y | ||
+ | STX $D027 | ||
+ | |||
+ | INC $D020 | ||
+ | |||
+ | LDX XTABLEHI,Y | ||
+ | BEQ .OVER | ||
+ | ORA #$01 | ||
+ | .OVER STA $D010 | ||
+ | .SWITCH JMP EXITINTER | ||
+ | |||
+ | LDX XREG | ||
+ | CLC | ||
+ | LDY COUNTER | ||
+ | ; | ||
+ | .NEXTSPR0 LDA $D001 | ||
+ | ADC #$17 | ||
+ | SBC $D012 | ||
+ | BCC .BLIT0 | ||
+ | CMP #$03 | ||
+ | BCS .NEXT0 | ||
+ | LDA #$03 | ||
+ | .NEXT0 CLC | ||
+ | ADC $D012 | ||
+ | STA $D012 | ||
+ | |||
+ | LDA #<INTER0 | ||
+ | STA $FFFE | ||
+ | LDA #>INTER0 | ||
+ | STA $FFFF | ||
+ | |||
+ | INC $D019 | ||
+ | LDA $DC0D | ||
+ | |||
+ | LDA AREG | ||
+ | LDY YREG | ||
+ | RTI | ||
+ | |||
+ | INTER0 STA AREG | ||
+ | STY YREG | ||
+ | |||
+ | LDY COUNTER | ||
+ | |||
+ | .BLIT0 LDA INDEXTABLE, | ||
+ | TAY | ||
+ | |||
+ | LDA YTABLE,Y | ||
+ | STA $D001 | ||
+ | LDA XTABLELO,Y | ||
+ | STA $D000 | ||
+ | LDA FRAME,Y | ||
+ | STA SPRITEPOINTER | ||
+ | LDA COLOR,Y | ||
+ | STA $D027 | ||
+ | |||
+ | LDA XTABLEHI,Y | ||
+ | BEQ .NO0 | ||
+ | LDA #$01 | ||
+ | ORA $D010 | ||
+ | BNE .YES0 | ||
+ | .NO0 LDA #$FE | ||
+ | AND $D010 | ||
+ | .YES0 STA $D010 | ||
+ | |||
+ | LDY COUNTER | ||
+ | INY | ||
+ | STY COUNTER | ||
+ | |||
+ | CPY MAXSPR | ||
+ | BNE .NEXTSPR1 | ||
+ | JMP EXITINTER | ||
+ | |||
+ | ; | ||
+ | .NEXTSPR1 LDA $D003 | ||
+ | ADC #$17 | ||
+ | SBC $D012 | ||
+ | BCC .BLIT1 | ||
+ | CMP #$03 | ||
+ | BCS .NEXT1 | ||
+ | LDA #$03 | ||
+ | .NEXT1 CLC | ||
+ | ADC $D012 | ||
+ | STA $D012 | ||
+ | |||
+ | LDA #<INTER1 | ||
+ | STA $FFFE | ||
+ | LDA #>INTER1 | ||
+ | STA $FFFF | ||
+ | |||
+ | INC $D019 | ||
+ | LDA $DC0D | ||
+ | |||
+ | LDA AREG | ||
+ | LDY YREG | ||
+ | RTI | ||
+ | |||
+ | INTER1 STA AREG | ||
+ | STY YREG | ||
+ | |||
+ | LDY COUNTER | ||
+ | |||
+ | .BLIT1 LDA INDEXTABLE, | ||
+ | TAY | ||
+ | |||
+ | LDA YTABLE,Y | ||
+ | STA $D003 | ||
+ | LDA XTABLELO,Y | ||
+ | STA $D002 | ||
+ | LDA FRAME,Y | ||
+ | STA SPRITEPOINTER+1 | ||
+ | LDA COLOR,Y | ||
+ | STA $D028 | ||
+ | |||
+ | LDA XTABLEHI,Y | ||
+ | BEQ .NO1 | ||
+ | LDA #$02 | ||
+ | ORA $D010 | ||
+ | BNE .YES1 | ||
+ | .NO1 LDA #$FD | ||
+ | AND $D010 | ||
+ | .YES1 STA $D010 | ||
+ | |||
+ | LDY COUNTER | ||
+ | INY | ||
+ | STY COUNTER | ||
+ | CPY MAXSPR | ||
+ | BNE .NEXTSPR2 | ||
+ | JMP EXITINTER | ||
+ | |||
+ | ; | ||
+ | .NEXTSPR2 LDA $D005 | ||
+ | ADC #$17 | ||
+ | SBC $D012 | ||
+ | BCC .BLIT2 | ||
+ | CMP #$03 | ||
+ | BCS .NEXT2 | ||
+ | LDA #$03 | ||
+ | .NEXT2 CLC | ||
+ | ADC $D012 | ||
+ | STA $D012 | ||
+ | |||
+ | LDA #<INTER2 | ||
+ | STA $FFFE | ||
+ | LDA #>INTER2 | ||
+ | STA $FFFF | ||
+ | |||
+ | INC $D019 | ||
+ | LDA $DC0D | ||
+ | |||
+ | LDA AREG | ||
+ | LDY YREG | ||
+ | RTI | ||
+ | |||
+ | INTER2 STA AREG | ||
+ | STY YREG | ||
+ | |||
+ | LDY COUNTER | ||
+ | |||
+ | .BLIT2 LDA INDEXTABLE, | ||
+ | TAY | ||
+ | |||
+ | LDA YTABLE,Y | ||
+ | STA $D005 | ||
+ | LDA XTABLELO,Y | ||
+ | STA $D004 | ||
+ | LDA FRAME,Y | ||
+ | STA SPRITEPOINTER+2 | ||
+ | LDA COLOR,Y | ||
+ | STA $D029 | ||
+ | |||
+ | LDA XTABLEHI,Y | ||
+ | BEQ .NO2 | ||
+ | LDA #$04 | ||
+ | ORA $D010 | ||
+ | BNE .YES2 | ||
+ | .NO2 LDA #$FB | ||
+ | AND $D010 | ||
+ | .YES2 STA $D010 | ||
+ | |||
+ | LDY COUNTER | ||
+ | INY | ||
+ | STY COUNTER | ||
+ | |||
+ | CPY MAXSPR | ||
+ | BNE .NEXTSPR3 | ||
+ | JMP EXITINTER | ||
+ | |||
+ | ; | ||
+ | .NEXTSPR3 LDA $D007 | ||
+ | ADC #$17 | ||
+ | SBC $D012 | ||
+ | BCC .BLIT3 | ||
+ | CMP #$03 | ||
+ | BCS .NEXT3 | ||
+ | LDA #$03 | ||
+ | .NEXT3 CLC | ||
+ | ADC $D012 | ||
+ | STA $D012 | ||
+ | |||
+ | LDA #<INTER3 | ||
+ | STA $FFFE | ||
+ | LDA #>INTER3 | ||
+ | STA $FFFF | ||
+ | |||
+ | INC $D019 | ||
+ | LDA $DC0D | ||
+ | |||
+ | LDA AREG | ||
+ | LDY YREG | ||
+ | RTI | ||
+ | |||
+ | INTER3 STA AREG | ||
+ | STY YREG | ||
+ | |||
+ | LDY COUNTER | ||
+ | |||
+ | .BLIT3 LDA INDEXTABLE, | ||
+ | TAY | ||
+ | |||
+ | LDA YTABLE,Y | ||
+ | STA $D007 | ||
+ | LDA XTABLELO,Y | ||
+ | STA $D006 | ||
+ | LDA FRAME,Y | ||
+ | STA SPRITEPOINTER+3 | ||
+ | LDA COLOR,Y | ||
+ | STA $D02A | ||
+ | |||
+ | LDA XTABLEHI,Y | ||
+ | BEQ .NO3 | ||
+ | LDA #$08 | ||
+ | ORA $D010 | ||
+ | BNE .YES3 | ||
+ | .NO3 LDA #$F7 | ||
+ | AND $D010 | ||
+ | .YES3 STA $D010 | ||
+ | |||
+ | LDY COUNTER | ||
+ | INY | ||
+ | STY COUNTER | ||
+ | |||
+ | CPY MAXSPR | ||
+ | BNE .NEXTSPR4 | ||
+ | JMP EXITINTER | ||
+ | |||
+ | ; | ||
+ | .NEXTSPR4 LDA $D009 | ||
+ | ADC #$17 | ||
+ | SBC $D012 | ||
+ | BCC .BLIT4 | ||
+ | CMP #$03 | ||
+ | BCS .NEXT4 | ||
+ | LDA #$03 | ||
+ | .NEXT4 CLC | ||
+ | ADC $D012 | ||
+ | STA $D012 | ||
+ | |||
+ | LDA #<INTER4 | ||
+ | STA $FFFE | ||
+ | LDA #>INTER4 | ||
+ | STA $FFFF | ||
+ | |||
+ | INC $D019 | ||
+ | LDA $DC0D | ||
+ | |||
+ | LDA AREG | ||
+ | LDY YREG | ||
+ | RTI | ||
+ | |||
+ | INTER4 STA AREG | ||
+ | STY YREG | ||
+ | |||
+ | LDY COUNTER | ||
+ | |||
+ | .BLIT4 LDA INDEXTABLE, | ||
+ | TAY | ||
+ | |||
+ | LDA YTABLE,Y | ||
+ | STA $D009 | ||
+ | LDA XTABLELO,Y | ||
+ | STA $D008 | ||
+ | LDA FRAME,Y | ||
+ | STA SPRITEPOINTER+4 | ||
+ | LDA COLOR,Y | ||
+ | STA $D02B | ||
+ | |||
+ | LDA XTABLEHI,Y | ||
+ | BEQ .NO4 | ||
+ | LDA #$10 | ||
+ | ORA $D010 | ||
+ | BNE .YES4 | ||
+ | .NO4 LDA #$EF | ||
+ | AND $D010 | ||
+ | .YES4 STA $D010 | ||
+ | |||
+ | LDY COUNTER | ||
+ | INY | ||
+ | STY COUNTER | ||
+ | |||
+ | CPY MAXSPR | ||
+ | BNE .NEXTSPR5 | ||
+ | JMP EXITINTER | ||
+ | |||
+ | ; | ||
+ | .NEXTSPR5 LDA $D00B | ||
+ | ADC #$17 | ||
+ | SBC $D012 | ||
+ | BCC .BLIT5 | ||
+ | CMP #$03 | ||
+ | BCS .NEXT5 | ||
+ | LDA #$03 | ||
+ | .NEXT5 CLC | ||
+ | ADC $D012 | ||
+ | STA $D012 | ||
+ | |||
+ | LDA #<INTER5 | ||
+ | STA $FFFE | ||
+ | LDA #>INTER5 | ||
+ | STA $FFFF | ||
+ | |||
+ | INC $D019 | ||
+ | LDA $DC0D | ||
+ | |||
+ | LDA AREG | ||
+ | LDY YREG | ||
+ | RTI | ||
+ | |||
+ | INTER5 STA AREG | ||
+ | STY YREG | ||
+ | |||
+ | LDY COUNTER | ||
+ | |||
+ | .BLIT5 LDA INDEXTABLE, | ||
+ | TAY | ||
+ | |||
+ | LDA YTABLE,Y | ||
+ | STA $D00B | ||
+ | LDA XTABLELO,Y | ||
+ | STA $D00A | ||
+ | LDA FRAME,Y | ||
+ | STA SPRITEPOINTER+5 | ||
+ | LDA COLOR,Y | ||
+ | STA $D02C | ||
+ | |||
+ | LDA XTABLEHI,Y | ||
+ | BEQ .NO5 | ||
+ | LDA #$20 | ||
+ | ORA $D010 | ||
+ | BNE .YES5 | ||
+ | .NO5 LDA #$DF | ||
+ | AND $D010 | ||
+ | .YES5 STA $D010 | ||
+ | |||
+ | LDY COUNTER | ||
+ | INY | ||
+ | STY COUNTER | ||
+ | |||
+ | CPY MAXSPR | ||
+ | BNE .NEXTSPR6 | ||
+ | JMP EXITINTER | ||
+ | |||
+ | ; | ||
+ | .NEXTSPR6 LDA $D00D | ||
+ | ADC #$17 | ||
+ | SBC $D012 | ||
+ | BCC .BLIT6 | ||
+ | CMP #$03 | ||
+ | BCS .NEXT6 | ||
+ | LDA #$03 | ||
+ | .NEXT6 CLC | ||
+ | ADC $D012 | ||
+ | STA $D012 | ||
+ | |||
+ | LDA #<INTER6 | ||
+ | STA $FFFE | ||
+ | LDA #>INTER6 | ||
+ | STA $FFFF | ||
+ | |||
+ | INC $D019 | ||
+ | LDA $DC0D | ||
+ | |||
+ | LDA AREG | ||
+ | LDY YREG | ||
+ | RTI | ||
+ | |||
+ | INTER6 STA AREG | ||
+ | STY YREG | ||
+ | |||
+ | LDY COUNTER | ||
+ | |||
+ | .BLIT6 LDA INDEXTABLE, | ||
+ | TAY | ||
+ | |||
+ | LDA YTABLE,Y | ||
+ | STA $D00D | ||
+ | LDA XTABLELO,Y | ||
+ | STA $D00C | ||
+ | LDA FRAME,Y | ||
+ | STA SPRITEPOINTER+6 | ||
+ | LDA COLOR,Y | ||
+ | STA $D02D | ||
+ | |||
+ | LDA XTABLEHI,Y | ||
+ | BEQ .NO6 | ||
+ | LDA #$40 | ||
+ | ORA $D010 | ||
+ | BNE .YES6 | ||
+ | .NO6 LDA #$BF | ||
+ | AND $D010 | ||
+ | .YES6 STA $D010 | ||
+ | |||
+ | LDY COUNTER | ||
+ | INY | ||
+ | STY COUNTER | ||
+ | |||
+ | CPY MAXSPR | ||
+ | BNE .NEXTSPR7 | ||
+ | JMP EXITINTER | ||
+ | |||
+ | ; | ||
+ | .NEXTSPR7 LDA $D00F | ||
+ | ADC #$17 | ||
+ | SBC $D012 | ||
+ | BCC .BLIT7 | ||
+ | CMP #$03 | ||
+ | BCS .NEXT7 | ||
+ | LDA #$03 | ||
+ | .NEXT7 CLC | ||
+ | ADC $D012 | ||
+ | STA $D012 | ||
+ | |||
+ | LDA #<INTER7 | ||
+ | STA $FFFE | ||
+ | LDA #>INTER7 | ||
+ | STA $FFFF | ||
+ | |||
+ | INC $D019 | ||
+ | LDA $DC0D | ||
+ | |||
+ | LDA AREG | ||
+ | LDY YREG | ||
+ | RTI | ||
+ | |||
+ | INTER7 STA AREG | ||
+ | STY YREG | ||
+ | |||
+ | LDY COUNTER | ||
+ | |||
+ | .BLIT7 LDA INDEXTABLE, | ||
+ | TAY | ||
+ | |||
+ | LDA YTABLE,Y | ||
+ | STA $D00F | ||
+ | LDA XTABLELO,Y | ||
+ | STA $D00E | ||
+ | LDA FRAME,Y | ||
+ | STA SPRITEPOINTER+7 | ||
+ | LDA COLOR,Y | ||
+ | STA $D02E | ||
+ | |||
+ | LDA XTABLEHI,Y | ||
+ | BEQ .NO7 | ||
+ | LDA #$80 | ||
+ | ORA $D010 | ||
+ | BNE .YES7 | ||
+ | .NO7 LDA #$7F | ||
+ | AND $D010 | ||
+ | .YES7 STA $D010 | ||
+ | |||
+ | LDY COUNTER | ||
+ | INY | ||
+ | STY COUNTER | ||
+ | |||
+ | CPY MAXSPR | ||
+ | BEQ EXITINTER | ||
+ | JMP .NEXTSPR0 | ||
+ | |||
+ | .JUMPLO DC.B #< | ||
+ | DC.B #< | ||
+ | DC.B #< | ||
+ | |||
+ | .JUMPHI DC.B #> | ||
+ | DC.B #> | ||
+ | DC.B #> | ||
+ | |||
+ | .ACTIVATETAB DC.B $00, | ||
+ | |||
+ | ; | ||
+ | EXITINTER SUBROUTINE | ||
+ | LDA #$EF | ||
+ | CMP $DC01 | ||
+ | BEQ .OVER | ||
+ | |||
+ | DEC $D020 | ||
+ | JSR MOVE | ||
+ | DEC $D020 | ||
+ | JSR SORT | ||
+ | LDA #$00 | ||
+ | STA $D020 | ||
+ | |||
+ | .OVER LDA #< | ||
+ | STA $FFFE | ||
+ | LDA #> | ||
+ | STA $FFFF | ||
+ | |||
+ | LDA #$20 | ||
+ | STA $D012 | ||
+ | |||
+ | INC $D019 | ||
+ | LDA $DC0D | ||
+ | LDA AREG | ||
+ | LDX XREG | ||
+ | LDY YREG | ||
+ | RTI | ||
+ | |||
+ | ; | ||
+ | INITSORT SUBROUTINE | ||
+ | LDX MAXSPR | ||
+ | DEX | ||
+ | .1 TXA | ||
+ | STA INDEXTABLE, | ||
+ | DEX | ||
+ | BPL .1 | ||
+ | |||
+ | LDA #< | ||
+ | STA BAL | ||
+ | LDA #> | ||
+ | STA BAH | ||
+ | |||
+ | LDY #$00 | ||
+ | .2 LDA BAL | ||
+ | STA SORTLO,Y | ||
+ | LDA BAH | ||
+ | STA SORTHI,Y | ||
+ | |||
+ | LDA BAL | ||
+ | CLC | ||
+ | ADC #18 | ||
+ | STA BAL | ||
+ | BCC .OVER | ||
+ | INC BAH | ||
+ | .OVER INY | ||
+ | CPY #ITEMS-1 | ||
+ | BNE .2 | ||
+ | RTS | ||
+ | |||
+ | ; | ||
+ | SORT SUBROUTINE | ||
+ | LDA MAXSPR | ||
+ | CMP #$02 | ||
+ | BCC .EXIT | ||
+ | SBC #$02 | ||
+ | TAY | ||
+ | LDA SORTLO,Y | ||
+ | STA BAL | ||
+ | LDA SORTHI,Y | ||
+ | STA BAH | ||
+ | LDY #$00 | ||
+ | LDA #$60 | ||
+ | STA (BAL),Y | ||
+ | JSR .OVER0 | ||
+ | LDY #$00 | ||
+ | LDA #$A4 | ||
+ | STA (BAL),Y | ||
+ | .EXIT RTS | ||
+ | |||
+ | .OVER0 LDY INDEXTABLE+1 | ||
+ | .BACK0 LDX INDEXTABLE | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER1 | ||
+ | STX INDEXTABLE+1 | ||
+ | STY INDEXTABLE | ||
+ | |||
+ | SORTSTART | ||
+ | .OVER1 LDY INDEXTABLE+2 | ||
+ | .BACK1 LDX INDEXTABLE+1 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER2 | ||
+ | STX INDEXTABLE+2 | ||
+ | STY INDEXTABLE+1 | ||
+ | BCC .BACK0 | ||
+ | |||
+ | .OVER2 LDY INDEXTABLE+3 | ||
+ | .BACK2 LDX INDEXTABLE+2 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER3 | ||
+ | STX INDEXTABLE+3 | ||
+ | STY INDEXTABLE+2 | ||
+ | BCC .BACK1 | ||
+ | |||
+ | .OVER3 LDY INDEXTABLE+4 | ||
+ | .BACK3 LDX INDEXTABLE+3 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER4 | ||
+ | STX INDEXTABLE+4 | ||
+ | STY INDEXTABLE+3 | ||
+ | BCC .BACK2 | ||
+ | |||
+ | .OVER4 LDY INDEXTABLE+5 | ||
+ | .BACK4 LDX INDEXTABLE+4 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER5 | ||
+ | STX INDEXTABLE+5 | ||
+ | STY INDEXTABLE+4 | ||
+ | BCC .BACK3 | ||
+ | |||
+ | .OVER5 LDY INDEXTABLE+6 | ||
+ | .BACK5 LDX INDEXTABLE+5 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER6 | ||
+ | STX INDEXTABLE+6 | ||
+ | STY INDEXTABLE+5 | ||
+ | BCC .BACK4 | ||
+ | |||
+ | .OVER6 LDY INDEXTABLE+7 | ||
+ | .BACK6 LDX INDEXTABLE+6 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER7 | ||
+ | STX INDEXTABLE+7 | ||
+ | STY INDEXTABLE+6 | ||
+ | BCC .BACK5 | ||
+ | |||
+ | .OVER7 LDY INDEXTABLE+8 | ||
+ | .BACK7 LDX INDEXTABLE+7 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER8 | ||
+ | STX INDEXTABLE+8 | ||
+ | STY INDEXTABLE+7 | ||
+ | BCC .BACK6 | ||
+ | |||
+ | .OVER8 LDY INDEXTABLE+9 | ||
+ | .BACK8 LDX INDEXTABLE+8 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER9 | ||
+ | STX INDEXTABLE+9 | ||
+ | STY INDEXTABLE+8 | ||
+ | BCC .BACK7 | ||
+ | |||
+ | .OVER9 LDY INDEXTABLE+10 | ||
+ | .BACK9 LDX INDEXTABLE+9 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER10 | ||
+ | STX INDEXTABLE+10 | ||
+ | STY INDEXTABLE+9 | ||
+ | BCC .BACK8 | ||
+ | |||
+ | .OVER10 LDY INDEXTABLE+11 | ||
+ | .BACK10 LDX INDEXTABLE+10 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER11 | ||
+ | STX INDEXTABLE+11 | ||
+ | STY INDEXTABLE+10 | ||
+ | BCC .BACK9 | ||
+ | |||
+ | ; | ||
+ | .OVER11 LDY INDEXTABLE+12 | ||
+ | .BACK11 LDX INDEXTABLE+11 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER12 | ||
+ | STX INDEXTABLE+12 | ||
+ | STY INDEXTABLE+11 | ||
+ | BCC .BACK10 | ||
+ | |||
+ | .OVER12 LDY INDEXTABLE+13 | ||
+ | .BACK12 LDX INDEXTABLE+12 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER13 | ||
+ | STX INDEXTABLE+13 | ||
+ | STY INDEXTABLE+12 | ||
+ | BCC .BACK11 | ||
+ | |||
+ | .OVER13 LDY INDEXTABLE+14 | ||
+ | .BACK13 LDX INDEXTABLE+13 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER14 | ||
+ | STX INDEXTABLE+14 | ||
+ | STY INDEXTABLE+13 | ||
+ | BCC .BACK12 | ||
+ | |||
+ | .OVER14 LDY INDEXTABLE+15 | ||
+ | .BACK14 LDX INDEXTABLE+14 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER15 | ||
+ | STX INDEXTABLE+15 | ||
+ | STY INDEXTABLE+14 | ||
+ | BCC .BACK13 | ||
+ | |||
+ | .OVER15 LDY INDEXTABLE+16 | ||
+ | .BACK15 LDX INDEXTABLE+15 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER16 | ||
+ | STX INDEXTABLE+16 | ||
+ | STY INDEXTABLE+15 | ||
+ | BCC .BACK14 | ||
+ | |||
+ | .OVER16 LDY INDEXTABLE+17 | ||
+ | .BACK16 LDX INDEXTABLE+16 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER17 | ||
+ | STX INDEXTABLE+17 | ||
+ | STY INDEXTABLE+16 | ||
+ | BCC .BACK15 | ||
+ | |||
+ | .OVER17 LDY INDEXTABLE+18 | ||
+ | .BACK17 LDX INDEXTABLE+17 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER18 | ||
+ | STX INDEXTABLE+18 | ||
+ | STY INDEXTABLE+17 | ||
+ | BCC .BACK16 | ||
+ | |||
+ | .OVER18 LDY INDEXTABLE+19 | ||
+ | .BACK18 LDX INDEXTABLE+18 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER19 | ||
+ | STX INDEXTABLE+19 | ||
+ | STY INDEXTABLE+18 | ||
+ | BCC .BACK17 | ||
+ | |||
+ | .OVER19 LDY INDEXTABLE+20 | ||
+ | .BACK19 LDX INDEXTABLE+19 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER20 | ||
+ | STX INDEXTABLE+20 | ||
+ | STY INDEXTABLE+19 | ||
+ | BCC .BACK18 | ||
+ | |||
+ | .OVER20 LDY INDEXTABLE+21 | ||
+ | .BACK20 LDX INDEXTABLE+20 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER21 | ||
+ | STX INDEXTABLE+21 | ||
+ | STY INDEXTABLE+20 | ||
+ | BCC .BACK19 | ||
+ | ; | ||
+ | .OVER21 LDY INDEXTABLE+22 | ||
+ | .BACK21 LDX INDEXTABLE+21 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER22 | ||
+ | STX INDEXTABLE+22 | ||
+ | STY INDEXTABLE+21 | ||
+ | BCC .BACK20 | ||
+ | |||
+ | .OVER22 LDY INDEXTABLE+23 | ||
+ | .BACK22 LDX INDEXTABLE+22 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER23 | ||
+ | STX INDEXTABLE+23 | ||
+ | STY INDEXTABLE+22 | ||
+ | BCC .BACK21 | ||
+ | |||
+ | .OVER23 LDY INDEXTABLE+24 | ||
+ | .BACK23 LDX INDEXTABLE+23 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER24 | ||
+ | STX INDEXTABLE+24 | ||
+ | STY INDEXTABLE+23 | ||
+ | BCC .BACK22 | ||
+ | |||
+ | .OVER24 LDY INDEXTABLE+25 | ||
+ | .BACK24 LDX INDEXTABLE+24 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER25 | ||
+ | STX INDEXTABLE+25 | ||
+ | STY INDEXTABLE+24 | ||
+ | BCC .BACK23 | ||
+ | |||
+ | .OVER25 LDY INDEXTABLE+26 | ||
+ | .BACK25 LDX INDEXTABLE+25 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER26 | ||
+ | STX INDEXTABLE+26 | ||
+ | STY INDEXTABLE+25 | ||
+ | BCC .BACK24 | ||
+ | |||
+ | .OVER26 LDY INDEXTABLE+27 | ||
+ | .BACK26 LDX INDEXTABLE+26 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER27 | ||
+ | STX INDEXTABLE+27 | ||
+ | STY INDEXTABLE+26 | ||
+ | BCC .BACK25 | ||
+ | |||
+ | .OVER27 LDY INDEXTABLE+28 | ||
+ | .BACK27 LDX INDEXTABLE+27 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER28 | ||
+ | STX INDEXTABLE+28 | ||
+ | STY INDEXTABLE+27 | ||
+ | BCC .BACK26 | ||
+ | |||
+ | .OVER28 LDY INDEXTABLE+29 | ||
+ | .BACK28 LDX INDEXTABLE+28 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER29 | ||
+ | STX INDEXTABLE+29 | ||
+ | STY INDEXTABLE+28 | ||
+ | BCC .BACK27 | ||
+ | |||
+ | .OVER29 LDY INDEXTABLE+30 | ||
+ | .BACK29 LDX INDEXTABLE+29 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER30 | ||
+ | STX INDEXTABLE+30 | ||
+ | STY INDEXTABLE+29 | ||
+ | BCC .BACK28 | ||
+ | |||
+ | .OVER30 LDY INDEXTABLE+31 | ||
+ | .BACK30 LDX INDEXTABLE+30 | ||
+ | LDA YTABLE,Y | ||
+ | CMP YTABLE,X | ||
+ | BCS .OVER31 | ||
+ | STX INDEXTABLE+31 | ||
+ | STY INDEXTABLE+30 | ||
+ | BCC .BACK29 | ||
+ | .OVER31 LDY INDEXTABLE | ||
+ | RTS | ||
+ | |||
+ | |||
+ | SORTLO DS.B ITEMS-1 | ||
+ | SORTHI DS.B ITEMS-1 | ||
+ | |||
+ | ; | ||
+ | MOVE SUBROUTINE | ||
+ | LDY MAXSPR | ||
+ | DEY | ||
+ | BMI .EXIT | ||
+ | |||
+ | .1 LDA COUNTERX2 | ||
+ | CLC | ||
+ | ADC XDIF | ||
+ | STA COUNTERX2 | ||
+ | CLC | ||
+ | ADC COUNTERX1 | ||
+ | TAX | ||
+ | LDA SINX,X | ||
+ | STA XTABLELO,Y | ||
+ | LDA SINXHI,X | ||
+ | STA XTABLEHI,Y | ||
+ | |||
+ | LDA COUNTERY2 | ||
+ | CLC | ||
+ | ADC YDIF | ||
+ | STA COUNTERY2 | ||
+ | CLC | ||
+ | ADC COUNTERY1 | ||
+ | TAX | ||
+ | LDA SINY,X | ||
+ | STA YTABLE,Y | ||
+ | |||
+ | DEY | ||
+ | BPL .1 | ||
+ | |||
+ | .EXIT LDA XOFFSET | ||
+ | STA COUNTERX2 | ||
+ | LDA YOFFSET | ||
+ | STA COUNTERY2 | ||
+ | |||
+ | LDA COUNTERX1 | ||
+ | CLC | ||
+ | ADC XSPEED | ||
+ | STA COUNTERX1 | ||
+ | |||
+ | LDA COUNTERY1 | ||
+ | CLC | ||
+ | ADC YSPEED | ||
+ | STA COUNTERY1 | ||
+ | |||
+ | RTS | ||
+ | ; | ||
+ | YTABLE DC.B $34, | ||
+ | DC.B $74, | ||
+ | DC.B $60, | ||
+ | DC.B $54, | ||
+ | |||
+ | XTABLELO DC.B $20, | ||
+ | DC.B $20, | ||
+ | DC.B $80, | ||
+ | DC.B $20, | ||
+ | |||
+ | XTABLEHI DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | |||
+ | COLOR DC.B $01, | ||
+ | DC.B $09, | ||
+ | DC.B $01, | ||
+ | DC.B $09, | ||
+ | |||
+ | FRAME DC.B $80, | ||
+ | DC.B $80, | ||
+ | DC.B $80, | ||
+ | DC.B $80, | ||
+ | |||
+ | MSBTAB DC.B $01, | ||
+ | |||
+ | SINX | ||
+ | DC.B $AF, | ||
+ | DC.B $E7, | ||
+ | DC.B $16, | ||
+ | DC.B $35, | ||
+ | DC.B $3E, | ||
+ | DC.B $32, | ||
+ | DC.B $11, | ||
+ | DC.B $E0, | ||
+ | DC.B $A7, | ||
+ | DC.B $6F, | ||
+ | DC.B $40, | ||
+ | DC.B $21, | ||
+ | DC.B $18, | ||
+ | DC.B $24, | ||
+ | DC.B $45, | ||
+ | DC.B $76, | ||
+ | |||
+ | SINXHI | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $01, | ||
+ | DC.B $01, | ||
+ | DC.B $01, | ||
+ | DC.B $01, | ||
+ | DC.B $01, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | DC.B $00, | ||
+ | |||
+ | SINY | ||
+ | DC.B $8D, | ||
+ | DC.B $AF, | ||
+ | DC.B $CB, | ||
+ | DC.B $DE, | ||
+ | DC.B $E4, | ||
+ | DC.B $DC, | ||
+ | DC.B $C8, | ||
+ | DC.B $AB, | ||
+ | DC.B $89, | ||
+ | DC.B $67, | ||
+ | DC.B $4B, | ||
+ | DC.B $38, | ||
+ | DC.B $32, | ||
+ | DC.B $3A, | ||
+ | DC.B $4E, | ||
+ | DC.B $6B, | ||
+ | DC.B $FF | ||
+ | </ |
base/flexible_32_sprite_multiplexer.txt · Last modified: 2015-04-17 04:31 by 127.0.0.1