Alıntı yapılan: unay - 05 Kasım 2025, 14:45:29Alıntı yapılan: Hifly - 05 Kasım 2025, 14:37:51Alıntı yapılan: unay - 05 Kasım 2025, 13:29:21
PCB siparişi vermiş olabilirim.
Olasılıklar:
1- Siparişi verdi, onay sayfası çıkmadı o yüzden emin olamadı
2- Schrödinger'in kedisi hesabı kutuyu açmadan bilemiyor, sipariş süper pozisyon durumunda.
Amstrad camiası adına verildiğini umuyoruz :)
MSX için bir gazla girdiğim Spider Flash ve DC-600 floppy controller işini 6 ayda bitirince böyle ucu açık söylemler...
PCB'ler yolda. STM32F407 çipde gelecek, kalanlar yurtiçinden temin edilir sanırım.
Geriye bunları bir araya getirecek birini bulmak kalıyor :)
Amstrad camiası dediğin zaten 3,5 kişi falan herhalde
Alıntı yapılan: Hifly - 05 Kasım 2025, 14:37:51Alıntı yapılan: unay - 05 Kasım 2025, 13:29:21
PCB siparişi vermiş olabilirim.
Olasılıklar:
1- Siparişi verdi, onay sayfası çıkmadı o yüzden emin olamadı
2- Schrödinger'in kedisi hesabı kutuyu açmadan bilemiyor, sipariş süper pozisyon durumunda.
Amstrad camiası adına verildiğini umuyoruz :)
Alıntı yapılan: unay - 05 Kasım 2025, 13:29:21
PCB siparişi vermiş olabilirim.
Alıntı yapılan: hades - 20 Ekim 2025, 21:49:06
Bir kaç sene önce çizdiğim ddi pcb si. Yapmak isteyen olursa gerber dosyalarını göndereyim. Çalışır mı çalışmaz mı orasını bilemem.
Ekleme: 2018'de çizmişim.
// Ref 2025 -- https://zx.tr/ret
// "the inevitable end"
#include <stdlib.h>
#include <cv.h>
#include <cvu.h>
#include "common.h"
byte b;
word pg;
byte logo_y, logo_x;
byte draw_y;
byte draw_x;
// LUT çünk RND komutu ~1 frame sürüyor, saçmalık
byte random_color_table[256];
byte random_index = 0;
// Sprite pattern isimleri
#define SPRITE_NAME_ref 0
#define SPRITE_NAME_BALL_ROUND 4
#define SPRITE_NAME_BALL_STRETCH 8
#define SPRITE_NAME_BALL_SQUASH 12
// üşendim 16x16 sprite kullandım bu yüzden boş spritelara ihtiyacım var
const unsigned char blank_pattern[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
void setup_random_table() {
int i;
for (i = 0; i < 256; i++) {
random_color_table[i] = (rand() & 14) + 1;
}
}
void vdp_setup() {
cv_set_screen_active(false);
cv_set_screen_mode(CV_SCREENMODE_STANDARD);
cv_set_image_table(IMAGE);
cv_set_character_pattern_t(PATTERN);
cv_set_color_table(COLOR);
cv_set_sprite_pattern_table(SPRITE_PATTERNS);
cv_set_sprite_attribute_table(SPRITES);
cv_set_sprite_big(true);
}
const char *all_logos[3][5] = {
{ "RRR EEEE TTT RRR OOO J EEEE N N", "R R E T R R O O J E NN N", "RRR EEE T RRR O O J EEE N N N", "R R E T R R O O J E N NN", "R R EEEE T R R OOO JJ EEEE N N" },
{ " SSSSPPP I DDD EEEEERRR FFFFFL A SSS H H", "S P I D D E R F L A A S H H", " SSS PPP I D D EEE RRR FFF L AAAAA SSS HHHHH", " S P I D D E R R F L A A S H H", "SSS P I DDD EEEE R RRF LLLLA ASSS H H" },
{
"TTTTT H H X X 222 U U N N AAA Y Y",
" T H H X X 2 U U NN N A A Y Y ",
" T HHHHH X 22 U U N N N AAAAA Y ",
" T H H X X 2 U U N NN A A Y ",
" T H H X X 2222 UUU N N A A Y "
}};
const byte logo_x_positions[3] = {12, 7, 8};
//ref bitmapı
const unsigned char ref_sprite_pattern[16] = {
0x06, 0x18, 0xA0, 0xC1, 0x92, 0xAA, 0xBA, 0xA7, 0x32, 0x1A, 0x02, 0x04, 0x04, 0x08, 0x30, 0x00
};
//animasyon bilgimizi konuşturalım yani
const unsigned char ball_round_pattern[8] = {
0x00, 0x3C, 0x7E, 0x7E, 0x7E, 0x7E, 0x3C, 0x00
};
const unsigned char ball_stretch_pattern[8] = {
0x18, 0x3C, 0x7E, 0x7E, 0x7E, 0x7E, 0x3C, 0x18
};
const unsigned char ball_squash_pattern[8] = {
0x00, 0x00, 0x00, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E
};
//bu colecovision structu
struct cvu_sprite my_sprite_attributes[2];
void setup_my_sprite_pattern() {
// Ref (16x16) aslında iki tane 8'lik kullanmak vardı, chetçipiti'ye kandım yanlış başladım, şimdi ceremesini çek işte
cvu_memtovmemcpy(SPRITE_PATTERNS + (SPRITE_NAME_ref * 8), ref_sprite_pattern, sizeof(ref_sprite_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (2 * 8), blank_pattern, sizeof(blank_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (3 * 8), blank_pattern, sizeof(blank_pattern));
// YUVARLAK TOP Bloku
cvu_memtovmemcpy(SPRITE_PATTERNS + (SPRITE_NAME_BALL_ROUND * 8), ball_round_pattern, sizeof(ball_round_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (5 * 8), blank_pattern, sizeof(blank_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (6 * 8), blank_pattern, sizeof(blank_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (7 * 8), blank_pattern, sizeof(blank_pattern));
// UZAMIŞ TOP Bloku
cvu_memtovmemcpy(SPRITE_PATTERNS + (SPRITE_NAME_BALL_STRETCH * 8), ball_stretch_pattern, sizeof(ball_stretch_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (9 * 8), blank_pattern, sizeof(blank_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (10 * 8), blank_pattern, sizeof(blank_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (11 * 8), blank_pattern, sizeof(blank_pattern));
// YAYILMIŞ TOP Bloku
cvu_memtovmemcpy(SPRITE_PATTERNS + (SPRITE_NAME_BALL_SQUASH * 8), ball_squash_pattern, sizeof(ball_squash_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (13 * 8), blank_pattern, sizeof(blank_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (14 * 8), blank_pattern, sizeof(blank_pattern));
cvu_memtovmemcpy(SPRITE_PATTERNS + (15 * 8), blank_pattern, sizeof(blank_pattern));
}
void multicolor_fullscreen_image_table(word ofs) {
byte x,y;
for (y=0; y<48; y++) { for (x=0; x<32; x++) { cvu_voutb(x + (y>>2)*32, ofs++); } }
}
void setup_multicolor() {
cvu_vmemset(0, 0, 0x4000);
cv_set_image_table(IMAGE);
cv_set_character_pattern_t(PATTERN);
cv_set_screen_mode(CV_SCREENMODE_MULTICOLOR);
multicolor_fullscreen_image_table(IMAGE);
}
void set_pixel(byte x, byte y, byte color) {
if (x >= 64 || y >= 48) return;
pg = (x>>1)*8 + (y & 7) + (y & ~7)*32 + PATTERN;
b = cvu_vinb(pg);
if (x&1) b = color | (b & 0xf0); else b = (color<<4) | (b & 0xf);
cvu_voutb(b, pg);
}
// şu anda 25FPS'e göre ayarlandı. 50fps için bunu 20 yapın
#define PIXELS_PER_FRAME 35
const char bounce_table[16] = {
0, -3, -6, -9, -12, -14, -15, -16, -16, -15, -14, -12, -9, -6, -3, 0
};
const byte ref_base_y = 20;
const byte ball_base_y = 175;
byte bounce_step = 0;
#ifdef __MAIN__
void main() {
byte current_logo_index = 0;
word display_counter = 0;
byte pixels_drawn_this_frame;
byte ball_x = 120;
char ball_direction_x = 1;
vdp_setup();
setup_multicolor();
setup_random_table();
setup_my_sprite_pattern();
my_sprite_attributes[0].y = ref_base_y;
my_sprite_attributes[0].x = 240;
my_sprite_attributes[0].name = SPRITE_NAME_ref;
my_sprite_attributes[0].tag = CV_COLOR_LIGHT_BLUE;
my_sprite_attributes[1].y = ball_base_y;
my_sprite_attributes[1].x = ball_x;
my_sprite_attributes[1].name = SPRITE_NAME_BALL_ROUND;
my_sprite_attributes[1].tag = CV_COLOR_WHITE;
logo_x = logo_x_positions[current_logo_index];
logo_y = 21;
draw_x = 0;
draw_y = 0;
cv_set_screen_active(true);
while(1) {
my_sprite_attributes[0].y = ref_base_y;
my_sprite_attributes[1].y = ball_base_y + bounce_table[bounce_step];
ball_x += ball_direction_x;
if (ball_x >= 248) {
ball_direction_x = -1;
} else if (ball_x <= 0) {
ball_direction_x = 1;
}
my_sprite_attributes[1].x = ball_x;
if (bounce_step >2) {
my_sprite_attributes[1].name = SPRITE_NAME_BALL_ROUND;
} else if (bounce_step == 0 || bounce_step == 15) {
my_sprite_attributes[1].name = SPRITE_NAME_BALL_SQUASH;
} else {
my_sprite_attributes[1].name = SPRITE_NAME_BALL_STRETCH;
}
bounce_step = (bounce_step + 1) & 15;
// VDP güncelle -- Daha fazla bilgi için retroskop'un yeni sezonunu izleyiniz! :) YAKINDA!
cvu_memtovmemcpy(SPRITES, my_sprite_attributes, sizeof(my_sprite_attributes));
// V-Sync bekle ki bu zx spectrumdan arakladığım bir taktik oldu
__asm__("EI");
__asm__("halt");
display_counter++;
if (display_counter >= 180) {
display_counter = 0;
current_logo_index = (current_logo_index + 1) % 3;
logo_x = logo_x_positions[current_logo_index];
draw_x = 0;
draw_y = 0;
cvu_vmemset(PATTERN, 0, 0x1800);
}
pixels_drawn_this_frame = 0;
while (pixels_drawn_this_frame < PIXELS_PER_FRAME) {
if (all_logos[current_logo_index][draw_y][draw_x] == '\0') {
draw_x = 0;
draw_y++;
if (draw_y >= 5) { draw_y = 0; }
continue;
}
if (all_logos[current_logo_index][draw_y][draw_x] != ' ') {
set_pixel(logo_x + draw_x, logo_y + draw_y, random_color_table[random_index]);
random_index++;
pixels_drawn_this_frame++;
}
draw_x++;
}
}
}
#endif
//bu satırın bir altında boş bir satır olmalı, gerekirse basın enter'a burda altı boş olsun






Sayfa 0.015 saniyede 16 sorgu ile oluşturuldu.