Snowman, I program a game for the Commodore 64
A game written entirely in assembler for the C64
I try to make a game for the Commodore 64 programming everything directly in assembly language.
If you want to try it, programs are available in .d64 formats and for CBM .prg studio
Download the software in .d64 format here.
if you like to see the assembly source codes the project is freely downloadable from the link on this page in the format for “CBM .prg Studio“
Download here the source code for CBM .prg studio.
To see the source codes you will need to install a C64 emulator for PC com and for example il VICE-the Versatile Commodore Emulator.
This project contains numerous useful ideas for learning the programming techniques of the time for making video games on the C64, techniques that should be explained individually by dedicating a specific article to each single topic.
Due to time constraints, I’m posting the codes for now. As soon as I have the opportunity, I will dedicate the explanation to the individual concepts.
The assembler code follows.
; Programming by Alessandro Scola www.alessandroscola.com info@alessandroscola.com
; Music by Wham
; SID Programming by Magnus Djurberg
; 10 SYS (34577)
*=$0801
BYTE $0E, $08, $0A, $00, $9E, $20, $28, $33, $34, $35, $37, $37, $29, $00, $00, $00
*=$8711
LDA #$FF
LDY #$15
STA $D019 ; azzera memoria interrup
JSR $E544 ;CANCELLA SCHERMO
LDA #1
STA $D020 ; colore parte esterna schermo bianca
LDA #6
STA $D021 ; COLORE sfondo
; stampa le scritte di testata
LDY #1 ; con colore bianco
LDX #0
LOOP_TESTATA_1
LDA TESTATA_1,X
STA $0400,X
TYA
STA $D800,X
INX
CPX #40
BNE LOOP_TESTATA_1
LDX #0
LOOP_TESTATA_2
LDA TESTATA_2,X
STA $0450,X
TYA
STA $D850,X
INX
CPX #40
BNE LOOP_TESTATA_2
LDX #0
LOOP_TESTATA_3
LDA TESTATA_3,X
STA $04A0,X
TYA
STA $D8A0,X
INX
CPX #40
BNE LOOP_TESTATA_3
; init music
lda #0
tax
tay
jsr music_player
;IMPOSTA VELOCITA DIFFERENTI PER I FIOCCHI
;IN PAGINA 0 DA $03 a step di 2 butes MEMORIZZO per ogni fiocco OGNI QUANTI FRAMES FAR SCENDERE IL FIOCCO DI 1 PX
LDA #$03 ; 3 = ogni 3 frame
STA $4001 ; REGISTRO SET VELOCITA FIOCCO 1 (SPRITE 2)
STA $4002 ; CONTATORE DECREMENTATO AD OGNI FRAME
LDA #$02
STA $4003 ; REGISTRO SET VELOCITA FIOCCO 2 (SPRITE 3)
STA $4004 ; CONTATORE DECREMENTATO AD OGNI FRAME
LDA #$03 ; 3 = ogni 3 frames
STA $4005 ; REGISTRO SET VELOCITA FIOCCO 3 (SPRITE 4)
STA $4006 ; CONTATORE DECREMENTATO AD OGNI FRAME
LDA #$02 ; 2 = ogni 2 frames
STA $4007 ; REGISTRO SET VELOCITA FIOCCO 4 (SPRITE 5)
STA $4008 ; CONTATORE DECREMENTATO AD OGNI FRAME
LDA #$03 ; 3 = ogni 3 frames
STA $4009 ; REGISTRO SET VELOCITA FIOCCO 5 (SPRITE 6)
STA $400A ; CONTATORE DECREMENTATO AD OGNI FRAME
LDA #$02 ; 2 = ogni 2 frames
STA $400B ; REGISTRO SET VELOCITA FIOCCO 6 (SPRITE 7)
STA $400C ; CONTATORE DECREMENTATO AD OGNI FRAME
; CONTATORE FRAME PER MOVIMENTO GAMBE
LDA #5 ; SPRITE GAMBE CHE CAMMINANO CAMBIANO OGNI 9+1=10 FRAMES
STA $02 ; OGNI QUANTI FRAMES AGGIORNO GAMBE CHE CORORNO
LDA #0
STA $03 ; QUALE DEI 2 SPRITE GAMBE DX STO VISUALIZZANDO ? 0 OPPURE 1
LDA #1 ;FLAG=1 POSIZIONE FIOCCO IN PRIMA META SCHERMO; FLAG=0 POSIZIONO IN SECONDA META
STA $04
LDA #0
STA PUNTEGGIO ; PUNTEGGIO
JSR VISUALIZZA_PUNTEGGIO
Init
lda #$03
sta $D01C ; sprite multicolor
lda #$00
sta $D01D ; Sprite 0 x-expand OFF
sta $D017 ; Sprite 0 y-expand OFF
lda #$FF
sta $D015 ; abilita tutti e 8 gli sprites
lda #09 ; marron
sta $D025 ; ALL SPRITES MULTICOLOR 1
lda #$00 ;nero
sta $D026 ; ALL SPRITES MULTICOLOR 2
; SPRITE 0 corpo snowman
lda #$D3 ; 211
sta $07F8 ; pointer sprite 0
lda #$01 ; bianco
sta $D027 ; sprite 0 color
lda #$A2 ; X
sta $D000 ; sprite 0 X position
lda #$DC
sta $D001 ; sprite 0 Y position
; SPRITE 1 gambe snowman
lda #$D5 ; D5 = 213 e D6 = 214
sta $07F9 ; pointer sprite 1
lda #$01
sta $D028 ; sprite 1 color
lda #$A2
sta $D002 ; sprite 1 X position
lda #$F1
sta $D003 ; sprite 1 Y position
; SPRITE 2-3-4-5-6-7 fiocco di neve 1-2-3-4-5-6
lda #$D9 ; 217
sta $07FA ; pointer sprite 2
STA $07FB ; pointer sprite 3
STA $07FC ; pointer sprite 4
STA $07FD ; pointer sprite 5
STA $07FE ; pointer sprite 6
STA $07FF ; pointer sprite 7
; imposta colore bianco per tutti i fiocchi
lda #$01 ; colore bianco
STA $D029 ; sprite 2 color
STA $D02A ; sprite 3 color
STA $D02B ; sprite 4 color
STA $D02C ; sprite 5 color
STA $D02D ; sprite 6 color
STA $D02E ; sprite 7 color
; imposta posizione X per tutti i fiocchi (SOLO PER DEBUG)
LDA #$20
STA $D004 ; sprite 2 X position
LDA #$30
STA $D006 ; sprite 3 X position
LDA #$40
STA $D008 ; sprite 4 X position
LDA #$50
STA $D00A ; sprite 5 X position
LDA #$60
STA $D00C ; sprite 6 X position
LDA #$70
STA $D00E ; sprite 7 X position
; imposta posizione Y=0 per tutti i fiocchi
LDA #244
STA $D005 ; sprite 2 Y position
STA $D007 ; sprite 3 Y position
STA $D009 ; sprite 4 Y position
STA $D00B ; sprite 5 Y position
STA $D00D ; sprite 6 Y position
STA $D00F ; sprite 7 Y position
lda #0
STA $D01B ; priorità SPRITES rispetto allo sfondo
;-------------------------------------------------
LDX #12
RIPOSIZ_FIOCCHI
JSR RIPOSIZ_FIOCCO_X
DEX
DEX
BNE RIPOSIZ_FIOCCHI
sei ; turn off interrupts
lda #$7f
ldx #$01
sta $dc0d ; Turn off CIA 1 interrupts
sta $dd0d ; Turn off CIA 2 interrupts
stx $d01a ; Turn on raster interrupts
lda #$1b
ldx #$08
ldy #$14
sta $d011 ; Clear high bit of $d012, set text mode
stx $d016 ; single-colour
sty $d018 ; screen at $0400, charset at $2000
lda #<int ; low part of address of interrupt handler code
ldx #>int ; high part of address of interrupt handler code
ldy #$80 ; line to trigger interrupt
sta $0314 ; store in interrupt vector
stx $0315
sty $d012
lda $dc0d ; ACK CIA 1 interrupts
lda $dd0d ; ACK CIA 2 interrupts
asl $d019 ; ACK VIC interrupts
cli
;---------- INIZIO MAIN LOOP ---------------------------------------------------
loop
jmp loop ; LOOP INFINITO
;---------- FINE MAIN LOOP -----------------------------------------------------
;---------- INIZIO ROUTINE RASTER, ESEGUITA AD OGNI REFRESH SCHERMO-------------
int
;LDA #$7
;STA $D020 ; change border colour to yellow
JSR AGGIORNA_FIOCCHI
JSR CHECK_JOYSTICK
JSR CHECK_SPRITES_COLLISIONS
; FACCIO AVANZARE LA MUSICA
JSR music_player + 3
asl $d019 ; ACK interrupt (to re-enable it)
pla
tay
pla
tax
pla
RTI ; return from interrupt
;---------- FINE ROUTINE RASTER, ESEGUITA AD OGNI REFRESH SCHERMO---------------
VISUALIZZA_PUNTEGGIO
; VISUALIZZA PUNTEGGIO SU SCHERMO:
DISPLAY
LDY #5 ; SCREEN OFFSET
LDX #0 ; SCORE BYTE INDEX
SLOOP
LDA PUNTEGGIO,X
PHA
AND #$0F
JSR PLOTDIGIT
PLA
LSR A
LSR A
LSR A
LSR A
JSR PLOTDIGIT
INX
CPX #3
BNE SLOOP
RTS
PLOTDIGIT
CLC
ADC #48 ; 0 = CODICE ASCII 48
STA $04AC,Y
DEY
RTS
; --------------------------------------------------------------------------
AGGIORNA_FIOCCHI
; AGGIORNA LA POSIZIONE Y solo dei fiocchi che devono essere aggiornati in base a velocità
LDX #12 ; OFFSET DA SOMMARE A LOC 4000 PER OTTENERE CONTATORE VELOCITA SPRITE
; DA QUI DECREMENTO FINO A OFFSET=0 CHE CORRISPONDE A LOC 4001 = VELOCITA SPRITE
@LOOP_FIOCCHI
LDA $4000,X ; QUANTI FRAMES SONO PASSATI? SE LOC=0 ALLORA AGGIORNO POSIZIONE Y FIOCCO
SEC
SBC #$01
STA $4000,X ; RIMEMORIZZO CONTATORE DECREMENTATO PER LO SPRITE IN ESAME SBC #$01
BNE @NON_AGGIORNO_FIOCCO_SINGOLO
; SE VELOCITA = 0 ALLORA AGGIORNO POSIZXIONE FIOCCO SINGOLO
LDA $4000-1,X ; riprIStino settaggio velocità
STA $4000,X
LDA $D003,X ; LEGGO COORDINATA Y
CLC
ADC #$01 ; INCREMENTO POSIZIONE Y DEL FIOCCO
STA $D003,X ; SETTO COORDINATA Y
LDA $D003,X
CMP #245 ; SPRITE APPENA FUORI DAL BORDO INFERIORE
BNE @NON_AGGIORNO_FIOCCO_SINGOLO
JSR RIPOSIZ_FIOCCO_X ; SE POSIZIONE Y=0 (FIOCCO USCITO DA SCHERMO IN BASSO) ALLORA RIPOSIZIONO IN X LO SPRITE CON UN NUMERO RANDOM
@NON_AGGIORNO_FIOCCO_SINGOLO
DEX
DEX
BNE @LOOP_FIOCCHI
RTS
; --------------------------------------------------------------------------
RIPOSIZ_FIOCCO_X
LDA #35 ; POSIZIONEO SPRITE CON Y=35 APPENA FUORI DAL BORDO IN ALTO
STA $D003,X ; AGGIORNO POSIZ Y
LDA $04
BNE PRIMAMETASCHERMO
; RESET $04
LDA #1
STA $04
SECONDAMETASCHERMO
; CASO MSB=1
; SETTO MSB=1 PER LO SPRITE GIUSTO
CPX #12 ; SPRITE E' IL NUMERO 7 ?
BNE 2_SP_6
LDA $D010
ORA #%10000000 ; SETTO A 1 MSB SPRITE 7
STA $D010
JMP 2_FINITO
2_SP_6
CPX #10 ; SPRITE E' IL NUMERO 6 ?
BNE 2_SP_5
LDA $D010
ORA #%01000000 ; SETTO A 1 M MSB SPRITE 6
STA $D010
JMP 2_FINITO
2_SP_5
CPX #8 ; SPRITE E' IL NUMERO 5 ?
BNE 2_SP_4
LDA $D010
ORA #%00100000 ; SETTO A 1 M MSB SPRITE 5
STA $D010
JMP 2_FINITO
2_SP_4
CPX #6 ; SPRITE E' IL NUMERO 4 ?
BNE 2_SP_3
LDA $D010
ORA #%00010000 ; SETTO A 1 M MSB SPRITE 4
STA $D010
JMP 2_FINITO
2_SP_3
CPX #4 ; SPRITE E' IL NUMERO 3 ?
BNE 2_SP_2
LDA $D010
ORA #%00001000 ; SETTO A 1 M MSB SPRITE 3
STA $D010
JMP 2_FINITO
2_SP_2
CPX #2 ; SPRITE E' IL NUMERO 2 ?
BNE 2_FINITO
LDA $D010
ORA #%00000100 ; SETTO A 1 M MSB SPRITE 2
STA $D010
2_FINITO
JMP LSB
PRIMAMETASCHERMO
; CASO MSB=0
; SETTO MSB=0 PER LO SPRITE GIUSTO
CPX #12 ; SPRITE E' IL NUMERO 7 ?
BNE 1_SP_6
LDA $D010
AND #%01111111 ; AZZERO MSB SPRITE 7
STA $D010
JMP 1_FINITO
1_SP_6
CPX #10 ; SPRITE E' IL NUMERO 6 ?
BNE 1_SP_5
LDA $D010
AND #%10111111 ; AZZERO MSB SPRITE 6
STA $D010
JMP 1_FINITO
1_SP_5
CPX #8 ; SPRITE E' IL NUMERO 5 ?
BNE 1_SP_4
LDA $D010
AND #%11011111 ; AZZERO MSB SPRITE 5
STA $D010
JMP 1_FINITO
1_SP_4
CPX #6 ; SPRITE E' IL NUMERO 4 ?
BNE 1_SP_3
LDA $D010
AND #%11101111 ; AZZERO MSB SPRITE 4
STA $D010
JMP 1_FINITO
1_SP_3
CPX #4 ; SPRITE E' IL NUMERO 3 ?
BNE 1_SP_2
LDA $D010
AND #%11110111 ; AZZERO MSB SPRITE 3
STA $D010
JMP 1_FINITO
1_SP_2
CPX #2 ; SPRITE E' IL NUMERO 2 ?
BNE 1_FINITO
LDA $D010
AND #%11111011 ; AZZERO MSB SPRITE 2
STA $D010
1_FINITO
; DECREMENTO FLAG X ALTERNARE PRIMA E SECONDA META SCHERMO
LDA $04
SEI
SBC #1
STA $04
LSB
; GENERAZIONE RANDOM COODINATA X
txa
pha
LDA #0
JSR $E09A
LDA $64 ; valore restituito qui
STA $D002,X ; AGGIORNO POSIZ X
pla
tax
RTS
; --------------------------------------------------------------------------
CHECK_JOYSTICK
LDX $DC00 ; legge stato JOYSTICK
CPX #$77 ; JOYSTICK a destra ?
BNE NODESTRA
; ----------------------------------
; JOYSTICK A DESTRA
; ----------------------------------
LDA #$D3 ; 211
STA $07F8 ; cambia immagine sprite (snowman a destra)
; ANIMAZIONE GAMBE:
LDA $02
BNE NON_AGGIORNA_GAMBE_DX ; SE $02<>0 E' NON ORA DI AGGIORNARE LO SPRITE GAMBE DX
; RISPRISTINA 02
LDA #05
STA $02
; CHE PRITE GAMBE DEVO VISUALIZZARE ?
LDA $03
BNE CAMBIO_GAMBE_DX_1 ; SE = 1 ANIMAZIONE GAMBE 1
LDA #1 ; CAMBIO $03
STA $03
CAMBIO_GAMBE_DX_0
LDA #$D5
JMP AGGIORNA_PUNTAT_GAMBE_DX
CAMBIO_GAMBE_DX_1
LDA #0 ; CAMBIO $03
STA $03
; ANIMAZIONE GAMBE 1:
LDA #$D6
AGGIORNA_PUNTAT_GAMBE_DX
STA $07F9 ; cambia imamgine sprite (gambe snowman a destra)
JMP AGGIORNA_POSIZ_PUPAZZO_DX
NON_AGGIORNA_GAMBE_DX
SEI
SBC #01
STA $02 ; DECREMENTO E AGGIORNO $02
AGGIORNA_POSIZ_PUPAZZO_DX
LDA $D010
AND #%00000001
CMP #%00000001 ; flag X > 255 ?
BEQ DESTRA_SOPRA255
INC $D000 ; COORDINATA X PUPAZZO
INC $D002 ; COORDINATA X GAMBE PUPAZZO
BEQ OLTRE255PRIMAVOLTA
JMP FINEJOYSTICK
DESTRA_SOPRA255
; verifica se arrivato a bordo destro
LDX $D000
CPX #$41 ; massimo posizione destra
beq FINEJOYSTICK_DX
inc $D000 ; incrementa posizione X sprite 0
inc $D002 ; incrementa posizione X sprite 1
FINEJOYSTICK_DX
RTS
OLTRE255PRIMAVOLTA
inc $D000
inc $D002
LDA $D010
ORA #%00000011
STA $D010 ; ACCENDO I 2 BIT PIU A DESTRA DI MSB POSIZIONE X
jmp FINEJOYSTICK
INCREMENTAX
inc $D000
inc $D002
NODESTRA
ldx $DC00
cpx #$7B ; JOYSTICK a sinistra ?
bne FINEJOYSTICK
; ----------------------------------
; JOYSTICK A SINISTRA
; ----------------------------------
lda #$D4 ; 212
sta $07F8 ; cambia imamgine sprite (snowman a sinistra)
; ANIMAZIONE GAMBE:
LDA $02
BNE NON_AGGIORNA_GAMBE_SX ; SE $02<>0 E' NON ORA DI AGGIORNARE LO SPRITE GAMBE SX
; RISPRISTINA 02
LDA #05
STA $02
; CHE PRITE GAMBE DEVO VISUALIZZARE ?
LDA $03
BNE CAMBIO_GAMBE_SX_1 ; SE = 1 ANIMAZIONE GAMBE 1
LDA #1 ; CAMBIO $03
STA $03
CAMBIO_GAMBE_SX_0
LDA #$D7
JMP AGGIORNA_PUNTAT_GAMBE_SX
CAMBIO_GAMBE_SX_1
LDA #0 ; CAMBIO $03
STA $03
; ANIMAZIONE GAMBE 1:
LDA #$D8
AGGIORNA_PUNTAT_GAMBE_SX
STA $07F9 ; cambia imamgine sprite (gambe snowman a destra)
JMP AGGIORNA_POSIZ_PUPAZZO_SX
NON_AGGIORNA_GAMBE_SX
SEI
SBC #01
STA $02 ; DECREMENTO E AGGIORNO $02
AGGIORNA_POSIZ_PUPAZZO_SX
LDA $D010
AND #%00000011
CMP #%00000011 ; X > 255 ?
beq SINISTRA_SOPRA255
; verifica se arrivato a bordo sinistro
ldx $D000
cpx #$18 ; minima posizione a sinistra
beq FINEJOYSTICK ; non vado più a sinistra di così
jmp DECREMENTAX
SINISTRA_SOPRA255
; verifica se ero già arrivato a X = 255
ldx $D000 ; POSIZIONE X PUPAZZO
cpx #$00
bne DECREMENTAX
LDA $D010
AND #%11111100 ; AZZERO ULTIMI 2 BIT DI MSB POSIZ X
STA $D010
lda #$FF
sta $D000
sta $D002
jmp FINEJOYSTICK
DECREMENTAX
dec $D000 ; decrementa posizione X sprite 0
dec $D002 ; decrementa posizione X sprite 1
FINEJOYSTICK
RTS
; --------------------------------------------------------------------------
CHECK_SPRITES_COLLISIONS
LDA $D01E
TAY ; LO MEMORIZZO PER DOPO PERCHE DOPO AVER LETTO $D01E ESSO SI RESETTA!
BNE YES_COLLISIONS
RTS
YES_COLLISIONS
; collisione con IL CORPO DEL PUPAZZO ?
AND #%00000001
CLC
LSR A
BCC NO_COLLISIONE_PUPAZZO
INC $D020 ; cambia colore sfondoschermo (solo c debug)
; CON QUALE FIOCCO ?
TYA
AND #%11111100
LSR A ; Shift Right One Bit
LSR A ; Shift Right One Bit
; FIOCCO SPRITE 2 ?
CLC
LSR A
BCC FIOCCO_SP2_NO
JSR INCREMENTA_PUNTEGGIO
; RIPOSIZIONO APPENA FUORI DAL BORDO INFERIORE
LDX #244
STX $D005
FIOCCO_SP2_NO
; FIOCCO SPRITE 3 ?
CLC
LSR A
BCC FIOCCO_SP3_NO
JSR INCREMENTA_PUNTEGGIO
; RIPOSIZIONO APPENA FUORI DAL BORDO INFERIORE
LDX #244
STX $D007
FIOCCO_SP3_NO
; FIOCCO SPRITE 4 ?
CLC
LSR A
BCC FIOCCO_SP4_NO
JSR INCREMENTA_PUNTEGGIO
; RIPOSIZIONO APPENA FUORI DAL BORDO INFERIORE
LDX #244
STX $D009
FIOCCO_SP4_NO
; FIOCCO SPRITE 5 ?
CLC
LSR A
BCC FIOCCO_SP5_NO
JSR INCREMENTA_PUNTEGGIO
; RIPOSIZIONO APPENA FUORI DAL BORDO INFERIORE
LDX #244
STX $D00B
FIOCCO_SP5_NO
; FIOCCO SPRITE 6 ?
CLC
LSR A
BCC FIOCCO_SP6_NO
JSR INCREMENTA_PUNTEGGIO
; RIPOSIZIONO APPENA FUORI DAL BORDO INFERIORE
LDX #244
STX $D00D
FIOCCO_SP6_NO
; FIOCCO SPRITE 7 ?
CLC
LSR A
BCC FIOCCO_SP7_NO
JSR INCREMENTA_PUNTEGGIO
; RIPOSIZIONO APPENA FUORI DAL BORDO INFERIORE
LDX #244
STX $D00F
FIOCCO_SP7_NO
JSR VISUALIZZA_PUNTEGGIO
NO_COLLISIONE_PUPAZZO
RTS
INCREMENTA_PUNTEGGIO
; INCREMENTO PUNTEGGIO E LO STAMPO
; incrementa punteggio
SED ;DECIMAL MODE ON
CLC
LDA PUNTEGGIO
ADC #1
STA PUNTEGGIO
LDA PUNTEGGIO+1
ADC #0
STA PUNTEGGIO+2
CLD ; DECIMAL MODE OFF
RTS
*=$1000
music_player
incbin "Last_Christmas.sid", $7e ; music code and data. Load range: $1000-$34AD
*=$34C0 ; 64 x 211 = $34C0
incbin "snowman.spt",1,2,true
*=$3540 ; 64 x 213 = $3504
incbin "snowman-legs.spt",1,4,true
*=$3640 ; 64 x 217 = $3640
incbin "snowflake.spt",1,1,true
TESTATA_1 text ' snowman by alessandro scola 2022 '
TESTATA_2 text ' music: last christmas by wham '
TESTATA_3 text 'punteggio: '
PUNTEGGIO
BYTE 0,0,0
Официальный сайт казино Joycasino
Joycasino – популярное среди игроков из стран СНГ казино. Казино [url=https://festival-park-zhk.ru/]Джойказино[/url] официально был открыт в 2012 году, сейчас входит в ТОП лучших площадок для азартных игр. Доступны обычные автоматы, спортивные росписи, лайвы. Реализуется щедрая бонусная политика, которая делает игру максимально выгодной и приятной. Перечень слотов постоянно расширяется, в каталоге размещаются слоты проверенных разработчиков.
You can definitely see your skills within the work you write.
The sector hopes for even more passionate writers such as you who are not afraid to say how they believe.
All the time follow your heart.
Here is my web-site :: 640bet เครดิตฟรี
Excellent post. I was checking constantly this weblog and I’m
impressed! Very helpful information specially
the closing part 🙂 I care for such info a lot. I used to be looking for this certain information for a
very long time. Thank you and good luck.
My blog :: casino online
Hi there! Do you know if they make any plugins to help with Search Engine Optimization? I’m trying to
get my blog to rank for some targeted keywords
but I’m not seeing very good results. If you know of any please share.
Kudos!
My webpage: best online casino australia
Have you ever thought about adding a little bit more than just your articles?
I mean, what you say is important and everything. However just imagine if
you added some great photos or videos to give your posts more, “pop”!
Your content is excellent but with images and videos, this blog could undeniably be one of the very
best in its niche. Terrific blog!
Look into my site … discuss
Why viewers still use to read news papers when in this technological world everything is existing on net?
Have a look at my webpage :: บาคาร่า เครดิตฟรี ไม่ต้องฝากก่อน ไม่ต้องแชร์ ยืนยันเบอร์โทรศัพท์
I have read so many posts regarding the blogger lovers except this paragraph is truly a nice
article, keep it up.
Stop by my page – บริการรูดบัตรเครดิต
Simply wish to say your article is as astonishing.
The clarity in your post is just great and i could assume you’re an expert on this subject.
Well with your permission allow me to grab your RSS
feed to keep up to date with forthcoming post. Thanks a million and please carry on the gratifying work.
my page :: online casino birthday bonus
Generally I do not learn article on blogs, but I
wish to say that this write-up very forced me to check out and do so!
Your writing taste has been surprised me. Thank you, quite great article.
Feel free to visit my website: fun88เครดิตฟรี
Официальный сайт 1Вин
1Win – популярное среди игроков из стран СНГ казино. Казино [url=https://kladionica.com/blog/2024/07/17/bukmekerskaja-kontora-1win//]1Win[/url] официально был открыт в 2012 году, сейчас входит в ТОП лучших площадок для азартных игр. Доступны обычные автоматы, спортивные росписи, лайвы. Реализуется щедрая бонусная политика, которая делает игру максимально выгодной и приятной. Перечень слотов постоянно расширяется, в каталоге размещаются слоты проверенных разработчиков.
Официальный сайт 1Вин
1Win – популярное среди игроков из стран СНГ казино. [url=https://nayaabhaandi.com/kak-pravilno-vybrat-razmer-stavki-v-bk-1win/]1Win[/url] официально был открыт в 2012 году, сейчас входит в ТОП лучших площадок для азартных игр. Доступны обычные автоматы, спортивные росписи, лайвы. Реализуется щедрая бонусная политика, которая делает игру максимально выгодной и приятной. Перечень слотов постоянно расширяется, в каталоге размещаются слоты проверенных разработчиков.
Официальный сайт 1Вин
1Win – популярное среди игроков из стран СНГ казино. [url=https://intelimagem.com.br/2024/07/17/fribet-1vin-na-oficialnom-sajte-bk-1win-luchshie/]1Win[/url] официально был открыт в 2012 году, сейчас входит в ТОП лучших площадок для азартных игр. Доступны обычные автоматы, спортивные росписи, лайвы. Реализуется щедрая бонусная политика, которая делает игру максимально выгодной и приятной. Перечень слотов постоянно расширяется, в каталоге размещаются слоты проверенных разработчиков.
Официальный сайт 1Вин
1Win – популярное среди игроков из стран СНГ казино. [url=https://www.mattmorris.com/bk-1win-obzor-i-rejting-bukmekerskoj-kontory-1vin/]1Win[/url] официально был открыт в 2012 году, сейчас входит в ТОП лучших площадок для азартных игр. Доступны обычные автоматы, спортивные росписи, лайвы. Реализуется щедрая бонусная политика, которая делает игру максимально выгодной и приятной. Перечень слотов постоянно расширяется, в каталоге размещаются слоты проверенных разработчиков.
Официальный сайт 1Вин
1Win – популярное среди игроков из стран СНГ казино. [url=https://www.4mamas-club.com/1vin-sajt-kak-delat-stavki/]1Win[/url] официально был открыт в 2012 году, сейчас входит в ТОП лучших площадок для азартных игр. Доступны обычные автоматы, спортивные росписи, лайвы. Реализуется щедрая бонусная политика, которая делает игру максимально выгодной и приятной. Перечень слотов постоянно расширяется, в каталоге размещаются слоты проверенных разработчиков.
Официальный сайт 1Вин
1Win – популярное среди игроков из стран СНГ казино. [url=https://www.midual.com/2024/07/17/obzor-bukmekerskoj-kontory-1vin/]1Win[/url] официально был открыт в 2012 году, сейчас входит в ТОП лучших площадок для азартных игр. Доступны обычные автоматы, спортивные росписи, лайвы. Реализуется щедрая бонусная политика, которая делает игру максимально выгодной и приятной. Перечень слотов постоянно расширяется, в каталоге размещаются слоты проверенных разработчиков.
Hey! I’m at work surfing around your blog from my new apple
iphone! Just wanted to say I love reading
through your blog and look forward to all your posts!
Keep up the outstanding work!
Look into my blog post … บัตร เครดิต ฟรี ค่าธรรมเนียม ตลอด ชีพ
Официальный сайт 1Вин
1Win – популярное среди игроков из стран СНГ казино и бк. 1Win официально был открыт в 2012 году, сейчас входит в ТОП лучших площадок для азартных игр. Доступны обычные автоматы, спортивные росписи, лайвы. Реализуется щедрая бонусная политика, которая делает игру максимально выгодной и приятной. Перечень слотов постоянно расширяется, в каталоге размещаются слоты проверенных разработчиков.
[url=https://innerchoice.com.br/mobilnaja-versija-bk-1win]1Win[/url]
[url=https://millacfoods.com/1vin-bonus-za-registraciju-na-sajte-bk-1win-bez-2/]1 Win[/url]
[url=https://lamercedpuno.edu.pe/luchshaja-bk-1vin/]1 Вин[/url]
[url=https://uralecotour.ru/1win-bukmekerskaja-kontora-na-legalbet-obzor-2/]1вин[/url]
[url=http://www.krizia.it/en/bez-rubriki/obzor-1win-pljusy-i-minusy-bukmekerskoj-kontory/]1vin[/url]
[url=https://holelisting.com/1win-registracija-i-vhod-v-bk-1vin-kak/]ванвин[/url]
[url=https://bakodx.com/fribet-1vin-na-oficialnom-sajte-bk-1win-luchshie-2/]ван вин[/url]
[url=https://moonlightpublishers.com/1win-fribet-pri-registracii-bonus-za-registraciju-2/]1вин Официальный сайт[/url]
[url=http://mireli.ge/bukmekerskaja-kontora-1win-3/]1вин мобильная версия[/url]
[url=https://knowledgehub.devolution.go.ke/bez-rubriki/]1Вин скачать[/url]
[url=https://www.lateroundqb.com/1vin-sajt-kak-delat-stavki-2/]1вин казино[/url]
[url=https://www.myperfumes.store/1win-bukmekerskaja-kontora-na-legalbet-obzor-3/]1Вин вин казино[/url]
[url=https://www.leventsennaroglu.com.tr/luchshaja-bk-1vin-2/]1Win[/url]
[url=https://meijournals.com/?p=124153]1Win[/url]
[url=https://karimnagardccb.org/2024/07/17/kak-vyvesti-dengi-s-bk-1win-1vin-2/]1Win[/url]
[url=https://www.tct.com.bd/novye-sobytija-v-bk-1vin-2/]1Win[/url]
[url=https://offlinecafe.bg/1win-registracija-i-vhod-v-bk-1vin-kak-2/]1Win[/url]
Официальный сайт 1Вин
1Win – популярное среди игроков из стран СНГ казино и бк. 1Win официально был открыт в 2012 году, сейчас входит в ТОП лучших площадок для азартных игр. Доступны обычные автоматы, спортивные росписи, лайвы. Реализуется щедрая бонусная политика, которая делает игру максимально выгодной и приятной. Перечень слотов постоянно расширяется, в каталоге размещаются слоты проверенных разработчиков.
[url=https://www.skincityindia.com/2024/07/17/1win-zerkalo-oficialnogo-sajta-rabochee-na/]1Win[/url]
[url=https://nargileta.bg/kak-vyvesti-dengi-s-bk-1win-1vin-3/bez-rubriki/]1 Win[/url]
[url=https://kcporktrs.dp.ua/bukmekerskaja-kontora-1win-4/]1 Вин[/url]
[url=https://anandpharmacy.in/1win-fribet-pri-registracii-bonus-za-registraciju-3/]1вин[/url]
[url=https://iris.com.py/bez-rubriki-6/1win-zerkalo-oficialnogo-sajta-rabochee-na-2/]1vin[/url]
[url=https://onelifefinancial.co.nz/1win-registracija-i-vhod-v-bk-1vin-kak-4/]ванвин[/url]
[url=https://ekadharma.com/bez-rubriki/bukmekerskaja-kontora-1win-kak-vyvesti-dengi/]ван вин[/url]
[url=https://newwavegippsland.com/1vin-bonus-za-registraciju-na-sajte-bk-1win-bez-3/]1вин Официальный сайт[/url]
[url=https://www.kalymnoscopio-estate.gr/1vin-sajt-kak-delat-stavki-3/]1вин мобильная версия[/url]
[url=https://www.hospitaldeclinicas.uba.ar/?p=4797]1Вин скачать[/url]
[url=https://nongbuokhok.go.th/bez-rubriki/1win-registracija-i-vhod-v-bk-1vin-kak-3/]1вин казино[/url]
[url=https://le-caribeen.fr/1win-oficialnyj-sajt-bk-1vin-vhod-na-zerkalo-3/]1Вин вин казино[/url]
[url=https://www.khalifahmedia.bbn.my/2024/07/17/1vin-bonus-za-registraciju-na-sajte-bk-1win-bez-4/]1Win[/url]
[url=https://ksp.sg/1win-skachat-na-android-i-ios-c-oficialnogo-sajta-2/]1Win[/url]
[url=https://www.italnoleggi.com/2024/07/17/1win-zerkalo-rabochee-dlja-vhoda-na-oficialnyj/]1Win[/url]
[url=https://mydeepin.ru/1win-zerkalo-rabochee-dlja-vhoda-na-oficialnyj-3/]1Win[/url]
[url=https://notaria1bucaramanga.com.co/2024/07/17/1win-skachat-na-android-i-ios-c-oficialnogo-sajta-4/]1Win[/url]
Please let me know if you’re looking for a writer for your site.
You have some really great posts and I believe I
would be a good asset. If you ever want to take some of the load
off, I’d really like to write some articles for your blog in exchange for a link back
to mine. Please shoot me an email if interested. Kudos!
My blog post: ร้านไวน์สาทร
Oh my goodness! Impressive article dude! Thank you so much, However I am encountering problems with your RSS. I don’t understand the reason why I can’t join it. Is there anybody else getting the same RSS problems? Anyone that knows the answer can you kindly respond? Thanx!
Spot on with this write-up, I honestly think this site needs much more attention. I’ll probably be returning to read more, thanks for the info!
Hello! I simply want to offer you a huge thumbs up for your great information you have right here on this post. I’ll be coming back to your website for more soon.
Everything is very open with a really clear description of the issues. It was really informative. Your website is extremely helpful. Many thanks for sharing.