PDA

Просмотр полной версии : Let's make zx demo



Shiny
23.12.2017, 09:02
Написал некое руководство. Шрифт и исходники приложены. Форматы .doc/.docx
скачать (https://g0blinish.ucoz.ru/Articles/letsmake.rar)

polikarpov76
23.12.2017, 10:46
Толковый мануал! Прямо захотелось самому попробовать что-то сделать. Начну с простых примеров.

NEO SPECTRUMAN
24.12.2017, 02:01
Шынни, в архиве не хватает sjasm-а и батников
чтоб все компилилось из коробки

заставить компилировать код какую нибудь ...т.
иногда не так просто...
...хотя с sjasm-ом особых проблем в этом плане нет

так жо можно приложить генераторов табличек всяких синусов который есть утя на сайтеке дето


считаю хорошим мануалом по z80
http://www.z80.info/zip/z80-documented.pdf
в конце очень четкие и удобные таблицы

3Ы3Ы!!!!
ищу такой же мануал для всех остальных процессоров с быдломануалами

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

сам docx
пока не асилил тк много букоф
но с ходу


Ясно, что для подготовки таблиц понадобится память, и вряд ли использование LUT применимо к созданию игр

Обязательным требованием является расположение таблицы LUT по адресу кратному 256(в примере адрес $B000).
не обязательно
таблицы успешно применяются в играх
и не обязательно с кратного адреса (точнее мне даже чаще попадаются не с кратного адреса (а иногда попадаются даже "не кратные" таблицы для 2-х\3-х входящих значений!!!!!!!))
куча старых игр использует конструкции типа


ld d,0
ld e,a
ld hl,tabaddres
add hl,de
ld a,(hl)

или еще что нибудь похуже
...а потом фиг эти таблицы откалупаешь от кода при дизасме...

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



GETSQ:
LD L,A
LD H,0
ADD HL,HL
LD DE,SQTAB
ADD HL,DE
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
RET

сильно не рациональная конструкция (при выравнивании даже inc hl там не нужен, хватит одного inc l
(тк переполнение никогда не наступает))
лучше ее не показывать, а то вдруг еще применит кто, а сразу давать эту


ld l,a
ld h,tabaddres
ld e,(hl)
inc h
ld d,(hl)


если нужно прогонять через эту таблицу еще данные а h остался не тронутым
то следующее чтение делаем

ld d,(hl)
dec h
ld e,(hl)
экономя 4 такта

с таким же успехом одновременно можно использовать и часть таких таблиц
когда прокатит и менее точный результат


так же можно упомянуть, что бывают и "горизонтальные" таблицы
когда в l заносишь "адрес" таблицы
а в h данные для обработки
и то, что их можно втулить туда куда другие таблицы уже не лезут


и несколько коротких таблиц в одной когда тоже памяти мало


ld h,tabaddres ;7
ld l,a ;4
ld b,(hl) ;7
add 32 ;7
ld l,a ;4
ld c,(hl) ;7
add 32 ;7
ld l,a ;4
ld d,(hl) ;7
add 32 ;7
ld l,a ;4
ld e,(hl) ;7

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

если используются маленькие таблицы одинакового размера
и чтение идет подряд как в примере выше
то можно оптимизировать используя код Грея (превед lvd) :v2_dizzy_bye:


ld h,tabaddres ;7
ld l,a ;4
ld b,(hl) ;7
set 6,l ;8
ld c,(hl) ;7
set 7,l ;8
ld d,(hl) ;7
res 6,l ;8
ld e,(hl) ;7
итого выигрыш по 3 такта на смене таблицы

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

так же можно упомянуть про "многомерные" таблицы
с 2-мя и 3-мя итд входящими переменными

например 16К таблица деления
6 битного (2 деление на 2 перед использованием (все равно при деление оно теряет точность)) числа на 8 битное
самое интересное что чем больше делитель тем точней ответ
а деление на 1 дает самый не точный результат
при делении на 2 уже сама по себе происходит потеря 7-го бита а результат не точен только одним битом
при делении на 4 точность 6-ти битной части таблице уже достаточная

есное дело в таблице делитель может быть и дробным числом с фиксированной запятой 4.4 и 6.2 и дажо 8битным minifloat-ом для особых извращенцев....

Bedazzle
24.12.2017, 12:22
let.doc и let.docx отличаются только форматом?

Shiny
24.12.2017, 12:39
Да, сделано по просьбам.