Альтернативная система на 68000 :)
Moderator: Shaos
-
- Senior
- Posts: 137
- Joined: 30 Mar 2017 00:55
Re: Альтернативная система на 68000 :)
Скорость отрисовки прямоугольников без заливки (рисует тем же обычным Брезенхемом в ПЛИСке, что и произвольные линии):
You do not have the required permissions to view the files attached to this post.
-
- Doomed
- Posts: 449
- Joined: 08 Apr 2013 04:04
- Location: 213.247.249.139
Re: Альтернативная система на 68000 :)
Какая версия гцц? И можно пример кода, который он генерирует (с сорцом
?
Спрашиваю потому, что пробовал собирать гцц 4.*.* под таргет 68к и увидел, что кодогенерация у него хреноватая... Не косячит вроде, но много лишних действий.

Спрашиваю потому, что пробовал собирать гцц 4.*.* под таргет 68к и увидел, что кодогенерация у него хреноватая... Не косячит вроде, но много лишних действий.
привет засранцу лавру :)
-
- Senior
- Posts: 137
- Joined: 30 Mar 2017 00:55
Re: Альтернативная система на 68000 :)
версия кажется 3.4.6, не самая новая 
вот, вчерашнее, там есть и код (main.bin) и дизассемблерный листинг.
Здесь скомпилено без оптимизации, можно сделать gcc -O1 .. тогда будет получше.
(это всё пока только заготовка...)

вот, вчерашнее, там есть и код (main.bin) и дизассемблерный листинг.
Здесь скомпилено без оптимизации, можно сделать gcc -O1 .. тогда будет получше.
(это всё пока только заготовка...)
You do not have the required permissions to view the files attached to this post.
-
- Doomed
- Posts: 449
- Joined: 08 Apr 2013 04:04
- Location: 213.247.249.139
Re: Альтернативная система на 68000 :)
Эммм... Дизасм от ГЦЦ лучше всего делать или так:
или так:
А дизасм голого бинарника... 
Code: Select all
gcc -S main.c
Code: Select all
objdump -dS main.o

привет засранцу лавру :)
-
- Senior
- Posts: 137
- Joined: 30 Mar 2017 00:55
Re: Альтернативная система на 68000 :)
Зато в голом бинарнике всё уже в том виде, в каком это попадет в память машины...
Ничего, всё там более-менее понятно
Ничего, всё там более-менее понятно

-
- Senior
- Posts: 137
- Joined: 30 Mar 2017 00:55
Re: Альтернативная система на 68000 :)
По-немножку кодю.
Вот это уже реализовано (сами функции на асме):
void sys_enable_interrupts();
void sys_disable_interrupts();
void sys_restart();
void sys_halt(uint32 halt_code);
void sys_install_irq_handler(uint8 irq_num, uint8 mode, irqcb *cb_function);
void sys_uninstall_irq_handler(uint8 irq_num);
uint32 get_rnd32();
void init_rnd32(uint32 s);
void clear_keyboard_buffer();
uint8 key_pressed();
uint8 get_key();
void mouse_show();
void mouse_hide();
void set_mouse_crosspointer_control_word(uint16 cw);
uint16 get_mouse_crosspointer_control_word();
uint8 mouse_in(uint16 x1, uint16 y1, uint16 x2, uint16 y2);
uint8 mouse_pressed();
uint8 get_mouse_buttons();
uint16 get_mouse_x();
uint16 get_mouse_y();
void set_mouse_window(uint16 x1, uint16 y1, uint16 x2, uint16 y2);
void set_mouse_window_fullscreen();
void mouse_goto_xy(uint16 x, uint16 y);
void gfx_load_led_register(uint8 led_data);
void gfx_initialize();
void gfx_reset_vertical_retrace();
uint8 gfx_is_vertical_retrace();
void gfx_clear_screen(uint8 color);
void gfx_ramdac_set_pixel_mask(uint8 p_mask);
void gfx_ramdac_set_rgb_palette(uint8 *pal, uint8 start_color, uint16 n_colors);
void gfx_set_draw_mask(uint32 draw_mask);
void gfx_draw_pixel(uint16 x, uint16 y, uint8 color);
void gfx_move_to(uint16 x, uint16 y);
void gfx_line_to(uint16 x, uint16 y, uint8 color);
void gfx_line(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint8 color);
void gfx_rectangle(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint8 color);
void gfx_bar(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint8 color);
void gfx_bar_x2(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint8 color);
void gfx_draw_char(uint16 x, uint16 y, uint8 color ,uint16 mode, char c);
void gfx_draw_text(uint16 x, uint16 y, uint8 color, uint16 mode, uint16 offset, char *string);
void gfx_copy_picture_to_vram(uint16 dest_x, uint16 dest_y,
uint16 size_x, uint16 size_y,
uint8 *picture);
void gfx_copy_vram_block(uint16 source_x, uint16 source_y,
uint16 dest_x, uint16 dest_y,
uint16 size_x, uint16 size_y);
void rhytm_gen_load_k(uint32 k);
void rhytm_gen_set_clk_mux(uint8 s);
void rhytm_gen_start();
void rhytm_gen_stop();
void rs232_clear_rx_buf();
void rs232_clear_tx_buf();
uint8 rs232_is_rx_bytes();
uint8 rs232_is_tx_complete();
uint8 rs232_get_byte();
void rs232_send_byte(uint8 a);
void midi1_clear_rx_buf();
void midi1_clear_tx_buf();
uint8 midi1_is_rx_bytes();
uint8 midi1_is_tx_complete();
uint8 midi1_get_byte();
void midi1_send_byte(uint8 a);
void midi2_clear_rx_buf();
void midi2_clear_tx_buf();
uint8 midi2_is_rx_bytes();
uint8 midi2_is_tx_complete();
uint8 midi2_get_byte();
void midi2_send_byte(uint8 a);
Вот это уже реализовано (сами функции на асме):
void sys_enable_interrupts();
void sys_disable_interrupts();
void sys_restart();
void sys_halt(uint32 halt_code);
void sys_install_irq_handler(uint8 irq_num, uint8 mode, irqcb *cb_function);
void sys_uninstall_irq_handler(uint8 irq_num);
uint32 get_rnd32();
void init_rnd32(uint32 s);
void clear_keyboard_buffer();
uint8 key_pressed();
uint8 get_key();
void mouse_show();
void mouse_hide();
void set_mouse_crosspointer_control_word(uint16 cw);
uint16 get_mouse_crosspointer_control_word();
uint8 mouse_in(uint16 x1, uint16 y1, uint16 x2, uint16 y2);
uint8 mouse_pressed();
uint8 get_mouse_buttons();
uint16 get_mouse_x();
uint16 get_mouse_y();
void set_mouse_window(uint16 x1, uint16 y1, uint16 x2, uint16 y2);
void set_mouse_window_fullscreen();
void mouse_goto_xy(uint16 x, uint16 y);
void gfx_load_led_register(uint8 led_data);
void gfx_initialize();
void gfx_reset_vertical_retrace();
uint8 gfx_is_vertical_retrace();
void gfx_clear_screen(uint8 color);
void gfx_ramdac_set_pixel_mask(uint8 p_mask);
void gfx_ramdac_set_rgb_palette(uint8 *pal, uint8 start_color, uint16 n_colors);
void gfx_set_draw_mask(uint32 draw_mask);
void gfx_draw_pixel(uint16 x, uint16 y, uint8 color);
void gfx_move_to(uint16 x, uint16 y);
void gfx_line_to(uint16 x, uint16 y, uint8 color);
void gfx_line(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint8 color);
void gfx_rectangle(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint8 color);
void gfx_bar(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint8 color);
void gfx_bar_x2(uint16 x1, uint16 y1, uint16 x2, uint16 y2, uint8 color);
void gfx_draw_char(uint16 x, uint16 y, uint8 color ,uint16 mode, char c);
void gfx_draw_text(uint16 x, uint16 y, uint8 color, uint16 mode, uint16 offset, char *string);
void gfx_copy_picture_to_vram(uint16 dest_x, uint16 dest_y,
uint16 size_x, uint16 size_y,
uint8 *picture);
void gfx_copy_vram_block(uint16 source_x, uint16 source_y,
uint16 dest_x, uint16 dest_y,
uint16 size_x, uint16 size_y);
void rhytm_gen_load_k(uint32 k);
void rhytm_gen_set_clk_mux(uint8 s);
void rhytm_gen_start();
void rhytm_gen_stop();
void rs232_clear_rx_buf();
void rs232_clear_tx_buf();
uint8 rs232_is_rx_bytes();
uint8 rs232_is_tx_complete();
uint8 rs232_get_byte();
void rs232_send_byte(uint8 a);
void midi1_clear_rx_buf();
void midi1_clear_tx_buf();
uint8 midi1_is_rx_bytes();
uint8 midi1_is_tx_complete();
uint8 midi1_get_byte();
void midi1_send_byte(uint8 a);
void midi2_clear_rx_buf();
void midi2_clear_tx_buf();
uint8 midi2_is_rx_bytes();
uint8 midi2_is_tx_complete();
uint8 midi2_get_byte();
void midi2_send_byte(uint8 a);
You do not have the required permissions to view the files attached to this post.
-
- Senior
- Posts: 137
- Joined: 30 Mar 2017 00:55
Re: Альтернативная система на 68000 :)
Подключила библиотеку FatFs от ChaN: http://elm-chan.org/fsw/ff/00index_e.html
Пришлось поразбираться и помучиться. Но в результате получилось!)
Еще добавила много всяких низкоуровневых функций (конечно же, они на ассемблере).
Заодно по-немножку привыкаю к Си. Нравится.
Теперь у нас есть SDшки и FAT16/32, можно читать и записывать всякие файлы
Можно подключить и другие устройства, если вдруг захочется.
Тест - загрузка картинки 640*480 c SDшки. Заодно - тест 256-цветного режима видео ПЛИСки и RAMDAC.
Видео (11Мбайт): http://disk.karelia.pro/veiC5l5/
Пришлось поразбираться и помучиться. Но в результате получилось!)
Еще добавила много всяких низкоуровневых функций (конечно же, они на ассемблере).
Заодно по-немножку привыкаю к Си. Нравится.
Теперь у нас есть SDшки и FAT16/32, можно читать и записывать всякие файлы

Можно подключить и другие устройства, если вдруг захочется.
Тест - загрузка картинки 640*480 c SDшки. Заодно - тест 256-цветного режима видео ПЛИСки и RAMDAC.
Видео (11Мбайт): http://disk.karelia.pro/veiC5l5/
You do not have the required permissions to view the files attached to this post.
-
- Senior
- Posts: 137
- Joined: 30 Mar 2017 00:55
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Альтернативная система на 68000 :)
видео уже недоступно - можно на ютуб его?
интересует как быстро такие картинки грузяцо с карточки на экран?
интересует как быстро такие картинки грузяцо с карточки на экран?
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Senior
- Posts: 137
- Joined: 30 Mar 2017 00:55
Re: Альтернативная система на 68000 :)
Видео:
http://disk.karelia.pro/3B9CaJS/
...а залить на ютуб я не умею
Грузится с карточки через буфер примерно 1.5сек. Картинка не сжатая (то есть там 1 байт на пиксель, и получается 307200 байт на 640*480).
Узкое место - SPI до карточки. Такт 16МГц и SPI 1-битный
http://disk.karelia.pro/3B9CaJS/
...а залить на ютуб я не умею

Грузится с карточки через буфер примерно 1.5сек. Картинка не сжатая (то есть там 1 байт на пиксель, и получается 307200 байт на 640*480).
Узкое место - SPI до карточки. Такт 16МГц и SPI 1-битный

-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Альтернативная система на 68000 :)
да - быстро
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Senior
- Posts: 137
- Joined: 30 Mar 2017 00:55
Re: Альтернативная система на 68000 :)
68K + ILDA интерфейс на мелкой GPIO плиске (наконец-то и она пригодилась 
ЦАПики 572па1 + дифференциальные драйверы на TL074, TL072.
код:

ЦАПики 572па1 + дифференциальные драйверы на TL074, TL072.
код:
Code: Select all
module ILDA_port(ADDR, DIN, nAS, nUDS, nLDS, RW, nRESET, CLK,
DOUT, DEN, ILDA_X, ILDA_Y, ILDA_B, ILDA_G, ILDA_R, ILDA_I, ILDA_EN, DTA);
input wire [23:1] ADDR;
input wire [15:0] DIN;
input wire nAS,nUDS,nLDS,RW,nRESET,CLK;
output wire [15:0] DOUT;
output wire DEN;
output reg [9:0] ILDA_X;
output reg [9:0] ILDA_Y;
output wire ILDA_B,ILDA_G,ILDA_R, ILDA_I, ILDA_EN;
output wire DTA;
wire SEL,WORD,X_WSTB,Y_WSTB,C_WSTB,C_RSTB;
wire [9:0] TMPXY;
reg [7:0] CR;
reg [20:0] TIMEOUT_CNT;
reg TIMEOUT;
reg EN_BEAM;
assign SEL = ~nAS & (ADDR[23:4] == 20'hFFFA0);
assign WORD = ~nUDS & ~nLDS;
assign DTA = SEL & (~nUDS | ~nLDS);
assign DEN = RW & SEL & (~nUDS | ~nLDS);
assign X_WSTB = ~RW & SEL & WORD & (ADDR[3:1] == 3'h0); //=x0
assign Y_WSTB = ~RW & SEL & WORD & (ADDR[3:1] == 3'h1); //=x2
assign C_WSTB = ~RW & SEL & ~nUDS & (ADDR[3:1] == 3'h7); //=xE
assign C_RSTB = RW & SEL & ~nUDS & (ADDR[3:1] == 3'h7); //=xE
assign TMPXY = DIN[9:0] + 10'd512;
always@(negedge X_WSTB) ILDA_X <= TMPXY;
always@(negedge Y_WSTB) ILDA_Y <= TMPXY;
assign DOUT = ((CR & {8{C_RSTB}}) << 8);
always@(negedge C_WSTB or negedge nRESET)
begin
if (~nRESET) CR <= 8'h0;
else CR <= DIN[15:8];
end
assign ILDA_EN = CR[7] & EN_BEAM;
assign ILDA_I = (CR[0] | CR[1] | CR[2]) & ILDA_EN;
assign ILDA_R = CR[2] & ILDA_EN;
assign ILDA_G = CR[1] & ILDA_EN;
assign ILDA_B = CR[0] & ILDA_EN;
always@(posedge CLK or posedge X_WSTB or posedge Y_WSTB)
begin
if (X_WSTB || Y_WSTB) TIMEOUT_CNT <= 21'h0;
else TIMEOUT_CNT <= TIMEOUT_CNT + 1'h1;
end
always@(posedge CLK) TIMEOUT <= (TIMEOUT_CNT == 22'h1FFFFF);
always@(posedge TIMEOUT or posedge X_WSTB or posedge Y_WSTB or negedge nRESET)
begin
if (~nRESET || TIMEOUT) EN_BEAM <= 0;
else
if (X_WSTB || Y_WSTB) EN_BEAM <= 1;
end
endmodule
You do not have the required permissions to view the files attached to this post.
Last edited by Annett on 06 Nov 2017 01:36, edited 2 times in total.
-
- Senior
- Posts: 137
- Joined: 30 Mar 2017 00:55
Re: Альтернативная система на 68000 :)
еще картинки 
это просто первые тесты, еще на асме.
синусы и косинусы
Наверное нужно будет закодить С-шные функции для вывода координат и цвета...
видео (загрузка случайных векторов): http://disk.karelia.pro/psp7npf/

это просто первые тесты, еще на асме.
синусы и косинусы

Наверное нужно будет закодить С-шные функции для вывода координат и цвета...
видео (загрузка случайных векторов): http://disk.karelia.pro/psp7npf/
You do not have the required permissions to view the files attached to this post.