PDA

Просмотр полной версии : Небольшая демка на ассемблере



BelaLugoci
21.10.2024, 08:37
Может тоже кто-то балуется на асме таким, можете сюда в тему выкладывать, если нужны комментарии - спрашивайте
Gif анимация с экрана эмулятора здесь (https://disk.yandex.ru/i/SPVrete94iW-FA)
Код Atasm 106 байт:


.include "atari.asm"
*= $3000
lda #48
?copy
sta screen-1, y
dey
bpl ?copy
iny
?copydl
lda #$42
sta dlist2, y
iny
lda #<screen
sta dlist2, y
iny
lda #>screen
sta dlist2, y
iny
cpy #72
bne ?copydl
lda #>font_data
sta CHBAS
lda #$23
sta SDMCTL
lda #<dlist
sta SDLSTL
lda #>dlist
sta SDLSTL+1
?main
ldx #1
?start
lda RTCLOK+2
?wait
cmp RTCLOK+2
beq ?wait
dex
bpl ?start
?ring
lda font_data, x
asl
adc #00
sta font_data, x
inx
cpx #08
bne ?ring
beq ?main
dlist
.byte $70, $70, $70
dlist2
*= dlist2+72
.byte $41, <dlist, >dlist
screen
*= $7400
font_data
.byte ~11000011
.byte ~10011001
.byte ~00100100
.byte ~01000010
.byte ~01000010
.byte ~00100100
.byte ~10011001
.byte ~11000011

breeze
21.10.2024, 09:21
Спасибо конечно, но «include "atari.asm"» это как бы не стандартная какая-то либа и её таки лучше тоже приатачить.
В противном случае проект не собираем. Так же было бы не плохо указать каким асмом это собиралось.

Ну и вишенка на торту, где хотя бы тот же XEX? Для тех у кого лапки и он просто хочет посмотреть на реале/емуле?

BelaLugoci
21.10.2024, 10:25
но «include "atari.asm"» это как бы не стандартная какая-то либа
да нет, это перечень СТАНДАРТНЫХ переменных карты ОЗУ, валяется во всех компиляторах, можно по названиям в проекте приаттачить ваш. Добавил.


Так же было бы не плохо указать каким асмом это собиралось.
Указано, вы просто не обратили внимание.


где хотя бы тот же XEX?
Исправляюсь, смотрите во вложении.
81441
81442

atariki
21.10.2024, 12:09
Мне нравится, можно звёздное небо сделать. Только я не умею)))

BelaLugoci
21.10.2024, 15:04
Немного добавил анимации самому узору
81443

atariki
21.10.2024, 16:53
ещё музыку надо добавить))

Shiny
22.10.2024, 05:53
с текстовым режимом баловались давненько:
https://www.pouet.net/prod.php?which=70199

и на сладкое:
https://www.pouet.net/prod.php?which=99257

- - - Добавлено - - -


Немного добавил анимации самому узору
81443

Так и просит сократить код(:

BelaLugoci
22.10.2024, 06:17
ещё музыку надо добавить))
кто бы её написал? )

- - - Добавлено - - -


Так и просит сократить код(:
сократите, покажите, будет интересно, я на асме не крут, после x86 как с одной рукой и одним глазом

Shiny
22.10.2024, 07:51
кто бы её написал? )
RMT в помощь(:



сократите, покажите, будет интересно, я на асме не крут, после x86 как с одной рукой и одним глазом
Формирование Display List явно лишнее.

- - - Добавлено - - -

Как-то так. Курсор лишний, но можно и убрать


;compile xasm.exe gens.a65 /o:gens.xex
org $8000
start
; lda #7 ; open graphics 7 mode (160x96
; jsr $ef9c ; openmode=$ef9c

; setup font
lda #$20
sta 756
istart ldx #0
; delay
RTCLOK equ $0012

dl ldy #0
; roll
rolld lda font_data,y
asl @
adc #0
sta font_data,y
iny
cpy #[spr_e-font_data]
bne rolld
ldy #5
sta
lda RTCLOK+2
wait
cmp RTCLOK+2
beq wait
dey
bne sta

copyd lda font_data,x
sta $2000,y
iny
inx
cpy #8
bne copyd
cpx #[spr_e-font_data]
beq istart
bne dl
font_data
; sprites 0
dta %00001000
dta %00001000
dta %00001000
dta %11111000
dta %00011111
dta %00010000
dta %00010000
dta %00010000

; sprites 1
dta %00001000
dta %00001000
dta %00011000
dta %11100100
dta %00100111
dta %00011000
dta %00010000
dta %00010000

; sprites 2
dta %00001000
dta %00011000
dta %01100100
dta %10000010
dta %01000001
dta %00100110
dta %00011000
dta %00010000

; sprites 3
dta %00011000
dta %01100100
dta %10000010
dta %00000001
dta %10000000
dta %01000001
dta %00100110
dta %00011000

; sprites 4
dta %01110010
dta %10000001
dta %00000001
dta %00000001
dta %10000000
dta %10000000
dta %10000001
dta %01001110

; sprites 5
dta %11110001
dta %00000001
dta %00000001
dta %00000001
dta %10000000
dta %10000000
dta %10000000
dta %10001111

; sprites 6
dta %00010100
dta %01100010
dta %10000001
dta %00000001
dta %10000000
dta %10000001
dta %01000110
dta %00101000

; sprites 7
dta %00001000
dta %00010100
dta %01100010
dta %10000001
dta %10000001
dta %01000110
dta %00101000
dta %00010000
spr_e
; run start

BelaLugoci
22.10.2024, 08:39
RMT в помощь
не поможет, я в принципе не понимаю как работает звук и что нужно сделать чтобы он стал музыкой, представьте кота который ходит по клавишам рояля - это мой потолок.


Формирование Display List явно лишнее.
Ну сама демка сделана для того чтобы протестировать определенный способ работы с DL, там же всего 40(48) байт на экран используется
анимация просто стала вытекающим фактом

- - - Добавлено - - -

Shiny, полезно подглядеть у вас в коде некоторые реализации копирования, у меня это громоздко сделано очень, пока голова не начнёт мыслить категориями 6502 это неизбежно.

Shiny
22.10.2024, 08:49
Shiny, полезно подглядеть у вас в коде некоторые реализации копирования, у меня это громоздко сделано очень, пока голова не начнёт мыслить категориями 6502 это неизбежно.


Это sizecoding с другими трюками и приемчиками(:

BelaLugoci
22.10.2024, 11:33
Это sizecoding с другими трюками и приемчиками
и есть где почитать про такое? я конечно нашел массу ресурсов, но это 1976-1982 в основном и там скорее какие-то общие приёмы.

я кстати вашу демку собрать не смог на atasm переделав, видимо что-то специфичное для вашего asm там используется или, что более вероятно, перевёл неправильно.
upd: всё собрал, всё работает )

Shiny
22.10.2024, 13:51
Часть тут:
http://www.sizecoding.org/wiki/6502
https://www.nesdev.org/wiki/Synthetic_instructions
https://g0blinish.ucoz.ru/forblog_6502/eorFF.zip
https://g0blinish.ucoz.ru/forblog_6502/6502tricks_V2.zip

Для компиляции нужен xasm (https://github.com/pfusik/xasm). Я на него пересел, потому что пришлось кодить 16K intro, раньше использовал atasm.

- - - Добавлено - - -

под atasm


;batch for compile
;set nam=gens
;atasm.exe -s %nam%.asm
;rename %nam%.65o %nam%.xex

*=$8000
start
; lda #0 ; open graphics 0 mode
; jsr $ef9c ; openmode=$ef9c

; setup font
lda #$20
sta 756
istart ldx #0
stx 755 ; inverse off
; delay
RTCLOK=$0012

dl ldy #0
; roll
rolld lda font_data,y
asl a
adc #0
sta font_data,y
iny
cpy #(spr_e-font_data)
bne rolld
ldy #5
dlay
lda RTCLOK+2
wait
cmp RTCLOK+2
beq wait
dey
bne dlay

copyd lda font_data,x
sta $2000,y
iny
inx
cpy #8
bne copyd
cpx #(spr_e-font_data)
beq istart
bne dl
font_data
; sprites 0
.byte ~00001000
.byte ~00001000
.byte ~00001000
.byte ~11111000
.byte ~00011111
.byte ~00010000
.byte ~00010000
.byte ~00010000

; sprites 1
.byte ~00001000
.byte ~00001000
.byte ~00011000
.byte ~11100100
.byte ~00100111
.byte ~00011000
.byte ~00010000
.byte ~00010000

; sprites 2
.byte ~00001000
.byte ~00011000
.byte ~01100100
.byte ~10000010
.byte ~01000001
.byte ~00100110
.byte ~00011000
.byte ~00010000

; sprites 3
.byte ~00011000
.byte ~01100100
.byte ~10000010
.byte ~00000001
.byte ~10000000
.byte ~01000001
.byte ~00100110
.byte ~00011000

; sprites 4
.byte ~01110010
.byte ~10000001
.byte ~00000001
.byte ~00000001
.byte ~10000000
.byte ~10000000
.byte ~10000001
.byte ~01001110

; sprites 5
.byte ~11110001
.byte ~00000001
.byte ~00000001
.byte ~00000001
.byte ~10000000
.byte ~10000000
.byte ~10000000
.byte ~10001111

; sprites 6
.byte ~00010100
.byte ~01100010
.byte ~10000001
.byte ~00000001
.byte ~10000000
.byte ~10000001
.byte ~01000110
.byte ~00101000

; sprites 7
.byte ~00001000
.byte ~00010100
.byte ~01100010
.byte ~10000001
.byte ~10000001
.byte ~01000110
.byte ~00101000
.byte ~00010000
spr_e
; run start

BelaLugoci
22.10.2024, 13:59
Часть тут
спасибо


Для компиляции нужен xasm. Я на него пересел, потому что пришлось кодить 16K intro, раньше использовал atasm.
я изучал немного код в основном для mads, а как начал сам что-то пробовать писать, то постоянно какие-то проблемы, то там то сям что-то не работает, пересел на atasm как неделю назад, всё вроде бы получается, я в том смысле что компилируется и работает, а с mads как-то не заладилось.
а xasm какие плюшки даёт и почему с интро это стало решающим?

Shiny
22.10.2024, 14:38
а xasm какие плюшки даёт и почему с интро это стало решающим?
только xasm скомпилировал исходники RMT player.
Подробно написано в документации на github. Например:


:23 dta $2

повтор 23 раза, причем счетчик можно использовать:


:16 dta l(dither+8*#),h(dither+8*#) ; #-repeater


Еще один плюс - вставка бинарного файла:


ins "plasmfnt.pck",2

Здесь пропускается два байта, что для меня важно для сжатия pucrunch, который дописывает лишние данные.

Аналог .SBYTE из atasm:


dta d" remember:"

BelaLugoci
22.10.2024, 16:07
:23 dta $2
угу, понял, в mads мне такое нравилось, а atasm правда конструкция чуть иная, там .REPT/.ENDR кажется, но тоже можно использовать счётчик. Да, в инструкции раздел "3.17 .REPT <word>, .ENDR"

Я RMT собирать не пробовал, только видел в архиве mads'а кажется он был, ну или по крайней мере RMT плейер, во вложении добавил
81450

BelaLugoci
23.10.2024, 14:52
pucrunch
вы наверняка знакомы с этой статьёй (https://hype.retroscene.org/blog/dev/740.html) Интроспека
скажите как вам кажется pucrunch или aplib имеет смысл брать на вооружение? интересует конкурсный вариант Game 4K или 16K
например у ZX0 очевидная проблема с сжатием - требуется последовательное размещение данных одним монолитным блоком, типично ли это для pucrunch и aplib?
в общем ваше мнение по сжатию.
еще, тут pucrunch который вы использовали для 6502 можете сюда выложить, чтобы уже понимать что это рабочий вариант

Shiny
23.10.2024, 15:39
Нет, я не читал статью интроспека - много воды и ничего полезного.
Я стал использовать pucrunch, потому что сжимает неплохо и скорость распаковки приемлемая. Но zx7 сжал хуже. Пару раз использовал zx7, файлы сжались на отлично, но распаковывалось долго:
Картинка: https://www.pouet.net/prod.php?which=80700
psg dump:https://www.pouet.net/prod.php?which=79828

Примеры использования:
https://g0blinish.ucoz.ru/forblog_zx/pucrunch8bit.zip
или в 16K intro:
https://g0blinish.ucoz.ru/demo3/sv24se/ol_src.7z
.pck - сжатые файлы

- - - Добавлено - - -

Кстати, на AtariAge упаковщики обсуждают:
https://forums.atariage.com/topic/268244-data-compression-benchmark-dan-pletter-zx7-exomizer-pucrunch-megalz/

для разных версий ZX7-ZX5 добавлены исходники распаковки:
https://forums.atariage.com/topic/316628-most-efficient-compression-for-atari/page/4/

- - - Добавлено - - -

Забыл добавить список утилит:
https://madteam.atari8.info/index.php?prod=uzytki

В старое время использовал только Super Packer, хватило и этого.

BelaLugoci
24.10.2024, 08:03
https://g0blinish.ucoz.ru/demo3/sv24se/ol_src.7z
я правильно понимаю что цветная спираль это эффект из-за манипуляции с палитрой? то есть спираль нарисована вся в 4 цвета и вы по кругу меняете оттенки отчего создаётся ощущение словно крутится спираль?

Shiny
24.10.2024, 09:07
я правильно понимаю что цветная спираль это эффект из-за манипуляции с палитрой? то есть спираль нарисована вся в 4 цвета и вы по кругу меняете оттенки отчего создаётся ощущение словно крутится спираль?

Нет, трюк со шрифтом
https://i.ibb.co/BjLT1p8/plasm1k.png

BelaLugoci
24.10.2024, 12:34
Но zx7 сжал хуже
сравниваю с zx0 на PC только размер упаковки, pucrunch или сопоставим или хуже zx0
в общем нужно пользоваться и смотреть в реальном проекте

Shiny
24.10.2024, 13:10
Выбрать можно любой способ - уже позже zx7 переделали, и он жмет лучше. Для меня pucrunch удобнее по двум причинам.