processor 6502 include "vcs.h" include "macro.h" MAC LineaMarquee LDX #4 ; 192 Scanlines to Display LDY #0 .Draw_Picture ;LDA #0 ;STA PF0 ;STA PF1 ;STA PF2 LDA {1},Y ADC {2},Y STA $BE,X LDA {3},Y ADC {4},Y STA $C3,X LDA {5},Y ADC {6},Y STA $C8,X LDA {7},Y ADC {8},Y STA $CD,X LDA {9},Y ADC {10},Y STA $D3,X INY DEX BNE .Draw_Picture ENDM ; MAC LineaMarqueeEx ; LDA #8 ; STA $80 ;.DoblePasada ; STA WSYNC ; LDA $D9,Y ; STA PF0 ; LDA $DE,Y ; STA PF1 ; LDA $E4,Y ; STA PF2 ; SLEEP 12 ; LDA $E9,Y ; STA PF0 ; LDA $EE,Y ; STA PF1 ; LDA $F4,Y ; STA PF2 ; ; DEC $80 ; BNE .DoblePasada ; JMP Retorno ; ENDM MAC Linea1old LDX #4 ; 192 Scanlines to Display LDY #0 .Draw_Picture LDA #0 STA PF0 STA PF1 STA PF2 LDA {2},Y ADC {3},Y STA $92 LDA {4},Y ADC {5},Y STA $93 LDA {7},Y ADC {8},Y STA $94 LDA {9},Y ADC {10},Y STA $95 LDA #8 STA $80 .DoblePasada STA WSYNC LDA {1},Y STA PF0 LDA $92 STA PF1 LDA $93 STA PF2 SLEEP 12 LDA {6},Y STA PF0 LDA $94 STA PF1 LDA $95 STA PF2 DEC $80 BNE .DoblePasada INY DEX BNE .Draw_Picture JMP Retorno ENDM MAC Linea2old LDX #4 ; 192 Scanlines to Display LDY #0 .Draw_Picture2 LDA #0 STA PF0 STA PF1 STA PF2 LDA {2},Y ADC {3},Y STA $92 LDA {4},Y ADC {5},Y STA $93 LDA {7},Y ADC {8},Y STA $94 LDA {9},Y ADC {10},Y STA $95 LDA #8 STA $80 .DoblePasada2 STA WSYNC LDA {1},Y STA PF0 LDA $92 STA PF1 LDA $93 STA PF2 SLEEP 12 LDA {6},Y STA PF0 LDA $94 STA PF1 LDA $95 STA PF2 DEC $80 BNE .DoblePasada2 INY DEX BNE .Draw_Picture2 JMP Retorno2 ENDM MAC Linea1 LDA <#{1} STA $92 LDA >#{1} STA $93 LDA <#{2} STA $94 LDA >#{2} STA $95 LDA <#{3} STA $96 LDA >#{3} STA $97 LDA <#{4} STA $98 LDA >#{4} STA $99 JSR Linea JMP Retorno ENDM MAC Linea2 LDA <#{1} STA $92 LDA >#{1} STA $93 LDA <#{2} STA $94 LDA >#{2} STA $95 LDA <#{3} STA $96 LDA >#{3} STA $97 LDA <#{4} STA $98 LDA >#{4} STA $99 JSR Linea JMP Retorno2 ENDM MAC Linea1pir LDX #4 ; 192 Scanlines to Display LDY #0 .Draw_Picture LDA #0 STA PF0 STA PF1 STA PF2 LDA {2},Y ADC {3},Y STA $92 LDA {4},Y ADC {5},Y STA $93 LDA {7},Y ADC {8},Y STA $94 LDA {9},Y ADC {10},Y STA $95 LDA #8 STA $80 .DoblePasada STA WSYNC LDA {1},Y STA PF0 LDA $92 STA PF1 LDA $93 STA PF2 SLEEP 12 LDA {6},Y STA PF0 LDA $94 STA PF1 LDA $95 STA PF2 DEC $80 BNE .DoblePasada INY DEX BNE .Draw_Picture JMP Retorn ENDM MAC Linea2pir LDX #4 ; 192 Scanlines to Display LDY #0 .Draw_Picture2 LDA #0 STA PF0 STA PF1 STA PF2 LDA {2},Y ADC {3},Y STA $92 LDA {4},Y ADC {5},Y STA $93 LDA {7},Y ADC {8},Y STA $94 LDA {9},Y ADC {10},Y STA $95 LDA #8 STA $80 .DoblePasada2 STA WSYNC LDA {1},Y STA PF0 LDA $92 STA PF1 LDA $93 STA PF2 SLEEP 12 LDA {6},Y STA PF0 LDA $94 STA PF1 LDA $95 STA PF2 DEC $80 BNE .DoblePasada2 INY DEX BNE .Draw_Picture2 JMP Retorn2 ENDM Gris = 8 Marron = 4*8 Verde = 3*16 + 10 Naranja = 4*16 + 10 Celeste = 9*16 + 14 Azul = 11*16 + 4 Amarillo = 2*16 + 14 ; es amarillo? Rojo = 6*16 + 4 ; es rojo? PunteroRoom = $86 PunteroRoomBKP = $8C TieneObjeto = 1 Guante = 2 Lamp = 4 Llave = 8 PushQ = 16 Dia2 = 32 Inventario = $8E ControlBoton = $8F Temp = $91 DuracionNota = $A2 Noparray = $A8 Personaje = $A9 TogCamina = $AB ContaX = $AC Vueltas = $AD TogPersonaje = $AE Personaje1 = $AF Personaje2 = $B1 Vueltas1 = $B3 Vueltas2 = $B4 ContAnim = $B5 PuntAnim = $B6 SaltAnim = $B7 Noparray2 = $B9 RoomP1 = $BA RoomP2 = $BB ContaY = $C3 ColPir = $C4 ColPir2 = $C5 Scor = $C6 Digi1 = $C8 Digi2 = $CA Digi3 = $CC Digi4 = $CE Vueltas3 = $F1 Vueltas4 = $F2 Puntaje = $F3 Backg = $FA Backg2 = $FC CaeCabz = Noparray2 ColorBK = Noparray YardCastle = PunteroRoom YardCastle2 = PunteroRoomBKP Delay = Vueltas3 Curvit = $D4 Curvit2 = $D5 Curvit3 = $D6 Curvit4 = $D7 Curvit5 = $D8 Curvit6 = $D9 Curvit7 = $DA Curvit8 = $DB Velo = $FD;CaeCabz Motor = $DC Motor2 = $DD Motor3 = $DE Motor4 = $DF C_7 = 0 C_6 = 1 F_5 = 2 C_5 = 3 Gs_4 = 4 F_4 = 5 D_4 = 6 C_4 = 7 As_3 = 8 Gs_3 = 9 Fs_3 = 10 F_3 = 11 Ds_3 = 12 D_3 = 13 Cs_3 = 14 C_3 = 15 B_2 = 16 As_2 = 17 A_2 = 18 Gs_2 = 19 G_2 = 20 Fs_2 = 21 F_2 = 23 E_2 = 24 Ds_2 = 25 D_2 = 27 Cs_2 = 29 C_2 = 30 Amanecer = 8 ;///////////////// Start of Code ///////////////////////////////////// SEG ORG $F000 JMP Sajmp Sabnk LDA $1FF8 NOP NOP NOP NOP JMP Start_Frame Sajmp Reset ; Clear RAM, TIA registers and Set Stack Pointer to #$FF SEI CLD LDX #$FF TXS LDA #0 Clear_Mem STA 0,X DEX BNE Clear_Mem LDA #$00 STA COLUBK ; Set Background to Black ;LDA #15*8 ;STA COLUPF ldx #60 setP1 nop dex bne setP1 sta RESP0 sta WSYNC ldx #30;Scor;#192;Scor;112 dobl nop dex bne dobl sta RESP1;RESM1;RESP1 lda <#(Sprit + 30) sta ContAnim lda >#Sprit sta PuntAnim lda <#Sprit sta RoomP1 lda >#Sprit sta RoomP2 lda <#Sprit - 30 sta ColPir lda >#Sprit sta ColPir2 lda #1 sta Velo sta Delay sta Vueltas lda #10;15 sta ContaX sta ContaY ;/////////////////// Picture Starts Here ///////////////////////////// Start_Frame ;SLEEP 42 lda #21 ;esto si hay algo en el Anim2 va 24, si solo hay un jmp retornoanim va 25, porque se hacen lineas impares y eso hace que se ponga todo en blanco y negro sta T1024T LDA #8 STA COLUPF ; Start VSYNC LDA #2 STA VSYNC STA WSYNC STA WSYNC STA WSYNC ; 3 Scanlines of VSYNC LDA #0 STA VSYNC ; End VSYNC ; 37 Scanlines of Vertical Blank... LDX #37 Vertical_Blank STA WSYNC DEX BNE Vertical_Blank LDA #0 STA VBLANK ; Enable TIA Output ;////////////// Start To Draw Playfield /////////////////////////////// LDX #4 ; Frase 1 empieza mas arriba Tiempo STA WSYNC DEX BNE Tiempo ; JMP ($82);Frase1 Retorno LDA #0;Cero2 STA PF0 STA PF1 STA PF2 STA WSYNC STA WSYNC STA WSYNC STA WSYNC STA WSYNC STA WSYNC LDA #1 STA CTRLPF ; JMP ($84);Frase2 Retorno2 LDA #0 ;Cero2 STA PF0 STA PF1 STA PF2 ;lda #255 ;sta PF0 ;LDA #1 ;STA CTRLPF ;JMP ($88) jmp Ciudad0 Retorno7 lda #$60;40 sta HMP0 sta WSYNC sta HMOVE sta WSYNC ;sta WSYNC ;sta WSYNC ;sta WSYNC ;lda #$E0 ;sta HMP0 ;sta WSYNC ;sta HMOVE ;sta WSYNC ;sta WSYNC ;sta WSYNC ;sta WSYNC jmp Ciudad Retorno3 Retorno5 ;jmp Ciudad15 Retorno8 jmp Ciudad2 Retorno6 lda #$D0;E0 clc adc CaeCabz sta HMP0 sta WSYNC sta HMOVE LDA #1;0 STA CTRLPF ;lda #3; Verde + 3 ;sta COLUBK LDA #255;0 ;Cero2 STA PF0 STA PF1 STA PF2 LDA #0 STA GRP0 STA GRP1 inc Puntaje ;LDA $BD ;BEQ Retorno4 ;JMP Musica Retorno4 ;LDX #184 LDX #17;9;18;40;90;50;30;50;90;112 DibujaCola STA WSYNC DEX BNE DibujaCola sta HMOVE Deci LDA SWCHA AND #%00010000 BEQ DecisionNear LDA SWCHA AND #%01000000 BEQ Decision2Near LDA SWCHA AND #%00100000 BEQ Decision3Near LDA SWCHA AND #%10000000 BEQ Decision4Near ;BEQ TogImg LDA INPT4 BMI RetDeci JMP Boton;Decision DecisionNear JMP Decision Decision2Near JMP Decision2 Decision3Near JMP Decision3 Decision4Near JMP Decision4 RetDeci dec Delay beq ResDel jmp Ress ResDel lda Velo sta Delay inc RoomP1 inc ColPir inc ContAnim lda ControlBoton beq vib jmp vibs vib lda Puntaje and #%00001111 sta Puntaje tay lda loma,Y clc adc ContaX sta ContaX vibs lda ControlBoton beq junp cmp #2 beq Bajar lda ContaX;TogPersonaje cmp #18;11 bmi junpx jmp jun junpx inc ContaX inc ContaY inc TogPersonaje jmp junp jun lda #2 sta ControlBoton jmp junp Bajar lda ContaX;TogPersonaje cmp #10;1 bmi stox dec ContaX dec ContaY dec TogPersonaje jmp junp stox lda #0 sta ControlBoton junp Ress dec Vueltas ;; dec Vueltas4 beq Stop jmp Stos Stop lda #0 ;sta HMP0 sta HMP1 sta CaeCabz sta WSYNC sta HMOVE Stos Curet ; lda Vueltas4 ;Motor4;Velo;ContaX ;Scor ; and #$E ;7 ; asl ;mult x 4 ; ;asl ; clc ; adc <#Numeros2 ; sta Digi1 ; lda >#Numeros2 ; sta Digi1 + 1 ; ; lda Vueltas4 ;Motor4 ;Velo;ContaX ;Scor ; and #$70 ;E0 ; lsr ; lsr ; lsr ; lsr ; asl ;mult x 4 ; asl ; clc ; adc <#Numeros ; sta Digi2 ; lda >#Numeros ; sta Digi2 + 1 ;////////////// End Of Display //////////////////////////////////////// LDA #%01000010 ; Disable VIA Output STA VBLANK ; 30 scanlines of overscan... ; LDX #30 ;Overscan STA WSYNC ; DEX ; BNE Overscan OverscanLoop lda INTIM bne OverscanLoop sta WSYNC JMP Start_Frame ; Playfield generated by TIA Playfield Painter ; Mode Used = ASYMMETRICAL ; Playfields generated = PF0, PF1, PF2, PF3, PF4, PF5 ; Datas lines are reversed ; 192 Line(s) saved = 191 - 0 Decision dec Velo beq ResVel jmp RetDeci ResVel lda #1 sta Velo jmp RetDeci Decision2 lda #20 sta Vueltas lda #0 sta Temp lda #$F0 sta HMP0 sta CaeCabz lda #$E0 sta HMP1 jmp RetDeci Decision3 inc Velo jmp RetDeci Decision4 lda #20 sta Vueltas lda #1 sta Temp lda #$10 sta HMP0 sta CaeCabz lda #$20 sta HMP1 jmp RetDeci Boton lda #1 sta ControlBoton jmp RetDeci .ALIGN 256 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 Enemigo .byte #%00000000 .byte #%00011000 .byte #%00011000 .byte #%00111100 .byte #%01011010 .byte #%10011001 .byte #%01011010 .byte #%00111100 .byte #%11111111 .byte #%10011001 .byte #%10011001 .byte #%11111111 .byte #%11111111 .byte #%00111100 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 Sprit .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 .byte #%00010000 .byte #%00000000 Moto .byte #%00000000 .byte #%00000000 .byte #%00000000 .byte #%00011000 .byte #%00011000 .byte #%01111110 .byte #%10111101 .byte #%10111101 .byte #%10111101 .byte #%00111100 .byte #%01011010 .byte #%00111100 .byte #%00011000 .byte #%00011000 .byte #%00000000 Ciudad ;lda Sprit,Y ;sta GRP0 lda #0;Azul sta COLUP0 sta COLUPF lda #6;2;3 sta NUSIZ0 lda #2 sta $80 ldx #0 ldy ContaY ;#15 lda #Naranja - 2 ;Azul - 2 ;Naranja - 2 sta COLUBK lda #16 sta PF0 lda #128 sta PF2 CiuLoop sta CXCLR sta WSYNC ;sty COLUP0 ;tya ;clc ;adc #Naranja-10;Celeste ;sta COLUP0 lda (RoomP1),Y sta GRP0 ; lda CXP0FB ; and #128 ; beq Tocas Toca ; lda #4 ; sta Vueltas4 ; lda Temp ; beq Iz ; lda #$F0 ; sta HMP0 ; lda #$E0 ; sta HMP1 ; lda #0 ; sta Temp ; jmp Tocas ;Iz lda #$10 ; sta HMP0 ; lda #$20 ; sta HMP1 ; lda #1 ; sta Temp Tocas sta WSYNC sta WSYNC inx dey bne CiuLoopN jmp Retorno5 CiuLoopN jmp CiuLoop Ciudad2 lda #0 sta GRP0 lda #0;Azul sta COLUP1 sta COLUPF lda #5;0;6 sta NUSIZ1 lda #4 sta $80 ldx #0 ldy ContaX ;#15 lda #Naranja; Azul; Naranja sta COLUBK lda #16 sta PF0 lda #128 sta PF2 sta CXCLR CiuLoop2 sta WSYNC ;sty COLUP1 ;tya ;clc ;adc #Naranja-10;Celeste ;sta COLUP1 lda (ColPir),Y sta GRP1 sta WSYNC sta WSYNC sta WSYNC sta WSYNC inx dey bne CiuLoopN2 jmp Retorno6 CiuLoopN2 jmp CiuLoop2 Ciudad0 lda #0;Azul sta COLUP0 sta COLUPF lda #3;1;3 sta NUSIZ0 lda #2 sta $80 ldx #0 ldy ContaX ;#15 lda #Naranja - 3 ;Azul - 3 ;Naranja - 3 sta COLUBK lda #16 sta PF0 lda #128 sta PF2 CiuLoop0 sta CXCLR sta WSYNC ;sty COLUP0 ;tya ;clc ;adc #Naranja-10;Celeste ;sta COLUP0 lda (ContAnim),Y sta GRP0 sta WSYNC inx dey bne CiuLoopN0 jmp Retorno7 CiuLoopN0 jmp CiuLoop0 Ciudad15 ; lda #0;Azul ; sta COLUP1 ; sta GRP0 ; lda #5 ; sta NUSIZ1 ; lda #2 ; sta $80 ; ldx #0 ; ldy #15 ; lda #Naranja - 1 ; sta COLUBK ; lda #16 ; sta PF0 CiuLoop15 ; sta CXCLR ; sta WSYNC ; lda (ContAnim),Y ; sta GRP1 ; sta WSYNC ; sta WSYNC ; sta WSYNC ; inx ; dey ; bne CiuLoopN15 ; jmp Retorno8 CiuLoopN15 ; jmp CiuLoop15 ;.ALIGN 256 loma .byte #255 .byte #255 .byte #255 .byte #255 .byte #255 .byte #0 .byte #0 .byte #0 .byte #0 .byte #0;1 .byte #1;1 .byte #1;1 .byte #1;1 .byte #1;1 .byte #1;1 .byte #0;1 .byte #0;1 ;////////////// Set Vectors /////////////////////////////////////////// ORG $FFFA ; Interrupt Vectors .word Reset ; NMI .word Reset ; RESET .word Reset ; IRQ ;END END