Просмотр полной версии : Разработка игры Dash
Oleg N. Cher
08.10.2015, 23:06
Топик открываем для обсуждения вопросов разработки игры Dash :)
Вопрос №1: игра работает в режиме IM 2, для опроса клавиатуры переходит в IM 0, потом опять возвращается в IM 2. Можно ли оптимизировать вот такой рабочий код? (за счёт отказа от лишних DI/EI)
LD IY,#5C3A
RES 5,(IY+1)
DI
IM 0
EI
LOOP_REPEAT:
BIT 5,(IY+1)
JR Z,LOOP_REPEAT
LD L,(IY-50) ; result in L - a pressed key code
DI
IM 2
EI
RET
Barmaley_m
09.10.2015, 00:10
Можно. Для этого надо в обработчике прерываний по IM 2, когда необходимо опрашивать клавиатуру, поставить вызов обработчика прерываний из ПЗУ (CALL 0x38). Еще лучше - сделать свой драйвер клавиатуры. Потому что ПЗУшный во-первых требует, чтобы IY=0x5C3A, что исключает возможность использование хорошего регистра IY для других целей. Во-вторых, ПЗУшный драйвер не поддерживает одновременного нажатия нескольких клавиш.
Oleg N. Cher
09.10.2015, 00:23
Можно. Для этого надо в обработчике прерываний по IM 2, когда необходимо опрашивать клавиатуру, поставить вызов обработчика прерываний из ПЗУ (CALL 0x38).Вот этого не делаю для скорости - опрос клавиатуры таким способом нужен время от времени, а не постоянно. А обработчик 0x38 грузный.
Еще лучше - сделать свой драйвер клавиатуры. Потому что ПЗУшный во-первых требует, чтобы IY=0x5C3A, что исключает возможность использование хорошего регистра IY для других целей. Во-вторых, ПЗУшный драйвер не поддерживает одновременного нажатия нескольких клавиш.Опрос одновременного нажатия не требуется. :) Это чтобы буковки печатать, имя вводить.
Ладно, спрошу проще. В чём у меня сомнения. Нельзя ли переписать код вот так:
LD IY,#5C3A
RES 5,(IY+1)
; DI ; убираем
IM 0
; EI ; убираем
LOOP_REPEAT:
BIT 5,(IY+1)
JR Z,LOOP_REPEAT
LD L,(IY-50) ; result in L - a pressed key code
; DI ; убираем
IM 2
; EI ; убираем
RET
Олег, даже не знаю с чего начать,.. вопрос прямо с издёвкой чтоли задан, либо есть не понимания этих редких команд.
Смотри, вот маленький ликбез:
1) Режим прерывания не менют по многу раз. Всего один раз перешел на "im 2", так и живешь пока программа не закончится (для возврата в бейсик или сброса)
2) В своём обработчике прерываний делаешь всё что тебе нужно, что будет запускаться каждые 1/50 сек. Можешь частично или полность повторить, что есть по адресу 0x38 (дизассемблер ПЗУ с коментами легко найти в инете). Можно сделать и push/call 0x38 или компактнее rst 0x38, но это плохая практика, т.к. обработчик из ПЗУ разрешит прерывания (и потенциально твой оставшийся код может быть повторно прерван, когда ты этого не ждешь)
3) Инструкции di и ei нужны только для кратковременного запрета прерваний для как можно более коротких участков кода
4) Инструкция halt нужна для того, чтоб перестать делать что-то полезное и тупо ждать прихода следующего прерывания. Если перед эти выполнить di, то ждать будешь бесконечно.
Oleg N. Cher
09.10.2015, 02:22
А почему режим прерывания не меняют по много раз? Есть какие-то ограничения?
Мой вопрос вообще без издёвки, он звучит как "нужно ли при смене режима IM запрещать прерывания?"
James DiGreze
09.10.2015, 08:40
нужно ли при смене режима IM запрещать прерывания?Если вопрос только в этом, то нужно.
А почему режим прерывания не меняют по много раз? Есть какие-то ограничения?Можно. Никаких ограничений нет. Но... Есть мнение, что это не эффективно.
Oleg N. Cher,
1.лучше всего, если для опроса клавиатуры ты будешь использовать свой собственный опрос клавиатуры.
2.лучше всего, если твоя программа не будет дергать прерывания
(установил IM2, добавил на прерывания все нужные подпрограммы, разрешил прерывания и забыл про них.)
3.лучше всего, если твоя программа не будет использовать ПЗУ вообще (свои библиотеки подпрограмм)
4.лучше всего, если твоя программа будет уметь стабильную скорость обновления игрового поля (не будет падения скорости при увеличении количества объектов)
(для этого обычно на прерывании вешают счетчик и синхронизируются по нему обновляя экран каждые 2,3,4,... фреймов)
5.хорошо если игра будет цветное
это рекомендации. необязательны для исполнения, но исполнение улучшит геймплей.
Нужно ли при смене режима IM запрещать прерывания
Только если по какой-то причине включаешь IM 2, когда таблица с адресами для него ещё не готова. Кроме того, нужно запрешать прерывания (но режим при этом меня не нужно), если зачем-то решил изменить адреса в этой таблице, - есть риск что прерывание придёт и один из байтов адреса будет иметь уже новое значение, а другой старое.
Oleg N. Cher, самый правильный способ опроса клавиатуры в начале прерывания.
Включаешь режим IM2 настраиваешь вектор и вызываешь эту подпрограмму каждое прерывание:
CHECK_KEYS:
LD (SCAN_SP+1),SP
LD SP,KEY_TAB ; Опрос клавиатуры
LD DE,MAIN.KEY_MAP
LD BC,#29FF
SCANLP:
POP HL
LD A,L
IN A,(#FE)
CPL
AND H
ADD A,C
CCF
SBC A,A
LD (DE),A
INC E
DJNZ SCANLP
SCAN_SP:
LD SP,#0000
RET
; Таблица портов клавиатуры
KEY_TAB:
DB #FD,1 ;#14
DB #7F,16 ;#23
DB #FE,8 ;#21
DB #FD,4 ;#16
DB #FB,4 ;#0C
DB #FD,8 ;#17
DB #FD,16 ;#18
DB #BF,16 ;#19
DB #DF,4 ;#11
DB #BF,8 ;#1A
DB #BF,4 ;#1B
DB #BF,2 ;#1C
DB #7F,4 ;#25
DB #7F,8 ;#24
DB #DF,2 ;#12
DB #DF,1 ;#13
DB #FB,1 ;#0A
DB #FB,8 ;#0D
DB #FD,2 ;#15
DB #FB,16 ;#0E
DB #DF,8 ;#10
DB #FE,16 ;#22
DB #FB,2 ;#0B
DB #FE,4 ;#20
DB #DF,16 ;#0F
DB #FE,2 ;#1F
DB #EF,1 ;#09
DB #F7,1 ;#00
DB #F7,2 ;#01
DB #F7,4 ;#02
DB #F7,8 ;#03
DB #F7,16 ;#04
DB #EF,16 ;#05
DB #EF,8 ;#06
DB #EF,4 ;#07
DB #EF,2 ;#08
DB #7F,1 ;#27
DB #BF,1 ;#1D
DB #FE,1 ;#1E
DB #7F,2 ;#26
DB #00,#1F
Результатом работы этой процедуры будет массив с состояниями клавиш:
;------------------------------------------------------------------------------------------------------------
; Начало массива клавиш
KEY_MAP:
DS #29,#00
KEY_A EQU KEY_MAP+#00
KEY_B EQU KEY_MAP+#01
KEY_C EQU KEY_MAP+#02
KEY_D EQU KEY_MAP+#03
KEY_E EQU KEY_MAP+#04
KEY_F EQU KEY_MAP+#05
KEY_G EQU KEY_MAP+#06
KEY_H EQU KEY_MAP+#07
KEY_I EQU KEY_MAP+#08
KEY_J EQU KEY_MAP+#09
KEY_K EQU KEY_MAP+#0A
KEY_L EQU KEY_MAP+#0B
KEY_M EQU KEY_MAP+#0C
KEY_N EQU KEY_MAP+#0D
KEY_O EQU KEY_MAP+#0E
KEY_P EQU KEY_MAP+#0F
KEY_Q EQU KEY_MAP+#10
KEY_R EQU KEY_MAP+#11
KEY_S EQU KEY_MAP+#12
KEY_T EQU KEY_MAP+#13
KEY_U EQU KEY_MAP+#14
KEY_V EQU KEY_MAP+#15
KEY_W EQU KEY_MAP+#16
KEY_X EQU KEY_MAP+#17
KEY_Y EQU KEY_MAP+#18
KEY_Z EQU KEY_MAP+#19
KEY_0 EQU KEY_MAP+#1A
KEY_1 EQU KEY_MAP+#1B
KEY_2 EQU KEY_MAP+#1C
KEY_3 EQU KEY_MAP+#1D
KEY_4 EQU KEY_MAP+#1E
KEY_5 EQU KEY_MAP+#1F
KEY_6 EQU KEY_MAP+#20
KEY_7 EQU KEY_MAP+#21
KEY_8 EQU KEY_MAP+#22
KEY_9 EQU KEY_MAP+#23
KEY_SPC EQU KEY_MAP+#24
KEY_ENT EQU KEY_MAP+#25
KEY_CS EQU KEY_MAP+#26
KEY_SS EQU KEY_MAP+#27
KEY_ANY EQU KEY_MAP+#28
Всё, теперь проверить нажата ли клавиша "A" например можно так:
LD A,(KEY_A)
OR A
JR Z,переход_клавиша_нажата
итд...
shurik-ua
09.10.2015, 12:54
игра работает в режиме IM 2, для опроса клавиатуры переходит в IM 0
*****код же
Если не ошибаюсь, единственный раз, когда мне приходила в голову идея вернуться в IM 1 была программка "System Information V1.01", написанная давным давно забавы ради. Там измерялось число тактов между прерываниями, может кому будет интересно в учебных целях:
ORG 40000
ENT $
DI
LD (STACK),SP
LD A,#FE
LD I,A
LD H,A
LD L,0
LD B,L
INC A
L_SAV LD (HL),A
INC L
DJNZ L_SAV
INC H
LD (HL),A
LD A,24
LD (#FFFF),A
LD A,#C3
LD (#FFF4),A
LD HL,INTER
LD (#FFF5),HL
IM 2
LD DE,INTER2
LD HL,0
EI
HALT
INTER
LD (#FFF5),DE
EI
L_INC INC HL
JP L_INC
INTER2 LD DE,-5
LD BC,-1
L_DIV ADD HL,DE
INC BC
JR C,L_DIV
SLA C
RL B
SLA C
RL B
IM 1
LD A,#3F
LD I,A
EI
STACK EQU $+1
LD SP,0
PUSH BC
LD HL,TEXT
CALL PRINT
POP HL
LD DE,-1000
CALL DIVOUT
LD A,"."
CALL PR_CHR
LD DE,-100
CALL DIVOUT
LD DE,-10
CALL DIVOUT
LD DE,-1
CALL DIVOUT
LD HL,_MHZ
CALL PRINT
LD HL,_ROMN
CALL PRINT
LD HL,5433
CALL PRINT
LD HL,_D_LF
CALL PRINT
LD HL,#3D00
XOR A
L_SUM ADC A,(HL)
INC HL
BIT 6,H
JR Z,L_SUM
CP 237
LD HL,_NFONT
JR NZ,M_FONT
LD HL,_SFONT
M_FONT
CALL PRINT
LD HL,14446
LD A,#FF
L_AND AND (HL)
INC HL
LD E,A
LD A,H
CP #3D
LD A,E
JR NZ,L_AND
LD HL,_NUSE
INC A
JR Z,M_NUSE
LD HL,_USE
M_NUSE CALL PRINT
LD HL,_RAM
CALL PRINT
LD HL,#C000
LD BC,#7FFD
LD A,#10
OUT (C),A
LD D,(HL)
LD A,#17
OUT (C),A
LD A,D
CPL
LD (HL),A
LD A,#10
OUT (C),A
LD A,(HL)
LD (HL),D
CP D
LD HL,_128K
JR Z,M128
LD HL,_48K
M128 JR PRINT
PR_CHR PUSH HL
RST #10
POP HL
RET
PRINT LD A,(HL)
AND #7F
CALL PR_CHR
BIT 7,(HL)
RET NZ
INC HL
JR PRINT
DIVOUT LD A,"0"-1
DIV_L1 ADD HL,DE
INC A
JR C,DIV_L1
SBC HL,DE
JR PR_CHR
TEXT DEFB 22,0,0,127
DEFM '1992 WRITTEN BY ALEXANDER TRUSH'
DEFB 13
DEFM ' Odessa OPI AT903 28-VIII-92'
DEFB 13,13
DEFM 'System Information V1.01'
DEFB 13,13,13
DEFM ' CPU FREQ:'
DEFB " "+128
_MHZ DEFM ' MHz.'
_D_LF DEFB 13,13+128
_ROMN DEFM ' ROM:'
DEFB 13,13
DEFM ' -Name:'
DEFB 13," "," "," "+128
_SFONT DEFM ' -Standard font.'
DEFB 13,13+128
_NFONT DEFM ' -Non standard font.'
DEFB 13,13+128
_NUSE DEFM ' -Free zone not used.'
DEFB 13,13+128
_USE DEFM ' -Free zone used.'
DEFB 13,13+128
_RAM DEFM ' RAM:'
DEFB " "+128
_128K DEFM '128K'
DEFB 13,13+128
_48K DEFM '48K'
DEFB 13,13+128
Alex Rider
09.10.2015, 14:02
Вопрос №1: игра работает в режиме IM 2, для опроса клавиатуры переходит в IM 0, потом опять возвращается в IM 2. Можно ли оптимизировать вот такой рабочий код? (за счёт отказа от лишних DI/EI)
1. На время переключения режима прерываний их запрещать не нужно. Классический способ включения прерываний импользует DI/EI для окружения инструкций ld i,a: im n чтобы прерывание не пришло в тот момент, когда режим еще не выставлен, а I уже обновлен.
2. Не надо врубать IM 0. Надо IM 1. Они не равнозначны.
3. Я бы на стал щелкать режим имненно на момент опроса. В меню выставляется IM 1 для простого опроса кнопок (для ввода имени, выбора пунктов), а при запуске игры ставится IM 2.
troosh, помню твой упаковщик (http://trd.speccy.cz/system/TRUSH.zip), сильно спасал в своё время. Кучу игр им пожал :)
Oleg N. Cher
09.10.2015, 16:37
Только если по какой-то причине включаешь IM 2, когда таблица с адресами для него ещё не готова. Кроме того, нужно запрешать прерывания (но режим при этом меня не нужно), если зачем-то решил изменить адреса в этой таблице, - есть риск что прерывание придёт и один из байтов адреса будет иметь уже новое значение, а другой старое.Да, это важное замечание. Я формирую таблицу до перехода в режим IM 2 и после этого её уже никогда не трогаю.
Но если я из IM 2 перейду в IM 0, а потом назад в IM 2, всё будет ок? Не нужно устанавливать регистр I или делать что-то подобное?
jerri, благодарю за советы как сделать спектрумную игру лучше. Но цель другая - кроссплатформенность. Покажи мне хотя бы один исходник игры для ZX, который ты, а ещё лучше - кто-то ещё, смог бы за вечерок-два осмыслить и переписать для другой платформы, желательно не-Z80-based. Можешь гнать хоть с мегабасика на пуребасик, хоть на чём хочешь. Притом хорошо если переписать понадобится ну 30% кода, ну ладно, 40%. Но не 100%. Ага, нету такого? То-то же. Самый кроссплатформенный язык Си в этом тебе тоже плохой помощник, потому что на нём пишут для ZX как на асме.
Моя конверсия Dash делается совсем по другим соображениям, это, скорее, исследовательский проект, чем игровой. Оригинальный его исходник на Си, я вам доложу, ещё та песня. Он настолько укоренён в DOS, что там ничего человеческого нет, ну почти ;)
Затык №1. Не связанный с Обероном, jerri. Сегодня оптимизировал вывод тайла 16x12 точек и опять нашёл баг в SDCC (https://sourceforge.net/p/sdcc/bugs/2426/). Подождём-с фикса. Эх, и вот так всё время. :mad_std:
James DiGreze
09.10.2015, 16:50
Мне вот лично больше интересно, есть ли смысл использовать два вида прерывания?
Oleg N. Cher
09.10.2015, 17:00
Исходник на языке высокого уровня вообще ничего не знает про прерывания. Это не *****код, Шурик. Это инкапсуляция. Говнокод - это логика вперемешку с низкоуровневыми реализациями. Вам непривычно, я понимаю. Это не базовый опрос клавы для игры, его я делаю по-другому. Это для набирания имени в таблицу рекордов. Всё, вопрос №1 закрыт.
Вопрос №2: у меня был такой код для "возвращения" на родину (скажем, корректного возврата в Бейсик после выхода из игры). Уже не помню откуда, скорее всего, с какой-то книги:
; ************************************************
; * Set IM1 mode back *
; ************************************************
DI
LD A,#63
LD I,A
IM 1
EI
RETПоясните, пожалуйста, не избыточен ли он, и зачем здесь нужно устанавливать регистр I ?
shurik-ua
09.10.2015, 17:09
Если для какой-то встроенной функции требуется только один какой-то режим прерывания - это значит только одно что функцию надо переписать.
Кстати что это за функция такая, которой вдруг понадобилось только IM0 - просто интересно.
Либо вообще нет понимания как ведёт себя процессор в каждом из режимов.
Oleg N. Cher
09.10.2015, 17:13
Хорошо что у вас есть понимание режимов, Шурик, я рад. А понимания логики моей игры у вас нет.
shurik-ua
09.10.2015, 17:20
А понимания логики моей игры у вас нет.
конечно - вы же не говорите какая функция требует IM0 only.
просто пытаюсь объяснить что то что вы пытаетесь сделать это выглядит как костыль.
Oleg N. Cher
09.10.2015, 17:29
Я не только говорю, я даже привёл полностью её исходник. В первом посте темы. Вы невнимательно читали, а с выводами торопитесь.
shurik-ua
09.10.2015, 17:38
... и как вам тут же ответили что для опроса клавиатуры менять режим не нужно, но вы почему-то упорно пытаетесь его менять.
Если понимание механизмов работы прерываний неполное - просто поверьте на слово - менять режим в пределах приложения (кроме этапа инициализации) не нужно - тем более если этот режим IM2.
Oleg N. Cher
09.10.2015, 17:46
О'кей, я вас услышал, но сделаю так, как, считаю, будет лучше. Исходя из своего опыта. Зачем именно так. В принципе игра устроена именно так, как и предлагается. Генерится таблица, ставится IM 2 - и поехали. Теперь игрок погеймал, проиграл и получил геймовер и просьбу ввести имя. Вот тут-то из процедуры опроса кнопок, которая должна учитывать регистр символов, понимать Shift, делать автоповтор нажатой клавиши при её удерживании, и ставится режим IM 1 - чисто для сокращения объёма кода. И здесь jerri предлагает мне всё это не юзать из ПЗУ, а переписывать заново? Вот уж спасибо, не надо.
James DiGreze
09.10.2015, 17:48
Поясните, пожалуйста, не избыточен ли он, и зачем здесь нужно устанавливать регистр I ?Установка I в 63 вроде бы связано с ULA фирменных спектрумов, точнее сказать не смогу.
shurik-ua
09.10.2015, 17:58
Ну так опрашивайте клавиатуру из ПЗУ - режим то зачем менять.
Кстати насчёт того чтобы не использовать ПП ПЗУ совет весьма дельный - тут например можно надёргать процедур на любой вкус - http://zxdn.narod.ru/coding.htm
LD A,#63
LD I,A
IM 1
Поясните, пожалуйста, не избыточен ли он, и зачем здесь нужно устанавливать регистр I ?
Я может чего-то не помню, но это похоже лишнее, т.к. в IM 1 ничего с шины не читается, при обработке прерываний и этот I регистр вообще может быть использован как регистр общего назначения.
Кстати, на оригинальных машинах важно какое именно место выбрано под таблицу: http://zx-pk.ru/showthread.php?t=7427
shurik-ua
09.10.2015, 18:04
Вот кстати - пункт 3 как раз ваш случай - http://zxpress.ru/article.php?id=3480
Насчет загрузки 63 в I:
http://maben.homeip.net/static/s100/sinclair/magazine/1984/198411%20sinclair%20user.pdf (размер 60Мбайт!), 122 страница:
"TROFF performs the opposite function
in that it resets the machine to
normal interrupts. You will notice that
I is loaded with 3FH or 63. That is the
address (3FFF) that the ROM sets up as
an interrupt vector on power up. In
interrupt mode 2 that would cause a
jump to address 60 which is part way
through the normal interrupt routine. It
is important, therefore, when resetting
to put the machine into !MI. The only
USR call that is necessary anywhere in
this program is the initial one to
TRON. TROFF is called by means of a
normal Basic variable."
Всё это выглядит как бред наркомана или как мега костыль...
Oleg N. Cher, мне не нравится твой тон.
мне по большому счету пофиг как будет выглядеть твоя кроссплатформенная игра.
меня больше интересовало чтобы на спектруме она выглядела достойно.
но нет так нет.
Alex Rider
09.10.2015, 23:21
... и как вам тут же ответили что для опроса клавиатуры менять режим не нужно, но вы почему-то упорно пытаетесь его менять.
Если понимание механизмов работы прерываний неполное - просто поверьте на слово - менять режим в пределах приложения (кроме этапа инициализации) не нужно - тем более если этот режим IM2.
Вот тут я поспорю с тобой и соглашусь с Олегом. Если я хочу в меню игры использовать ПЗУшный опрос кнопок, а в игре - свой в IM2, то так проще и правильнее. Ибо не сдался мне в меню обработчик IM2, который хочет играть музыку, опрашивать управление, считать игровые таймеры и так далее. И уж точно в игре мне не нужен обработчик прерываний BASIC'а. А патчить ISR при переходе в меню и в игру или обвешиваться флагами (игра/меню) нафик не уперлось.
---------- Post added at 23:14 ---------- Previous post was at 23:12 ----------
Всё, вопрос №1 закрыт.
Еще раз намекну: используй IM1, а не IM0. В теории на клонах с нестабильной шиной должно быть все ок при IM0, но на то шина и нестабильная, что хрен его знает что там будет болтаться в момент прихода прерывания.
---------- Post added at 23:18 ---------- Previous post was at 23:14 ----------
Поясните, пожалуйста, не избыточен ли он, и зачем здесь нужно устанавливать регистр I ?
Если ты планируешь вернуться в BASIC корректно, обеспечь нормальную работу софтов, которые будут запущены после твоего. Кстати, можно запросто верруться и не в BASIC, а в другую ОС, которая может запустить твою игру. Софты ждут, что i = #3f - как это выставляет BASIC при сбросе. Олсо не забывай при выходе выставлять iy в #5c3a и hl' в #2758.
---------- Post added at 23:21 ---------- Previous post was at 23:18 ----------
LD A,#63
В используемом ассемблере символ # - это признак адресации или 16-ричной системы? в i надо засылать #3f = 63 dec.
Oleg N. Cher, вот тебе пример простейшего способа ввода текста на примере опроса клавиатуры, что я публиковал постом выше. Драйвер клавиатуры, вывода текста и все остальное не зависят от системных переменных ПЗУ, режима IM1, не используют подпрограмм ПЗУ.
https://www.dropbox.com/s/wk4yrlmc7l786zw/prj_keys.zip (https://www.dropbox.com/s/wk4yrlmc7l786zw/prj_keys.zip?dl=0)
Затык №1. Не связанный с Обероном, jerri. Сегодня оптимизировал вывод тайла 16x12 точек и опять нашёл баг в SDCC (https://sourceforge.net/p/sdcc/bugs/2426/). Подождём-с фикса. Эх, и вот так всё время. :mad_std:
здесь нет ошибки компилятора
здесь есть ошибка программиста
error: [JR] Target out of range (131)
а вот вторая ошибка программиста
LDI ; #9
LDI
DEC E
DEC E
INC D
если интересно поясню где именно ошибка
а вот вторая ошибка программиста
LDI ; #9
LDI
DEC E
DEC E
INC D
если интересно поясню где именно ошибка
Не, ну там на один байт можно сделать короче и быстрее (сохранить в A, в B или в C регистре содержимое E, а затем после каждой пары LDI оттуда восстанавливать, а не делать два декремента). Но чтоб ошибка?.. Судя по коду там запись двух байт спрайта по горизонтале, а затем переход на строку ниже по вертикале. Проблемы будут если выводить в последний байт по горизонтале.
в B или в C регистре содержимое E
вообще-то LDI уменьшает BC
Oleg N. Cher
11.10.2015, 13:27
Да, позор моим седым власам с "багом в SDCC", просто мессаг сбил с толку.
Насчёт DEC E уже понял, исправил на DEC DE.
Да, запамятовал. Но если очень надо, то можно таки использовать B, если в C записать 255 и число исполнений LDI после этого не превышает этого значения.
Oleg N. Cher
11.10.2015, 13:45
Еще раз намекну: используй IM1, а не IM0.Обязательно применю IM 1, Алекс.
Софты ждут, что i = #3f - как это выставляет BASIC при сбросе. Олсо не забывай при выходе выставлять iy в #5c3a и hl' в #2758.Само собой. Значит i = #3f нужно именно софтам, а если я в игре из IM 2 перейду в IM 1, а потом снова назад, то можно i не трогать?
В используемом ассемблере символ # - это признак адресации или 16-ричной системы? в i надо засылать #3f = 63 dec.Это SDCC'шный асм. В нём # обязательный символ перед литералом, но не всяким. Например, JP 0 или .DB 0 можно без него. Да, это десятичное число было.
---------- Post added at 13:40 ---------- Previous post was at 13:36 ----------
Наверное дёргать регистры не имеет смысла - LDI портит и D, и E. А смысл есть попробовать LDI: DEC E: DEC DE, всё-таки пару тактов выиграем.
---------- Post added at 13:45 ---------- Previous post was at 13:40 ----------
3) IM0 выбран как дань и поклонение совместимости с i8080?Нет, просто я где-то читал, что для ZX режимы IM 0 и IM 1 абсолютно не имеют отличий. Но если они таки есть, вам, железячникам виднее.
5) Вы упомянули кроссплатформенность (https://ru.wikipedia.org/wiki/Кроссплатформенное_програ мное_обеспечение), т.е. программу всё-равно приодеться перекомпелировать на другой аппаратной платформе, вопрос - для каких платформ?Планируются Java ME, SDL (Win32/64, Linux), Win32/64, возможно, MSX, DOS и Android (методом NDK на SDL 2 и SDK - под dalvik). jerri штампует игры, которые бесполезны для переноса на другие платформы, я же делаю долго, но зато таким способом игры до меня никто не делал - я первопроходец.
[/COLOR]Наверное дёргать регистры не имеет смысла - LDI портит и D, и E. А смысл есть попробовать LDI: DEC E: DEC DE, всё-таки пару тактов выиграем.
было
;de= #40fe
ldi ;de= #40ff
ldi ;de= #4100
dec e ;
dec e ;de= #41fe
inc d ;de= #42fe
должно быть
ldi
ld a,(hl)
ld (de),a
inc hl
dec de
inc d
jerri штампует игры, которые бесполезны для переноса на другие платформы, я же делаю долго, но зато таким способом игры до меня никто не делал - я первопроходец.
слышь, первопроходец, про кампанию OPERAsoft слышал хоть раз?
Oleg N. Cher
11.10.2015, 15:18
Вспоминается Goody, Livingstone (supongo), не?
Рекомендацию заменить ldi на ld a,(hl): ld (de),a с благодарностью принимаю.
Я вообще сделал два варианта вывода тайлов - компактный и быстрый, который заточен не проверять переходы на другую треть экрана.
А вот с цветностью будут проблемы, jerri. Я согласен, цветная игра красивше. Но тут либо переходить на тайлы 16x16, теряя одноэкранность без рулонной прокрутки, либо оставить монохромность. Или заюзать мультиколорный движок типа Nirvana, но это чревато своими проблемами, так что, пожалуй, оставим монохром.
Вспоминается Goody, Livingstone
вот оно и написано грубо говоря скриптами.
скрипт один - а реализация ввода/вывода для каждой платформы своя.
Oleg N. Cher
11.10.2015, 16:23
Угу, так а где посмотреть можно? Goody был же не только для Z80-based, он и для DOS'а был.
А я-то уже хотел спросить, юзали ли в OPERAsoft язык Оберон ;) Натурально, jerri, мало ли что где было, главное - что открыто пощупать мона.
Угу, так а где посмотреть можно? Goody был же не только для Z80-based, он и для DOS'а был.
А я-то уже хотел спросить, юзали ли в OPERAsoft язык Оберон ;) Натурально, jerri, мало ли что где было, главное - что открыто пощупать мона.
ммм? это были серьезные ребята, они бабло зарабатывали. зачем им детские поделки?
И вопрос к тебе: что такого в Dash что ты его не можешь сделать цветным?
Oleg N. Cher
11.10.2015, 16:55
Одноэкранность (без прокрутки) и 16x16 клеточек разрешение. Плюс точность порта, которую я свято блюду. ;)
Плюс точность порта, которую я свято блюду
тогда надо было смотреть в сторону atari8, а не на сомнительную поделку под dos
Одноэкранность (без прокрутки) и 16x16 клеточек разрешение. Плюс точность порта, которую я свято блюду. ;)
у тебя герой движется познакоместно. почему его не покрасить?
Shadow Maker
11.10.2015, 21:52
Да пусть хоть чего-нибудь сделает, а то у меня уже голова болит от тем в тыщу страниц и нулевым выхлопом.
Oleg N. Cher
13.10.2015, 02:33
jerri, как его покрасить? он 16x12 точек и не привязан к атрибутам.
---------- Post added at 02:33 ---------- Previous post was at 01:52 ----------
Игры типа Goody разрабатывались одновременно сразу для нескольких архитектур на их ассемблерах. Ничего необычного в этом нет, это не высокоуровневая разработка. Это гора тяжёлой работы, облегчаемой только хорошим пониманием тонкостей алгоритмов в момент их кодирования. Результат - на 99% бесполезные для портирования мегабайты машинного кода.
Кто-то здесь предложил как усовершенствовать этот процесс? Нет, чешут и дальше на асме. Или на Си в стиле асма. А то, что делаю я, делается не затем, чтобы вас впечатлить, я уже это говорил. Это способ засунуть в Z80 игру несколько другим способом.
jerri, как его покрасить? он 16x12 точек и не привязан к атрибутам.
печально.
Игры типа Goody разрабатывались одновременно сразу для нескольких архитектур на их ассемблерах. Ничего необычного в этом нет, это не высокоуровневая разработка. Это гора тяжёлой работы, облегчаемой только хорошим пониманием тонкостей алгоритмов в момент их кодирования. Результат - на 99% бесполезные для портирования мегабайты машинного кода.
эксперт поди?
OPERAsoft выпустили 25 игр за период с 1988 до 1991 под 3-4 платформы.
грубо говоря по 2 месяца на игру на 3 платформы.
почти все игры написаны под один движок.
возможно использовался конструктор.
какие на тот момент в Испании были распространены домашние компы?
Спектрум, Коммодор, Амстрад, MSX. под них и писали.
Кто-то здесь предложил как усовершенствовать этот процесс? Нет, чешут и дальше на асме. Или на Си в стиле асма.
предлагали. обычно это идея с конструкторами по типу АГД
что значит С в стиле асма? Чуррера например неплохо смотрится и написана на С, кроме библиотек.
А то, что делаю я, делается не затем, чтобы вас впечатлить, я уже это говорил. Это способ засунуть в Z80 игру несколько другим способом.
да кто же спорит, засовывай. посмотрим, впечатлимся.
сделаешь красиво и наверняка найдутся желающие пойти по твоим стопам.
Oleg N. Cher
15.10.2015, 00:22
Возможно, в OPERAsoft использовали внутренний низкоуровневый язык типа PL/M (на котором, кстати, были написаны некоторые утилиты для CP/M). Странно, что до нас не дошла никакая об этом информация (например, в интервью). Так что я всё-таки склоняюсь, что юзали только асм, программеры были хорошие просто.
Что значит С в стиле асма? Это значит непереносимый код, завязанный на платформенных особенностях и практически бесполезный для портирования. В Dash я такой код вынесу в библиотеки, а логику вынесу в отдельные модули.
тогда надо было смотреть в сторону atari8, а не на сомнительную поделку под dos1. Порт Boulder Dash с Atari 8 на ZX уже есть.
2. Этот болдер - моя первая игра, в которую я шпилил на PC, атариевский, наоборот, не люблю.
3. Потом я познакомился с В.Мутелем, автором порта с БК на ПЦ, выпросил у него исходники этого болдера на Си. Атариевский же пришлось бы дизасмить и кропотливо разбираться.
4. Для переписывания на Оберон нужна простая игра, чем проще - тем лучше. Эта проста как гвоздь.
5. Я не игрописатель и не пишу игры, только ностальгирую.
6. Я не люблю кодить на асме и Си. Хороших в вашем понимании игр от меня не ждите.
Возможно, в OPERAsoft использовали внутренний низкоуровневый язык типа PL/M (на котором, кстати, были написаны некоторые утилиты для CP/M). Странно, что до нас не дошла никакая об этом информация (например, в интервью). Так что я всё-таки склоняюсь, что юзали только асм, программеры были хорошие просто.
насчет хороших... я бы поспорил. некоторые ими использованные решения неоднозначны.
Интервью было... на msdox.com только все давно уже не работает.
основная логика писалась как минимум на 3 машины сразу
Спек Амстрад MSX
c учетом того что движок Corsarios, Sirwood, Gonzalezzz, Mutant Zone отличается незначительно, а сам код довольно абстрактный то я бы компилил логику отдельно а сам движок под конкретную машинку.
Что значит С в стиле асма? Это значит непереносимый код, завязанный на платформенных особенностях и практически бесполезный для портирования. В Dash я такой код вынесу в библиотеки, а логику вынесу в отдельные модули.
а где такие исходники?
неужто в Dash?
а так да, многие программисты называют такое *****код.
2. Этот болдер - моя первая игра, в которую я шпилил на PC, атариевский, наоборот, не люблю.
я его играл на БК кстати
3. Потом я познакомился с В.Мутелем, автором порта с БК на ПЦ, выпросил у него исходники этого болдера на Си. Атариевский же пришлось бы дизасмить и кропотливо разбираться.
там кстати сурово реализовано всё, иначе по скорости был бы ахтунг.
тебе расковырять оригинал с БК?
6. Я не люблю кодить на асме и Си. Хороших в вашем понимании игр от меня не ждите.
какие игры хорошие в твоем "нашем понимании"?
Shadow Maker
15.10.2015, 12:29
Олег, у тебя когда прототип бегающий будет? А то 5 страниц и ни картинки, ничего.
Олег, у тебя когда прототип бегающий будет? А то 5 страниц и ни картинки, ничего.
да есть у него прототип
вот тут (http://zx-pk.ru/showpost.php?p=830632&postcount=388)он его выкладывал.
Shadow Maker
15.10.2015, 14:54
Ну вот я это не заметил в 50 сообщениях.
Так, ну что, бегает, это хорошо. Цвета нет - неудобно, не сразу понятно что трава, а что стенка. Ну багов пока достаточно с отрисовкой/камнями, но это потом исправит автор, думаю.
Ну жду итоговой версии, посмотреть на играбельность. Но унылая чернота не радует. Так ли нужна привязка к 16x12?
shurik-ua
15.10.2015, 15:01
Так ли нужна привязка к 16x12?
на спеке ж вроде 16х16 и всё в цветах и даже переливается
на спеке ж вроде 16х16 и всё в цветах и даже переливается
У БК экран 256х256
потому и поле игровое 16х16 из тайлов 16х16
на спек лезет только 12х16
но аттрибуты бы почистить не помешало перед началом игры.
shurik-ua
15.10.2015, 15:16
может тайлы оставить 16х16, а игровое поле уменьшить - опять же в спековской версии так и сделано, если не ошибаюсь.
Alex Rider
15.10.2015, 19:08
У БК экран 256х256
потому и поле игровое 16х16 из тайлов 16х16
на спек лезет только 12х16
Может, поэтому и не надо писать порты один-в-один, делать кастомную реализацию отрисовки под разные платформы? Иначе получается, что делается порт с самыми суровыми ограничениями всех поддерживаемых платформ. На PC и Андроиде тоже будет черно-белая версия только потому, что на Спеке раскрасить нельзя?
Может быть, для тренировки портирования на это пойти можно, в конце концов, релиз не то, что не коммерческий, но даже и не для поиграть делается, а для попортировать. Но, может, есть смысл заодно потренироваться делать и платформенно-зависимую логику, а не только взаимодействие с железом?
Oleg N. Cher
16.10.2015, 16:48
jerri, то, что называется гордо Churrera, на поверку оказывается z88dk + splib/sp1. Футы-нуты, а я уж было подумал. ;)
а где такие исходники?
неужто в Dash?Да во всех твоих играх для спека, и не только твоих. Открой исходник любой игры на бориель басице или Си и прикинь как быстро ты его на винду портанёшь.
а так да, многие программисты называют такое *****код.Вот именно.
тебе расковырять оригинал с БК?Всё уже до тебя сделал Мутель, см. аттач.
какие игры хорошие в твоем "нашем понимании"?Ну такие, знаешь, охрененные, которых всё время требует Screw... видно, ему в детстве погремушек не покупали...
Не против цвета. Не против 16x16. Но рисовать кто будет? И уровни редизайнить (если делать без прокрутки). Если с прокруткой - тоже надо редизайнить, потому что уже играбельность будет другая.
Можно попробовать реализовать движок с вертикальной прокруткой и цветом. Но потом, давайте сперва закончим этот вариант.
О ч/б варианте для Андроида и речи нет.
Кстати, именно эта версия с БК вдохновила, наряду с Мутелем, любителей на порт для Вектора и для винды. Так что вполне себе симпотишная игрушка.
• http://boulder-dash.narod.ru
Кстати, jerri, изучи код этого варианта для винды, поймёшь, что на Си *****кодят не только для спека. На Си так пишут вообще, и я так на Си пишу.
• http://asdasd.rpg.fi/~svo/scalar/ware/186/
• http://asdasd.rpg.fi/~svo/scalar/ware/187/
История разработки порта для Поиска.
shurik-ua
16.10.2015, 17:04
Но рисовать кто будет? И уровни редизайнить
дык их не нужно редизайнить - имхо нужно только изменить процедуру отрисовки игрового поля, чтобы она рисовала на один(два, три) тайла меньше по вертикали - а всё остальное остаётся так же.
Блин, вот никак не могу понять смысл всего этого... Красота кода ради красоты кода? Поясните плиз, если кому не влом...
Alex Rider
16.10.2015, 17:16
Но рисовать кто будет?
Можно на первое время утащить спрайты из оригинального Boulder Dash.
И уровни редизайнить (если делать без прокрутки). Если с прокруткой - тоже надо редизайнить, потому что уже играбельность будет другая.
Я правильно понимаю, что у тебя 1 уровень = 1 экран? Я просто думал, что ты делаешь игру по мотивам оригинала (https://ru.wikipedia.org/wiki/Boulder_Dash) от Peter Liepa, там изначально есть прокрутка.
jerri, то, что называется гордо Churrera, на поверку оказывается z88dk + splib/sp1. Футы-нуты, а я уж было подумал. ;)
ммм? а что ты подумал?
подключи другие библиотеки - будет игра под другую платформу.
La Churrera is a framework composed by a modular engine coded in C and a set of tools to make games for the ZX Spectrum. La Churrera needs z88dk to compile and uses the splib2 game library by Alvin Albrecht (*).
на этом люди игры пишут.
Да во всех твоих играх для спека, и не только твоих. Открой исходник любой игры на бориель басице или Си и прикинь как быстро ты его на винду портанёшь.
зачем они на винде?
на винду нужно 3д и мультимедиа иначе никто играть не будет.
не отрицаю Бастион может вырасти под виндой в нечто впечатляющее, но переписыванием исходников этого не добиться.
Всё уже до тебя сделал Мутель, см. аттач.
мутель? кто такой мутель?
сорцов оригинала не вижу.
Не против цвета. Не против 16x16. Но рисовать кто будет? И уровни редизайнить (если делать без прокрутки). Если с прокруткой - тоже надо редизайнить, потому что уже играбельность будет другая.
ну как бы изначально графика 16х16 не?
Кстати, именно эта версия с БК вдохновила, наряду с Мутелем, любителей на порт для Вектора и для винды. Так что вполне себе симпотишная игрушка.
• http://boulder-dash.narod.ru
Кстати, jerri, изучи код этого варианта для винды, поймёшь, что на Си *****кодят не только для спека. На Си так пишут вообще, и я так на Си пишу.
значит говоришь ты тоже пишешь тормозной и кривой код?
• http://asdasd.rpg.fi/~svo/scalar/ware/186/
• http://asdasd.rpg.fi/~svo/scalar/ware/187/
История разработки порта для Поиска.
где история?
---------- Post added at 18:41 ---------- Previous post was at 18:37 ----------
Блин, вот никак не могу понять смысл всего этого... Красота кода ради красоты кода? Поясните плиз, если кому не влом...
Он переписывает игру на Обероне.
чтобы скомпилить на спеке, на коммодоре и на пц одновременно.
Oleg N. Cher
18.10.2015, 23:51
дык их не нужно редизайнить - имхо нужно только изменить процедуру отрисовки игрового поля, чтобы она рисовала на один(два, три) тайла меньше по вертикали - а всё остальное остаётся так же.Ну потом измените, если захотите. Игра open source.
Блин, вот никак не могу понять смысл всего этого... Красота кода ради красоты кода? Поясните плиз, если кому не влом...Поясню и тебе, и Rider'у. Когда я плотно сидел на Си и захотелось что-то пописать на ЯВУ для Спектрума - я мечтал про язык, на котором смогу писать и для ZX, и для Java ME - тогда эта платформа была в тренде, ещё был Palm OS, WinCE и Symbian. Я понимал, что освоить всё это физически не смогу, впрочем, и не пришлось - их время быстро ушло. Сейчас вместо Palm OS - Android и iOS, их я тоже освоить вряд ли смогу, но хотя бы попытаюсь. Но я понял, что профит от разработки для мобильных платформ сегодня - сродни игре в рулетку. Мой протест - это нежелание для каждой новой платформы учить новый язык и осваивать новые методы разработки. Мне был нужен совсем простой инструмент, и я его получил, притом своими скромными силами. Но в основе лежало желание переписать Дурака от CopperFeet на такой язык, который потом можно будет развернуть везде или почти где угодно. Самый первый кандидат - это был конечно Си, но я в нём разочаровался, поработав плотно несколько лет. Потом поглядел в сторону Модулы-2, это хороший кандидат, гораздо лучше Си, но мало качественных компиляторов.
Зачем же код ради кода. И поиграть можно будет, кто любит подобные игры. Но внутренняя цель проекта - без претензий, ибо я не игродел, постараться сделать максимально точный порт на Обероне, точность нужна чтобы не списывать корявости и несоответствия на инструмент разработки. Есть такой род деятельности, от которого получаешь силу, энергию. Вот, оно для меня и есть. Как относятся к этому другие - мне почти не важно.
Кстати, так просто и не пересобрать. Придётся переписывать низкий уровень для каждой новой платформы, а это чёртова работа, требующая квалификации и, как минимум, отличного знания этих платформ. Вот сейчас застрял на длительности звука, и что? Ругать Оберон и ZXDev набежали все кому не лень, а помочь понять чего там не так с моей процедурой задержки - молчок. Ну да ладно.
jerri, история в приложенном файле в том посте. Исходники на Си я не могу дать без разрешения, но могу спросить Мутеля, вдруг разрешит, а зачем они тебе? Хочешь конкуренцию составить? Явно ты неравнодушен к этому клону болдерDash'а. ;)
Поясню и тебе, и Rider'у. Когда я плотно сидел на Си и захотелось что-то пописать на ЯВУ для Спектрума - я мечтал про язык, на котором смогу писать и для ZX, и для Java ME - тогда эта платформа была в тренде, ещё был Palm OS, WinCE и Symbian. Я понимал, что освоить всё это физически не смогу, впрочем, и не пришлось - их время быстро ушло. Сейчас вместо Palm OS - Android и iOS, их я тоже освоить вряд ли смогу, но хотя бы попытаюсь. Но я понял, что профит от разработки для мобильных платформ сегодня - сродни игре в рулетку. Мой протест - это нежелание для каждой новой платформы учить новый язык и осваивать новые методы разработки. Мне был нужен совсем простой инструмент, и я его получил, притом своими скромными силами. Но в основе лежало желание переписать Дурака от CopperFeet на такой язык, который потом можно будет развернуть везде или почти где угодно. Самый первый кандидат - это был конечно Си, но я в нём разочаровался, поработав плотно несколько лет. Потом поглядел в сторону Модулы-2, это хороший кандидат, гораздо лучше Си, но мало качественных компиляторов.
Профит от разработки можно предсказать кстати говоря.
Но да ты не игродел. Для тебя рулетка.
Кстати, так просто и не пересобрать. Придётся переписывать низкий уровень для каждой новой платформы, а это чёртова работа, требующая квалификации и, как минимум, отличного знания этих платформ. Вот сейчас застрял на длительности звука, и что? Ругать Оберон и ZXDev набежали все кому не лень, а помочь понять чего там не так с моей процедурой задержки - молчок. Ну да ладно.
теперь ты обвиняешь нас в том что тебе не помогли?
вместо того чтобы разместить заказ на изготовление процедур для твоей библиотеки ты нас в чем-то обвиняешь? :)
jerri, история в приложенном файле в том посте. Исходники на Си я не могу дать без разрешения, но могу спросить Мутеля, вдруг разрешит, а зачем они тебе? Хочешь конкуренцию составить? Явно ты неравнодушен к этому клону болдерDash'а. ;)
исходники Мутеля мне не нужны. Если мне понадобится эта игра в исходниках я буду работать с оригинальным файлом.
Этот клон мне совершенно не нравится. он хорош на БК. для спека с его вариантами болдердаша после Reptonа и EarthShakerа требуется что-то более оригинальное и эпичное.
Оно даже лежит у меня в папке проекты. Но не сейчас.
для спека с его вариантами болдердаша после Reptonа и EarthShakerа требуется что-то более оригинальное и эпичное.
DownToEarth еще очень неплох.
Oleg N. Cher
19.10.2015, 22:48
Профит от разработки можно предсказать кстати говоря. Но да ты не игродел. Для тебя рулетка.Не только для меня рулетка. Для многих рулетка. Ты Хабр читаешь? Там часто пишут про геймдев для Android. Это бег по краю лезвия, и вообще - угодить игроманам крайне сложно. Хотя не буду отрицать, кто-то и попадает (http://megamozg.ru/post/20236/) в десятку. Но всё равно: как основной заработок - сомнительно.
вместо того чтобы разместить заказ на изготовление процедур для твоей библиотеки ты нас в чем-то обвиняешь? :)А где здесь бюро заказов? :) Мог бы попробовать заказать тебе, но поскольку:
Этот клон мне совершенно не нравится.то упс.
А я вот не вижу смысла продуцировать ещё одну игру, их для Спека сделано уже столько, что все посмотреть - жизни не хватит. Ах да, что-то покруче Shaker'а (и Rockford'а)? А смысл, это для гиков, а для даже обычных юзеров смартфонов - не покатит, не тренд. Кроме того, от твоей писанины на асме до игры на смартфоне - пропасть, которую можно преодолевать или:
1) изучением новых средств разработки и (как минимум) языков Java, C#, C++.
или:
2) путь в духе Monkey-X (http://monkey-x.ru), XDev и кроссплатформенности. Язык один, препятствий и трудностей - много. Мультитаргетную игру на порядки труднее разработать, jerri, что бы ты там ни думал.
Не только для меня рулетка. Для многих рулетка. Ты Хабр читаешь? Там часто пишут про геймдев для Android. Это бег по краю лезвия, и вообще - угодить игроманам крайне сложно. Хотя не буду отрицать, кто-то и попадает (http://megamozg.ru/post/20236/) в десятку. Но всё равно: как основной заработок - сомнительно.
Конечно читаю.
А где здесь бюро заказов? :) Мог бы попробовать заказать тебе, но поскольку:
то упс.
этот пост был написан 19.10.2015 11:14
а жаловался ты несколько раньше 19.10.2015 00:51
Кстати, так просто и не пересобрать. Придётся переписывать низкий уровень для каждой новой платформы, а это чёртова работа, требующая квалификации и, как минимум, отличного знания этих платформ. Вот сейчас застрял на длительности звука, и что? Ругать Оберон и ZXDev набежали все кому не лень, а помочь понять чего там не так с моей процедурой задержки - молчок. Ну да ладно.
ага...
А я вот не вижу смысла продуцировать ещё одну игру, их для Спека сделано уже столько, что все посмотреть - жизни не хватит. Ах да, что-то покруче Shaker'а (и Rockford'а)? А смысл, это для гиков, а для даже обычных юзеров смартфонов - не покатит, не тренд. Кроме того, от твоей писанины на асме до игры на смартфоне - пропасть, которую можно преодолевать или:
1) изучением новых средств разработки и (как минимум) языков Java, C#, C++.
или:
2) путь в духе Monkey-X (http://monkey-x.ru), XDev и кроссплатформенности. Язык один, препятствий и трудностей - много. Мультитаргетную игру на порядки труднее разработать, jerri, что бы ты там ни думал.
ага...
я так и не понял. собираешься ли ты свой Даш делать мультиплатформенным или нет?
сначала ты жалуешься что никто не хочет тебе помочь с платформозависимыми кусками для спека. А потом внезапно заявляешь что тебе нужны эти куски нужны для других платформ.
давай так. Это форум про спек - про это написано наверху.
На этом форуме собрались спецы понастальгировать про спек
значит просить помощи с версией под С64 или MSX здесь как минимум неумно.
Так что если тебе нужна помощь в написании каких то кусков для Dash то можешь их просить прямо в этой теме - где заявлена разработка этой игры.
Если тебе нужны библиотеки под С64 или Атари то тебе стоит попросить их на соответствующих форумах. Здесь спецов по атари маловато.
я понятно написал?
---------- Post added at 09:47 ---------- Previous post was at 09:45 ----------
А по поводу иФонов и Андроидов - там очень мало кроссплатформенности.
Эти модели устройств имеют практически идентичные показатели.
как графических возможностей так и программных.
Oleg N. Cher
20.10.2015, 17:04
Вот именно, показатели почти идентичные, а методы разработки очень различные, там и в плане языков очень есть где развернуться. Для iOS основной язык - Objective C (это надмножество Си в сторону Smalltalk, кстати, есть подобное направление развития Модулы-2). Для Android'а - Java как клей поверх Dalvik и C/C++ для низкого уровня. Но их вместе объединяет такой инструмент как Monkey-X, давая, правда, свой язык для кодирования, максимально унифицированный под специфику таких устройств (включая библиотеки), но зато один. Вот мне такой подход и нравится, и для его развития буду работать, хотя плоды наверно будут пожинать уже другие, если они, плоды, будут сладки.
Dash конечно разрабатывается как мультиплатформенный. Сейчас идёт работа над самой нудной частью - меню, обвязка, низкоуровневые процедуры для ZX-версии, которая, вероятно, самая готовая на данный момент.
---------- Post added at 17:04 ---------- Previous post was at 16:21 ----------
Вопрос №3. Про Kempston joystick
Мне попалась такая процедура проверки наличия Кемпстона:
; AUTOconfig
LD B,250
A_config01$:
IN A,(#1F)
AND #1F
RET NZ ; Кемпстон джойстика нет
DJNZ A_config01$
; Джойстик есть
А вот здесь (http://zxpress.ru/article.php?id=16611) приводится такая:
;
; (C) EVP-SOFT
;
; на время определения наличия Kempston
; джойстика желательно установить режим
; IM 2 и программу обработки прерываний
; сделать короткой:
;I_ADDR EI
; RETI
;
TEST_J HALT ; сразу после HLT порт атрибутов выключ.
XOR A
IN A,(#1F)
AND #1F ;#1F = %00011111
JR Z,джойстик есть
JR джойстика нетА здесь (http://zxpress.ru/article.php?id=16640) вообще такая:
EI
HALT
LD A,#FF
IN A,(#1F)
AND #E0
JR Z,PRESENT
JR NOT PRESENT
Прокомментируйте, пожалуйста.
1. Встречалась ли у вас на практике ситуация, когда после опроса из порта #1F биты 5, 6 или 7 были установлены? Или можно полностью полагаться на то, что они всегда сброшены?
2. Нужно ли опрашивать порт #FF1F или достаточно #1F? (я встречал #1F в очень многих играх)
3. Лучше опрашивать наличие Кемпстона по пяти младшим битам или по трём старшим?
4. Упоминается, что при опросе наличия Кемпстона по младшим пяти битам если джойстик не в свободном положении или кнопка нажата, то он и не определяется. Насколько это приемлемо?
Вот именно, показатели почти идентичные, а методы разработки очень различные, там и в плане языков очень есть где развернуться. Для iOS основной язык - Objective C (это надмножество Си в сторону Smalltalk, кстати, есть подобное направление развития Модулы-2). Для Android'а - Java как клей поверх Dalvik и C/C++ для низкого уровня. Но их вместе объединяет такой инструмент как Monkey-X, давая, правда, свой язык для кодирования, максимально унифицированный под специфику таких устройств (включая библиотеки), но зато один. Вот мне такой подход и нравится, и для его развития буду работать, хотя плоды наверно будут пожинать уже другие, если они, плоды, будут сладки.
ты не совсем понял о чем я говорю
например рассмотрим пару 8м битных платформ какими ресурсами он обладает
Амстрад СРС
мощный проц 8/16 бит 4 мгц частота
достаточно мощный видеопроц. качественная раскраска экрана. нет аппаратных спрайтов
Спек
мощный проц 8/16 бит 3.5 мгц частота, жестко заданный экран, грубая окраска экрана. нет аппаратных спрайтов
Коммодор
слабый но эффективный проц 8бит 1 мгц частота, 8 аппаратных спрайтов 24*21, эффективный видеопроц
Apple 2
слабый но эффективный проц 8бит 1 мгц частота, 2 экрана, параноидальный подбор цветов.
причем все платформы имеют разное и негибкое разрешение экрана.
что даёт совершенно разную нагрузку на процессор при освежении экрана.
писать один проект под каждую из этих платформ сложно - каждая имеет свои особенности.
сравни тот же Gonzalezz на MSX CPC и ZX.
---------- Post added at 18:18 ---------- Previous post was at 18:13 ----------
Вот именно, показатели почти идентичные, а методы разработки очень различные, там и в плане языков очень есть где развернуться. Для iOS основной язык - Objective C (это надмножество Си в сторону Smalltalk, кстати, есть подобное направление развития Модулы-2). Для Android'а - Java как клей поверх Dalvik и C/C++ для низкого уровня. Но их вместе объединяет такой инструмент как Monkey-X, давая, правда, свой язык для кодирования, максимально унифицированный под специфику таких устройств (включая библиотеки), но зато один. Вот мне такой подход и нравится, и для его развития буду работать, хотя плоды наверно будут пожинать уже другие, если они, плоды, будут сладки.
Dash конечно разрабатывается как мультиплатформенный. Сейчас идёт работа над самой нудной частью - меню, обвязка, низкоуровневые процедуры для ZX-версии, которая, вероятно, самая готовая на данный момент.
---------- Post added at 17:04 ---------- Previous post was at 16:21 ----------
Вопрос №3. Про Kempston joystick
Мне попалась такая процедура проверки наличия Кемпстона:
; AUTOconfig
LD B,250
A_config01$:
IN A,(#1F)
AND #1F
RET NZ ; Кемпстон джойстика нет
DJNZ A_config01$
; Джойстик есть
А вот здесь (http://zxpress.ru/article.php?id=16611) приводится такая:
;
; (C) EVP-SOFT
;
; на время определения наличия Kempston
; джойстика желательно установить режим
; IM 2 и программу обработки прерываний
; сделать короткой:
;I_ADDR EI
; RETI
;
TEST_J HALT ; сразу после HLT порт атрибутов выключ.
XOR A
IN A,(#1F)
AND #1F ;#1F = %00011111
JR Z,джойстик есть
JR джойстика нетА здесь (http://zxpress.ru/article.php?id=16640) вообще такая:
EI
HALT
LD A,#FF
IN A,(#1F)
AND #E0
JR Z,PRESENT
JR NOT PRESENT
Прокомментируйте, пожалуйста.
1. Встречалась ли у вас на практике ситуация, когда после опроса из порта #1F биты 5, 6 или 7 были установлены? Или можно полностью полагаться на то, что они всегда сброшены?
2. Нужно ли опрашивать порт #FF1F или достаточно #1F? (я встречал #1F в очень многих играх)
3. Лучше опрашивать наличие Кемпстона по пяти младшим битам или по трём старшим?
4. Упоминается, что при опросе наличия Кемпстона по младшим пяти битам если джойстик не в свободном положении или кнопка нажата, то он и не определяется. Насколько это приемлемо?
из порта кемпстона #001f может читаться что угодно если джойстика нет.
опрашивать и выделять по and #1f
при старте лучше всего тестировать и включать/выключать по результату той которая AUTOconfig
и по возможности дать игроку возможность кемпстон попробовать включить.
я так делал
Oleg N. Cher
20.10.2015, 17:24
Много квотишь.
Я соглашаюсь, что ретро-платформы слишком различны по своим особенностям. Игра должна быть очень специфичной чтобы быть развёрнутой на всех этих платформах.
В чём смысл объединять их? Просто обидно: всё это - компьютеры, у них есть много общего, а методы разработки - различны. Конца не видно "новизне" методов разработки. И я задаюсь вопросом - что их объединяет? Пусть это будет язык. У меня требования к мультитаргетности намного жёстче, чем у других. И потом - никто не мешает сделать:
IF Platform = "Android" THEN Супер_Наворот_чиста_для_Анд роида END;В Monkey-X так можно. Без препроцессора, это не Си (неактивные ветки сишных #ifdef'ов не проверяются на корректность).
Alex Rider
20.10.2015, 21:45
И потом - никто не мешает сделать:
IF Platform = "Android" THEN Супер_Наворот_чиста_для_Анд роида END;
В Monkey-X так можно. Без препроцессора, это не Си (неактивные ветки сишных #ifdef'ов не проверяются на корректность).
А мне такой подход совсем не нравится. Потому что условная компиляция отключает не попадающий под дефайны код и оголяет ошибки его неверного использования. А тут забыл один IF, и у тебя Спектрум лезет дудеть в PCшный спикер или на БКшный диск лезут андроидные либы.
Хотя, все меняется, если IF const1 = const2 проверяется на этапе компиляции, а внутрь такого IF'а можно убрать линковку модуля. Но тогда, правда, оно мало отличается от условной компиляции в C.
Andrew771
20.10.2015, 23:29
Поясню и тебе, и Rider'у. Когда я плотно сидел на Си и захотелось что-то пописать на ЯВУ для Спектрума - я мечтал про язык, на котором смогу писать и для ZX, и для Java ME - тогда эта платформа была в тренде, ещё был Palm OS, WinCE и Symbian. Я понимал, что освоить всё это физически не смогу, впрочем, и не пришлось - их время быстро ушло. Сейчас вместо Palm OS - Android и iOS, их я тоже освоить вряд ли смогу, но хотя бы попытаюсь. Но я понял, что профит от разработки для мобильных платформ сегодня - сродни игре в рулетку. Мой протест - это нежелание для каждой новой платформы учить новый язык и осваивать новые методы разработки. Мне был нужен совсем простой инструмент, и я его получил, притом своими скромными силами. Но в основе лежало желание переписать Дурака от CopperFeet на такой язык, который потом можно будет развернуть везде или почти где угодно. Самый первый кандидат - это был конечно Си, но я в нём разочаровался, поработав плотно несколько лет. Потом поглядел в сторону Модулы-2, это хороший кандидат, гораздо лучше Си, но мало качественных компиляторов.
Зачем же код ради кода. И поиграть можно будет, кто любит подобные игры. Но внутренняя цель проекта - без претензий, ибо я не игродел, постараться сделать максимально точный порт на Обероне, точность нужна чтобы не списывать корявости и несоответствия на инструмент разработки. Есть такой род деятельности, от которого получаешь силу, энергию. Вот, оно для меня и есть. Как относятся к этому другие - мне почти не важно.
Кстати, так просто и не пересобрать. Придётся переписывать низкий уровень для каждой новой платформы, а это чёртова работа, требующая квалификации и, как минимум, отличного знания этих платформ. Вот сейчас застрял на длительности звука, и что? Ругать Оберон и ZXDev набежали все кому не лень, а помочь понять чего там не так с моей процедурой задержки - молчок. Ну да ладно.
Это нереальная задача для одного человека - переписать низкий уровень для нескольких платформ. И Оберон - не самый удачный выбор, его мало кто знает. Си, Паскаль, Бейсик, Ява были бы удачнее, их знают многие.
Олег, стань лучше продвинутым спектрумистом, чем никаким мультиплатформистом :)
Andrew771, так ему же и не надо знать все.
набор примитивов ему напишет любой спец.
пусть пишет.
Oleg N. Cher
21.10.2015, 22:13
Хотя, все меняется, если IF const1 = const2 проверяется на этапе компиляции, а внутрь такого IF'а можно убрать линковку модуля. Но тогда, правда, оно мало отличается от условной компиляции в C.Верно, отличается только тем, что проверяется синтаксис в неактивных ветках, меньше шансов накуролесить.
Это нереальная задача для одного человека - переписать низкий уровень для нескольких платформ.
Олег, стань лучше продвинутым спектрумистом, чем никаким мультиплатформистом :)Респект - ты понимаешь всю сложность задумки. Но я не могу стать продвинутее, чем я есть. Просто делаю то, что мне интересно. Талант проявляется даже с никаким средством разработки, Славе Медноногову достаточно было Laser Basic'а, чтобы получился шедевр. Если бы ему тогда дали ZXDev - он бы развернулся куда как круче. Но ZXDev тогда не было.
И Оберон - не самый удачный выбор, его мало кто знает. Си, Паскаль, Бейсик, Ява были бы удачнее, их знают многие.Видишь ли, фишка в том, что Оберон - усовершенствованный Паскаль, ни больше ни меньше. Всё остальное - барьеры в мозгах и от лукавого. Кто знает Паскаль - тот знает Оберон. Такие люди как ты просто любят то, что они делают и привержены своим тёплым ламповым чувствам. Я такой же, просто для меня Паскаль - это ещё и Оберон.
Я хочу сделать то, чего на Спеке ещё не было, - игру настолько мультитаргетную, что её можно будет запустить почти везде. А ты мне предлагаешь стать продвинутым асмером и клепать тонны машкода, который (возможно) потешит кучку гиков и потом отправится на свалку? Ну спасибо. ;) Но, допустим, я принял твоё предложение. И что мне теперь делать (поскольку таланта гейммейкера нет)? Системки? UZIX пилить? Неинтересно, брат.
Ты находишь то, что я делаю, бесполезным, а я нахожу бесполезным то, что делаешь ты, так устроена жизнь.
Andrew771, так ему же и не надо знать все.
набор примитивов ему напишет любой спец.Хочется верить, что спецам захочется заморочиться. Но давайте устроим опрос, почему бы нет.
Вопрос №4: Здесь есть спецы-знатоки различных платформ, которые хотят помочь в портировании игры Dash хотя бы в роли консультанта по тонкостям платформы? Отзовитесь. Напишите, какими платформами владеете. Разумеется, я прошу вашей помощи только в случае полной готовности версии игры для ZX - чтобы вы не думали, что ваш труд будет невостребован.
DOS, Java ME осилю сам. Интересуют MSX, C64, NES, что там ещё? М.б. ColecoVision? Возможно, Android? А есть энтузиасты, знающие на низком уровне JVM?
Oleg N. Cher
28.10.2015, 04:53
набор примитивов ему напишет любой спец.Да ты оказался оптимистом, jerri! ;) Кстати, меня уже просили версию для ZX-Evo, которая ну просто не появится без вашего участия.
Это нереальная задача для одного человека - переписать низкий уровень для нескольких платформ. И Оберон - не самый удачный выбор, его мало кто знает. Си, Паскаль, Бейсик, Ява были бы удачнее, их знают многие.
Олег, стань лучше продвинутым спектрумистом, чем никаким мультиплатформистом :)Андрей, твой призыв сродни призыву стать более талантливым. Я ж не против, просто каждый следует своей природе.
Эх, никак вы не поймёте мой интерес. Тут интересно произвести игру без опоры на платформу, вплоть до разрядности. Но поскольку это невозможно — минимизируем связь с платформой. И выделим эту связь в минималистичные интерфейсы. Повод попрактиковаться в унификации. Я бы назвал такую работу соединением несоединимого. Поскольку игра платформенно-нейтральная (таков эксперимент), приходим к выводу, что на что-то опираться всё равно нужно. И это язык. И он должен быть таким, чтобы давать нам языковую платформу, но иметь минимум ограничений.
Почему не Java. Видишь ли, Андрей. Java — это язык-платформа. Он без JVM и толстого набора рантаймов не имеет смысла. Это и достоинство (с одной стороны), и недостаток. Щас вот станут говорить про трансляцию в натив. Да, согласен. Но такие методы эмулируют Java-прослойку в полном объёме и применяются в основном только для ускорения работы приложений (ну ещё и для защиты).
Так что, выбирая Java, мы упираемся носом в JVM и лишаемся натива, ZX и DOS. Предвижу окрики типа это всё старьё и никому не нужно. Дык. Мы взяли старьё только для эксперимента, который не так уж и бесполезен, поскольку показывает экстра-мультитаргетный подход в действии.
Почему не Си. Лишаемся возможности транслировать в Java, выпадает одна платформа. К тому же Си коряв и я не хочу полагаться на такой язык. Да, и не будем забывать, что от Си я остаюсь в пределах нажатия одной кнопки — ведь сишный код в XDev автоматически делает Ofront.
Почему не Паскаль. Потому что ZX-like Pascal не дотягивает по качеству кода до SDCC. ;) И ещё потому что Оберон как язык лучше Паскаля. Можно ностальгировать по Паскалю, но ты бы переписал код логики Dash с Оберона на Паскаль за 10 минут, если бы захотел.
Поэтому выбранный мною подход — это и Си, и Java, и Паскаль вместе. И для заявленных платформ выбор Оберона более чем оправдан. А почему именно эти платформы? Да можно было бы взять совсем другие, просто с этими я лучше знаком.
Screw, присмотрись к тому, что я делаю. Не поленись запустить Java-версию и посмотреть. В ней ещё нельзя бегать, но лабиринт уже живёт своей жизнью. И почему же нету горы игр, написанных на XDev? Просто потому, что достоинства этой среды, похоже, нужны только мне, остальные обходятся более узким взглядом на доступность своего геймдева для других, возможно, очень ограниченных (ретро) платформ. Я ведь заявил об этой технологии уже давно (zx-pk.ru/showthread.php?p=555963#post555963), но никто не заинтересовался. А если бы заинтересовались, и более талантливые, чем я, то у нас уже была бы если не гора, то хоть кучка игр.
Если всё-таки хочется цинично пошпынять XDev и мою скорость разработки, то учти следующие моменты:
Компилятора Оберона для Z80 нет.
Компилятора Оберона для Java ME, который выдаёт готовые мидлеты (как MIDletPascal) нет.
Компилятор Оберона для DOS есть, но лучше бы его не было. Корявый, старый и закрытый. Я его не использую.
Ofront пришлось допиливать, чтобы разработка стала возможной для Z80.
Пришлось ловить и репортить баги в SDCC. Это внезапно замедляет работу и вызывает негодование.
В начале разработки я почти ничего не знал про Java ME. Спасибо Raydac'у, помог.
Я ни разу не игродел. Но игры делать хочется. Просто придерживаюсь принципа, что подражание может научить. Поэтому просто копирую игры. В этом всё моё действие. Я неспособен произвести хорошую игру. Да, кстати, я не умею рисовать. А приходится. В ZX-версии человечек ещё не анимирован, не успел.
Мне почти никто не помогает.
Хорошую игру таковой в основном делает геймплей, графика и музыка. Я в этом не очень силён.
Данный проект можно рассматривать как эталонный для разработки на этом подходе более сложных и красивых игр.
Впрочем, результаты хоть и скромные, но есть. Жду последователей. ;)
jerri, просто поверь на слово, что самый большой тормоз – это изучение особенностей платформ и фактически создание движка для подобного класса игр, соединяющего DOS, Java ME и ZX, чего доселе в природе не было.
P.S. Поскольку jerri горячо просил здесь не обсуждать другие платформы, подумываю перевести топик на более подходящий форум, о чём сообщу дополнительно. Но я почти уверен, что за ним никто не последует, это ведь не Оберон критиковать. ;)
Да ты оказался оптимистом, jerri! ;) Кстати, меня уже просили версию для ZX-Evo, которая ну просто не появится без вашего участия.
я реалист, а ты настроил против себя почти всех присутствующих кодеров.
какие функции тебе нужны?
Я ведь заявил об этой технологии уже давно (zx-pk.ru/showthread.php?p=555963#post555963), но никто не заинтересовался. А если бы заинтересовались, и более талантливые, чем я, то у нас уже была бы если не гора, то хоть кучка игр.
нет.
большинство тех кто пишет игры под спек использует возможности спека по максимуму.
Представь себе кастлеванию написанную на Обероне.
Или Батискаф. или Аббатство.
как бы они выглядели?
А ты видел Ремейк Диззи который делает Барс?
Впрочем, результаты хоть и скромные, но есть. Жду последователей. ;)
P.S. Поскольку jerri горячо просил здесь не обсуждать другие платформы, подумываю перевести топик на более подходящий форум, о чём сообщу дополнительно. Но я почти уверен, что за ним никто не последует, это ведь не Оберон критиковать. ;)
Оберон никто не критикует
Чаще всего критикуют твои способы популяризации этого наречия.
Andrew771
28.10.2015, 16:55
Потому что ZX-like Pascal не дотягивает по качеству кода до SDCC.
А ты пробовал сравнивать на реальных примерах? Я пробовал SDCC, как увидел регистр IY, поплохело.
Ты дай коротких примерчиков на Обероне для тестинга. Просто интересно сравнить качество кодогенерации.
Можно ностальгировать по Паскалю, но ты бы переписал код логики Dash с Оберона на Паскаль за 10 минут, если бы захотел.
Можно попробовать переписать мне его для ZX Like Pascal :)
Oleg N. Cher
28.10.2015, 19:50
какие функции тебе нужны?Для JavaME нужно много. Для ZX-Evo нужны реализации интерфейсов (см. Mod/*.Def в проекте). Для Спека я уж как-нибудь сам справлюсь.
большинство тех кто пишет игры под спек использует возможности спека по максимуму.Это я понимаю. Но не всем же поступать именно так. В последнее время, наоборот, есть интерес к разработке на Boriel's ZX-Basic (потеря производительности). Мне нравится игра Shiru, писанная на SDCC, действительно очень хорошая игра - Magic Tokens. Но таковой её делает не скорость оптимального кода, а музыка и графика.
Представь себе кастлеванию написанную на Обероне.
Или Батискаф. или Аббатство.
как бы они выглядели?Для Спека - никак. А для Windows/Linux/Android или того же JavaME - вполне достойно. Ты пойми, привороту к ZX кучке стареющих дядек можно сочувствовать, но их всё меньше, меньше... Я и сам такой дядька. Но плодить код на асме Z80 с каждым годом всё меньше смысла. А платформ как было много, так и будет много. Нужно средство, чтобы их объединить и унифицировать.
А ты видел Ремейк Диззи который делает Барс?Нет.
Оберон никто не критикует
Чаще всего критикуют твои способы популяризации этого наречия.Это не мои способы. Чтобы оставить интеллектуальное наследие - нужно бороться с существующим засильем идей, потому что у кодеров глаза, что называется, замылены. Но им не нравится, когда на это указываешь. Кроме того, кодеры балованные и не ценят минимализм. И не ценят кроссплатформенность, как я её понимаю.
Хорошо, скажи мне какие есть ещё средства разработки, чтобы таргетили одновременно ZX, DOS и JavaME? Это нечестный вопрос, потому что таких средств разработки просто нет. Но это принципиальный риторический вопрос. И пусть не я пожну плоды своего труда, важно вообще хоть кому-то начать.
А ты пробовал сравнивать на реальных примерах? Я пробовал SDCC, как увидел регистр IY, поплохело.А не пробовал поиграться опциями компиляции? --opt-code-size, --opt-code-speed, --reserve-regs-iy, --oldralloc и другими?
Ты дай коротких примерчиков на Обероне для тестинга. Просто интересно сравнить качество кодогенерации.Примерчики есть в поставке, я не знаю, что ты имеешь в виду. Или давай напиши их на ZX-like Pascal, а я перепишу на Оберон.
Можно попробовать переписать мне его для ZX Like Pascal :)Дык перепиши. Причём в основном добавлением begin'ов. Я не шучу. Ну может ещё пару функций стандартных изменишь.
Для JavaME нужно много. Для ZX-Evo нужны реализации интерфейсов (см. Mod/*.Def в проекте). Для Спека я уж как-нибудь сам справлюсь.
а разве это не должно быть чтото стандартное?
Это я понимаю. Но не всем же поступать именно так. В последнее время, наоборот, есть интерес к разработке на Boriel's ZX-Basic (потеря производительности). Мне нравится игра Shiru, писанная на SDCC, действительно очень хорошая игра - Magic Tokens. Но таковой её делает не скорость оптимального кода, а музыка и графика.
она сбалансированная и не более.
Для Спека - никак. А для Windows/Linux/Android или того же JavaME - вполне достойно. Ты пойми, привороту к ZX кучке стареющих дядек можно сочувствовать, но их всё меньше, меньше... Я и сам такой дядька. Но плодить код на асме Z80 с каждым годом всё меньше смысла. А платформ как было много, так и будет много. Нужно средство, чтобы их объединить и унифицировать.
т.е одно и тоже на разных платформах будет выглядеть по разному?
а смысл?
Это не мои способы. Чтобы оставить интеллектуальное наследие - нужно бороться с существующим засильем идей, потому что у кодеров глаза, что называется, замылены. Но им не нравится, когда на это указываешь. Кроме того, кодеры балованные и не ценят минимализм. И не ценят кроссплатформенность, как я её понимаю.
Шикарно, бро :)
Я всегда думал что демократия — это власть народа, но вот товарищ Рузвельт мне доходчиво объяснил, что демократия — это власть американского народа
Хорошо, скажи мне какие есть ещё средства разработки, чтобы таргетили одновременно ZX, DOS и JavaME? Это нечестный вопрос, потому что таких средств разработки просто нет. Но это принципиальный риторический вопрос. И пусть не я пожну плоды своего труда, важно вообще хоть кому-то начать.
Ну тут еще веселее
В одну телегу впрячь не можно / Коня и трепетную лань
Oleg N. Cher
28.10.2015, 22:39
а разве это не должно быть чтото стандартное?Угу. Нужен стандартный звук, стандартная музыка, стандартная работа с графикой и вывод тайлов стандартного разрешения. ;)
т.е одно и тоже на разных платформах будет выглядеть по разному?
а смысл?Можно одинаково, но можно и по-разному. Это как разработчик решит. На Спеке для лабиринта 16x16 трудно добиться цветности, но как бы нет смысла делать игру для Jme специально не цветной. Но ты затронул важный вопрос. Нужно чтобы игра, оставаясь платформенно-нейтральной, всё-таки учитывала платформенные особенности. Мне этого удалось добиться. В Спектрум-версии будет выбор управления с джойстиками. На Jme это не имеет смысла, поэтому там его и не будет. Что можно предложить ещё в этом случае?
Шикарно, бро :)А я может хочу, чтобы ты имел возможность кодить для Java ME и Android не изучая языка Java и тонны док по апи. Как скажешь, стоит оно того? А то завтра придумают платформу и всех сгонят на местный язык и местное апи, и будут все плеваться в который раз, пока не попривыкнут. Надоело, бро, всё время одно и то же.
В одну телегу впрячь не можно / Коня и трепетную ланьЭто ты так оправдываешь то, что достиг всего и стал мега-мастером, но это может оценить только кучка стареющих дядек? ;) :v2_dizzy_facepalm:
Назрел новый вопрос. Подскажите, по какому максимальному адресу может находиться таблица векторов для IM 2?
Подскажите, по какому максимальному адресу может находиться таблица векторов для IM 2?
#FE00
хотя можно обойтись без таблицы, выставив #FF
#FFFF #18F3 JR #FFF4
Угу. Нужен стандартный звук, стандартная музыка, стандартная работа с графикой и вывод тайлов стандартного разрешения. ;)
ок, я понял - нет ТЗ нет процедур
Можно одинаково, но можно и по-разному. Это как разработчик решит. На Спеке для лабиринта 16x16 трудно добиться цветности, но как бы нет смысла делать игру для Jme специально не цветной. Но ты затронул важный вопрос. Нужно чтобы игра, оставаясь платформенно-нейтральной, всё-таки учитывала платформенные особенности. Мне этого удалось добиться. В Спектрум-версии будет выбор управления с джойстиками. На Jme это не имеет смысла, поэтому там его и не будет. Что можно предложить ещё в этом случае?
и приходим в итоге к тому от чего уходим. или 4 версии основной программы
или километровый набор условий для сборки.
Это ты так оправдываешь то, что достиг всего и стал мега-мастером, но это может оценить только кучка стареющих дядек? ;) :v2_dizzy_facepalm:
так, ты опять меня не понимаешь.
с64 работает с аппаратными спрайтами 24х21, играет палитрой и умеет строить фон из тайлов.
Спектрум работает с экраном напрямую, аппаратных возможностей не имеет никаких
ZXEvo с прошивкой TSLab умеет каждую точку своим цветом
4 разрешения экрана, до 85 аппаратных спрайтов 64х64
Java ME это вообще не пойми чо имеющее вообще рандомный разброс параметров при этом на голову превосходит предыдущие позиции.
потому и конь и трепетная лань.
Назрел новый вопрос. Подскажите, по какому максимальному адресу может находиться таблица векторов для IM 2?
#fe00-#ff01
#ff00-#ffff со значением #f3 не рекомендую.
Oleg N. Cher
02.11.2015, 04:28
#FE00
хотя можно обойтись без таблицы, выставив #FF
#FFFF #18F3 JR #FFF4А насколько это будет правильно исходя из обилия клонов с тонкими различиями в работе? Или по этому вопросу не выработано единого кодерского мнения?
Просто иногда читаешь авторитетную статью, где утверждается, что это так-то, а оказывается что есть тонкости, и каждый использует свой собственный вариант, который считает верным (примерно как было с опросом Kempston joystick'а).
ок, я понял - нет ТЗ нет процедурjerri, тут мы подходим к тому, что нужно эти вопросы оперативно обговорить, и, соответственно, я набиваюсь к тебе в аську, хотя не уверен, что тебе это понравится. Чувствуешь деликатность момента? ;)
и приходим в итоге к тому от чего уходим. или 4 версии основной программы
или километровый набор условий для сборки.Собственно, да. Но тут язык программирования не виноват - просто такая уж специфика поставленной задачи. Но я не утверждаю, что все игры должны быть так устроены. Просто хорошо, что Оберон удаётся использовать таким способом - программить любую железку, где есть процессор. И не нужно для этого минимум 1 Гб ОЗУ, установленный .NET такой-то версии или чего-то в таком роде.
Java ME это вообще не пойми чо имеющее вообще рандомный разброс параметров при этом на голову превосходит предыдущие позиции.О, ты прав. Она приносит много головняка. Вот хотя бы взять разные разрешения экрана. Оказывается, их не единицы, а десятки. И если исходить из архитектуры Dash'а (чтобы без прокрутки) и из сознательного выбора использовать только MIDP 1 получается, что нужно рисовать несколько наборов тайлов разного разрешения. Я думаю, справлюсь с этим, но не знаю насколько быстро.
И со звуками траблы, да... midi что ли использовать...
потому и конь и трепетная лань.Ну да, я же называл ранее это совмещением несовместимого. Но боже упаси связывать Оберон с написанием именно таких игр и именно для ретро, он, кстати, вообще для таких применений не затачивался.
#fe00-#ff01
#ff00-#ffff со значением #f3 не рекомендую.Отчего же, можно узнать?
Сейчас я прикинул, что игра будет лагать при большом количестве монстров на уровне (хотя БК-шный вариант ведёт себя так же), поэтому хочется сделать чтобы звук не использовал слишком много тактов. Нормально если для 48k-игры звук будет только на AY?
Alex Rider
02.11.2015, 05:36
А насколько это будет правильно исходя из обилия клонов с тонкими различиями в работе? Или по этому вопросу не выработано единого кодерского мнения?
Проблем с клонами не будет. Я бы сделал так:
setup_im2:
ld hl,#fe00
ld a,h
ld de,#fe01
ld bc,#100
ld (hl),#ff
ldir
di
ld i,a
im 2
ld a,#18 ; jr *
ld (#ffff),a
ld a,#c3 ; jp **
ld (#fff4),a
ld hl,ISR
ld (#fff5),hl
ei
ret
Процедура сформирует следующее:
1. Таблицу векторов прерываний из 257 байт с #fe00 по #ff00 включительно. В тиаблице будут байты #ff. Получается, что сама процедура будет по ардесу #ffff
2. Команду перехода jr #fff4 по адресу #ffff (смещение перехода возьмется из адреса #0000 в ПЗУ, а там #f3 - код команды di).
3. Команду перехода jp ISR по адресу #fff4 - переход на, собственно, процедуру обработки - плеер, например.
4. Ну и, собственно, включит im 2.
Кстати, байты #ff01 - #fff3 и #fff7 - #fffe можно невозбранно использовать по своему усмотрению.
---------- Post added at 05:36 ---------- Previous post was at 05:27 ----------
Отчего же, можно узнать?
Я вижу только один большой минус: основной код и данные должны заканчиваться до #f3f3, а обработчик прерывания или прыжок на него гарантированно находиться по адресу #f3f3. Это минус 3 Кб в ОЗУ. Ну либо "обтекать" кодом #f3f3 и дальше. Геморно на ЯВУ, ИМХО.
Если в игре планируется использование режима прерывания, то лучше всего таблицу вектора прерывания разместить с пределах адресов #8000-#BFFF, таблица должна быть полной, а не двухбайтной. В противном случае, совместимость с разными фирменными машинами и советскими клонами будет потеряна. Опрос клавиш нужно проводить в начале прерывания и вызывать из обработчика прерываний.
Oleg N. Cher
02.11.2015, 08:15
Эх, всё уже сделано за нас. И пока я тут прилежно изучаю Java ME... Мдя.
http://yogadestiny.ru/android/bolder.apk
Чувствую себя динозавром. Кардинально сменился не только парк языков программирования, но и менталитет игроков, само предпочтение игр. Мне современные игры совсем не по душе, а от сильно динамичного 3D голова кружится.
И всё меньше простоты. А так хотелось бы... Но одно понимаю чётко - в идеальном софте привязок к платформам быть не должно. Это должен быть грамотно структурированный набор принятых решений, на основе которого динамически генерится софт. Это, правда, только мечта. Но я не согласен учить ещё сто языков из-за того что каждый из них чем-то лучше прочих.
А вы тем временем убеждайтесь насколько сильно действуют привязки из детства. И не спрашивайте зачем я делаю этот порт Dash, ладно? :(
Alex Rider
02.11.2015, 08:30
Если в игре планируется использование режима прерывания, то лучше всего таблицу вектора прерывания разместить с пределах адресов #8000-#BFFF
В 48К все равно где ниже #8000. Только это, Олег, есть намек: на старте игры сделать POKE (#5b5c),#10: out (#7ffd),#10, а то не известно какую страницу 128К мог оставить впечатанной после себя коммандер, используемый для запуска игр.
Oleg N. Cher
03.11.2015, 00:12
Хорошо, я как-то этот момент упустил. А что если вообще переходить в режим 48k с открытым портом? Когда-то Wlodek Black давал для этого такой код:
DI
LD SP,(23613) ; взять изначальный адрес ERR_SP
POP HL
LD HL,4867 ; заменить адрес входа в интерпретатор
Бейсика при ошибке на 48-й
PUSH HL
LD HL,7030 ; заменить адрес возврата из USR на 48-й
PUSH HL
RES 4,(IY+1) ; сбросить флаг 128-Бейсика
LD DE,5566 ; взять 2 адреса каналов клавиатуры и экрана
для 48-Бейсика...
LD HL,(23631) ; CHANS
LD BC,15
ADD HL,BC
EX DE,HL
LD C,4
LDIR ; ...и водрузить их на законное место
EI
RET ; не бояться Ret после манипуляций со стеком! Всё правильно!
Кстати, размещать таблицу в медленной памяти (contended memory) нежелательно, вы же именно поэтому советуете адрес не ниже #8000?
Alex Rider
03.11.2015, 09:28
Кстати, размещать таблицу в медленной памяти (contended memory) нежелательно, вы же именно поэтому советуете адрес не ниже #8000?
Да, вектор в области #4000 - #7fff будет давать на фирменных машинах снег. А вектор с адресов #c000 - #ffff не будет только если он находится в 0-й странице. Но адреса #8000 - #bfff для ЯВУ неудобны, лучше использовать для таблицы область в конце ОЗУ. Поэтому на мой взгляд идеальный вариант - #fe00 - #ff00 в 0-й странице.
Когда-то Wlodek Black давал для этого такой код:
Этот код, во-первых, порушит стек и вернется в BASIC, во-вторых, нужен для нормального продолжения работы BASIC-программы и ZX-Printer'а. Если возврата в BASIC и печати нет, то и не нужен этот код совсем. Единственное, ZXDev, насколько я помню, активно зовет ПЗУ и может словить BASIC-овскую ошибку типа Out of screen или Invalid color. Если они у тебя обрабатываются корректно (то есть, если ты хочет возврат в BASIC при возникновении, а не зависон со спецэффектами), то надо бы поправить адрес обработчика ошибок на 48-й. Если надо, соображу код, который можно звать из SDCC. А можно сделать и свой обработчик таких ошибок, его адрес должен лежать в двух байтах, адрес которых лежит в (23613).
Oleg N. Cher
03.11.2015, 13:10
Поправочка: ZXDev не зовёт ПЗУ если того не хочет программист. Смотря какие библиотеки юзать - Basic активно пользуется ПЗУ, это логично.
Да, у меня были проблемы с тем кодом выше, поэтому остановился на таком варианте:
void Basic_Init_IM0 (void) {
__asm
RES 4,1(IY) /* RESET OF 128K FLAG */
__endasm;
} //Basic_Init_IM0И вроде бы никаких проблем с обработкой 48k-ошибок не было. Но Dash этот флаг не сбрасывает, наверное нужно поправить.
Alex Rider
03.11.2015, 13:16
а, у меня были проблемы с тем кодом выше, поэтому остановился на таком варианте:
Он тоже не нужен :) Если ты не возвращаешься из программы в интерпретатор, то программа как бы так и остается в 48К с открытыми страницами навсегда. Ибо код функции USR отрабатывает в ПЗУ 48.
Oleg N. Cher
04.11.2015, 00:19
Возвращаюсь в Basic :) Не знаю даже зачем, в ZX-играх часто выход - это кнопка reset. Хотя если углубиться, то надо делать возможность выхода в TR-DOS.
Alex Rider
07.11.2015, 10:00
Возвращаюсь в Basic Не знаю даже зачем,
Ну, собсна, если отказаться от выхода, то никакого специального кода для перехода в "48 с открытым портом" не надо. Просто не шли ничего в #7ffd и будет тебе щастье. А можешь и слать, лишь бы не включал 5-й бит, не писал в буфер принтера и на выходе была бы впечатана 0-я страница.
Собсна, изначальная твой проблема (про то, что мог оставить коммандер после себя) решается так: ld a,#10: out (#7ffd),a, больше ничего и не надо. Кстати, я загнался по поводу стека и обработки ошибок. SDCC же на старте программы выставляет стек сам? А как выглядит код завернешния программы, что там со стеком происходит? Что будет, если функциями модуля Basic сделать PRINT AT 255,255 или INK 255?
Oleg N. Cher
07.11.2015, 13:45
Алекс, SDCC использует код инициализации в crt0, который в ZXDev выглядит так:
.module crt0
.globl _main
jp _mainБиблиотека Basic имеет процедуры Init и Quit, причём по варианту для каждого режима прерываний - DI, IM1 и IM2. Исходники живут в ZXDev/Lib/C/Basic.c, но продублирую:
void Basic_Init_DI (void)
{
__asm
DI
// LD IY,#0x5C3A
RES 4,1(IY) /* RESET OF 128K FLAG */
__endasm;
} //Basic_Init_DI
/*--------------------------------- Cut here ---------------------------------*/
void Basic_Init_IM1 (void)
{
__asm
RES 4,1(IY) /* RESET OF 128K FLAG */
__endasm;
} //Basic_Init_IM1
/*--------------------------------- Cut here ---------------------------------*/
void Basic_Init_IM2 (void) __naked {
__asm
RES 4,1(IY) /* RESET OF 128K FLAG */
; ************************************************
; * Set IM2 mode (need for correct work with IY) *
; ************************************************
LD HL,#IM2PROC$
IMON$:
LD A,#24 ; код команды JR
LD (#65535),A
LD A,#195 ; код команды JP
LD (#65524),A
LD (#65525),HL ; в HL - адрес обработчика прерываний
LD HL,#0xFE00 ; построение таблицы для векторов прерываний
LD DE,#0xFE01
LD BC,#256 ; размер таблицы минус 1
LD (HL),#0xFF ; адрес перехода #FFFF (65535)
LD A,H ; запоминаем старший байт адреса таблицы
LDIR ; заполняем таблицу
DI ; запрещаем прерывания на время
; установки второго режима
LD I,A ; задаем в регистре I старший байт адреса
; таблицы для векторов прерываний
IM 2 ; назначаем второй режим прерываний
EI ; разрешаем прерывания
RET
IM2PROC$:
PUSH AF
PUSH BC
PUSH DE
PUSH HL
PUSH IX
PUSH IY
__endasm;
}
void Basic__IM2ADR (void) {
__asm
CALL IM2RET$
POP IY
POP IX
POP HL
POP DE
POP BC
POP AF
EI
IM2RET$:
__endasm;
} //Basic_Init_IM2
/*--------------------------------- Cut here ---------------------------------*/
void Basic_Quit_DI (void)
{
__asm
LD HL,#0x2758
EXX
LD IY,#0x5C3A
EI
__endasm;
} //Basic_Quit_DI
/*--------------------------------- Cut here ---------------------------------*/
void Basic_Quit_IM1 (void)
{
__asm
LD HL,#0x2758
EXX
LD IY,#0x5C3A
__endasm;
} //Basic_Quit_IM1
/*--------------------------------- Cut here ---------------------------------*/
void Basic_Quit_IM2 (void)
{
__asm
DI
LD HL,#0x2758
EXX
LD IY,#0x5C3A
LD A,#0x3F
LD I,A
IM 1
EI
__endasm;
} //Basic_Quit_IM2Модуль Basic мог бы инициализироваться автоматически, но я тогда сделал так, и уже потом не стал менять, оправдываясь тем, что некоторым процедурам не нужна инициализация.
Советуешь в Basic.Init добавить команды ld a,#10: out (#7ffd),a ?
Что будет, если функциями модуля Basic сделать PRINT AT 255,255 или INK 255?Корректность аргумента INK я не проверяю (для скорости). А ПЗУ'шный вариант AT работает через RST 16:
Странный синтаксис записи чисел...
Oleg N. Cher
07.11.2015, 15:45
# во встроенном ассемблере SDCC - обязательный признак литерала. Это не я придумал. :(
Alex Rider
07.11.2015, 16:27
Все там почти хорошо. Я бы вот только не стал бы сбрасывать флаг 128-го BASIC'а, при обработке ошибок можно словить ахтунг. Кстати сказать, он при запуске скорее всего сброшен - USR работает в ПЗУ 48. Вместо этого лучше действительно принудительно впечатывать 0-ю страницу как минимум перед установкой IM 2 (а лучше всегда, она гарантированно быстрая). Перед впечтаыванием должно быть SP < #c000, это, я полагаю, делает BASIC-загрузчик командой CLEAR.
Oleg N. Cher
08.11.2015, 08:06
Скорее всего, флаг 128-го BASIC'а сбрасывается здесь чтобы спокойно использовать память буфера принтера.
А почему нельзя оставить активную страницу? Просто я подумал: а вдруг машкод программы юзера перекроет границу #C000? Значит впечатывать 0-ю страницу нужно до загрузки машкода в память, т.е. не иначе как из лоадера, а не из уже загруженного и запущенного кода.
Случай видится требующим особого подхода. Т.е. если пишется программа для >=128k, нужно разработать специальную библиотеку для работы со страницами, вторым экраном и т.д.
Alex Rider
08.11.2015, 11:39
Скорее всего, флаг 128-го BASIC'а сбрасывается здесь чтобы спокойно использовать память буфера принтера.
В общем, поковырялся я в коде ПЗУ по поводу этого флага. Давай все же сначала поймем какую цель ты преследуешь. Из программы на Обероне можно выйти обычным способом, по ret на стеке с продолжением исполнения программы на BASIC'е? Если да, то принудительный переход в BASIC - это не дело. Если выход только по Halt(N), то можно перейти в 48K, только переход надо сделать тем кодом, который прислал тебе Wlodek. Кстати, а буфер принтера так критичен?
А почему нельзя оставить активную страницу?
По большому счету, можно. Мы пришли к этому из-за того, что вектор прерывания лежит в #fe00...#feff, поэтому с #с000 должна быть впечатана быстрая страница. Во всем зоопарке фирменный машин быстрые страницы - только 0 и 2, а коммандер может оставить после себя впечатанной любую, в том числе и медленную страницу, то есть, есть небольшой риск получить на фирменной машине снег.
Итого: Принудительно впечатывать страницу 0 есть смысл только при использовании IM 2.
Значит впечатывать 0-ю страницу нужно до загрузки машкода в память, т.е. не иначе как из лоадера, а не из уже загруженного и запущенного кода.
Да, это я облажался. Впечатывать страницу надо в загрузчике после CLEAR и перед загрузкой машкода (POKE 23388,16: OUT (32765),16).
Oleg N. Cher
08.11.2015, 16:51
Давай все же сначала поймем какую цель ты преследуешь. Из программы на Обероне можно выйти обычным способом, по ret на стеке с продолжением исполнения программы на BASIC'е?Да, можно.
Если выход только по Halt(N), то можно перейти в 48K, только переход надо сделать тем кодом, который прислал тебе Wlodek. Кстати, а буфер принтера так критичен?Тут играет роль мой специфический подход к кодированию для Спектрума, который, видимо, сформировался так потому что у меня не было 128k и я не ставил цели поддержать верхнюю память, но активно пользовался буфером принтера - для хранения переменных или как временный буфер, например, для скроллинга. Поэтому закономерно желание использовать буфер для этих целей вместо нахождения там непонятных для меня переменных 128k-BASIC'а. Я специально пишу про свой субъективный взгляд на эти вещи, чтобы вы видели перспективу. Дизайн библиотеки Basic нужно менять под 128k.
Итого: Принудительно впечатывать страницу 0 есть смысл только при использовании IM 2.Да, притом из лоадера. Либо же использовать для этого специальную библиотеку, которую, быть может, кто-то разработает, если она ему понадобится.
в загрузчике после CLEAR и перед загрузкой машкода (POKE 23388,16: OUT (32765),16).Я начал разрабатывать утилиту makezx (на Обероне) - аналог bin2tap, порождающую Basic-лоадер, надо бы предусмотреть в ней такое впечатывание.
Alex Rider
09.11.2015, 00:02
Тут играет роль мой специфический подход к кодированию для Спектрума, который, видимо, сформировался так потому что у меня не было 128k и я не ставил цели поддержать верхнюю память, но активно пользовался буфером принтера - для хранения переменных или как временный буфер, например, для скроллинга. Поэтому закономерно желание использовать буфер для этих целей вместо нахождения там непонятных для меня переменных 128k-BASIC'а. Я специально пишу про свой субъективный взгляд на эти вещи, чтобы вы видели перспективу. Дизайн библиотеки Basic нужно менять под 128k.
Ну как бы в целом общая рекомендация: коли ZXDev - инструмент разработки и набор библиотек, то использовать буфер принтера и отключать 128К явно не стоит. Потенциально может появиться продукт на 128-м BASIC'е, который захочет использовать код на Обероне или C или просто библиотеки ZXDev как подпрограммы - он обидится, если машкод принудительно включит 48К. Не надо делать втихаря неожиданнх для разработчика вещей.
- - - Добавлено - - -
Либо же использовать для этого специальную библиотеку, которую, быть может, кто-то разработает, если она ему понадобится.
Не получится. На Спектруме нельзя гарантированно узнать какая страница впечатана на момент вызова кода.
- - - Добавлено - - -
Дизайн библиотеки Basic нужно менять под 128k.
А лучше сразу под менеджер памяти с кастомными драйверами. Например, будет неплохо смотреться расширение - возможность печати симвла (строки) с указанием номера (адреса) шрифта и логического номера страницы, в которой шрифт лежит. Или запуск AY-проигрывателя с кодом и музыкой в произвольной странице. Или хотя бы просто загрузка некой более-менее самостоятельной библиотеки (как вариант - быстрая математика из Beta Basic) в страницу и вызов кода из нее.
Oleg N. Cher
09.11.2015, 05:40
Ну как бы в целом общая рекомендация: коли ZXDev - инструмент разработки и набор библиотек, то использовать буфер принтера и отключать 128К явно не стоит. Потенциально может появиться продукт на 128-м BASIC'е, который захочет использовать код на Обероне или C или просто библиотеки ZXDev как подпрограммы - он обидится, если машкод принудительно включит 48К. Не надо делать втихаря неожиданнх для разработчика вещей.Буфер принтера текущими библиотеками не используется, соответственно, системные переменные 128k-Basic'а тоже не трогаются. Хорошо, я понял - уберу из Basic.Init сброс флага 128k Basic'а. Я правильно понял предложение?
Мы всё-таки рассчитываем, что ZX-разработчик владеет асмом, поэтому заглядывает в код вызываемых процедур и имеет о них представление, ведь всего на свете не предусмотришь. И это же касается режима IM2 и процедуры Init_IM2 - мало ли каким кодом формируется таблица.
А лучше сразу под менеджер памяти с кастомными драйверами. Например, будет неплохо смотреться расширение - возможность печати симвла (строки) с указанием номера (адреса) шрифта и логического номера страницы, в которой шрифт лежит. Или запуск AY-проигрывателя с кодом и музыкой в произвольной странице. Или хотя бы просто загрузка некой более-менее самостоятельной библиотеки (как вариант - быстрая математика из Beta Basic) в страницу и вызов кода из нее.Всё это очень хорошо. Я надеялся, что со временем в ZXDev появятся библиотеки, которые мне лично не нужны, но кому-то понадобятся - и он напишет. Поэтому рассматриваем ZXDev как каркас, который можно уточнять и оптимизировать.
А мне самому больше интересно как могут быть устроены именно кроссплатформенные библиотеки, интерфейсы которых ничего не знают про страницы памяти клонов Спектрума.
Alex Rider
09.11.2015, 13:21
Хорошо, я понял - уберу из Basic.Init сброс флага 128k Basic'а. Я правильно понял предложение?
Да
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot