PDA

Просмотр полной версии : Печать двухбайтового числа без знака и со знаком в машкоде



Oleg N. Cher
02.01.2017, 06:45
Господа, знаю, что тема замусоленная и многократно поднималась много где, в т.ч. и в прессе. Это "по мотивам" процедуры Сержа Колотова, претендует на высокую эффективность. Но, видя чудеса кодинга, вполне верю в конструктивную критику. :-) Критикуем, господа. Вывод делается средствами ПЗУ.


/*--------------------------------- Cut here ---------------------------------*/
void Basic_PRCHAR_ROM (unsigned char ch) __z88dk_fastcall {
__asm
LD IY,#0x5C3A
LD A,L
EX AF,AF
LD A,#2
CALL 0x1601
EX AF,AF
RST 0x10
__endasm;
} //Basic_PRCHAR_ROM

/*--------------------------------- Cut here ---------------------------------*/
void Basic_PRWORD_ROM (unsigned int n) __naked __z88dk_fastcall {
__asm
LD IY,#0x5C3A
/* Из журнала Deja Vu #04, Кемерово, 01.04.98
(c) Колотов Сеpгей, г.Шадpинск, SerzhSoft
Доработано для печати только значащих цифр */
;----------------------------------------;
;Печать десятичного числа в HL (0..65535)
;----------------------------------------;
PUSH HL ;закинули печатаемое число на стек
LD A,#2 ;открываем канал 2
CALL #0x1601 ;(печать в области основного экрана)
LD HL,#DECTB_W$ ;адрес таблицы степеней десятки
LD BC,#0x505 ;макс. возможное количество цифр: 5
;установим также рег. C - кол-во незначащих нулей + 1
LP_PDW1$: XOR A ;обнулили счётчик и флаг C для SBC
LD E,(HL) ;взяли текущую степень
INC HL ; десятки из таблицы
LD D,(HL) ; и поместили в DE
INC HL ;перешли к след. элементу таблицы
EX (SP),HL ;адрес эл-та <-> печатаемое число
LP_PDW2$: INC A ;увеличиваем счётчик
SBC HL,DE ;вычитаем текущую степень десятки
JR NC,LP_PDW2$ ;повторяем пока HL>=0
ADD HL,DE ;HL=HL mod DE; A=HL div DE
DEC C ;проверяем: может это незначащий нуль?
JR Z,LP_PRNT$ ; если уже были другие цифры, печатаем
DEC A ;если это нуль, то он незначащий
JR Z,LP_NOPR$ ; ничего не печатаем
INC A ;это не нуль, увеличим на 1 для печати
LP_PRNT$: ADD A,#"0"-1 ;перевод A в ASCII-код ("0".."9")
RST 0x10 ;печать десятичной цифры
LD C,#1 ;уже была печать, дальше все значащие
LP_NOPR$: EX (SP),HL ;HL=адрес эл-та, число -> на стек
DJNZ LP_PDW1$ ;цикл по цифрам
POP HL ;убрали оставшийся ноль со стека
RET ;выход из процедуры
;----------------------------------------;
DECTB_W$: .DW 10000,1000,100,10,1 ;Таблица степеней десятки;
;----------------------------------------;
__endasm;
} //Basic_PRWORD_ROM

/*--------------------------------- Cut here ---------------------------------*/
void Basic_PRINT_ROM (int n) __naked __z88dk_fastcall {
__asm
BIT 7,H
JP Z,_Basic_PRWORD_ROM
EX DE,HL
XOR A
LD L,A
LD H,A
SBC HL,DE
PUSH HL
LD L,#0x2D
CALL _Basic_PRCHAR_ROM
JP _Basic_PRWORD_ROM+10
__endasm;
} //Basic_PRINT_ROM
P.S. Зависимость Basic_PRINT_ROM от Basic_PRCHAR_ROM не критикуем, прямой вставкой не заменяем. Так задумано ;-)

Oleg N. Cher
04.01.2017, 00:50
Переписал с применением подпрограммы ПЗУ PRINT-FP. Скорость будет ниже, зато код компактнее. Всё равно печать с помощью RST 16 сама по себе довольно медленная.


/*--------------------------------- Cut here ---------------------------------*/
void Basic_PRCHAR_ROM (unsigned char ch) __z88dk_fastcall {
__asm
LD A,L
LD IY,#0x5C3A
EX AF,AF
LD A,#2
CALL 0x1601
EX AF,AF
RST 16
__endasm;
} //Basic_PRCHAR_ROM

/*--------------------------------- Cut here ---------------------------------*/
void Basic_PRWORD_ROM (unsigned int n) __naked __z88dk_fastcall {
__asm
LD C,L
LD B,H
CALL 0x2D2B // BC-TO-FP
LD A,#2
CALL 0x1601
JP 0x2DE3 // PRINT-FP
__endasm;
} //Basic_PRWORD_ROM

/*--------------------------------- Cut here ---------------------------------*/
void Basic_PRINT_ROM (int n) __naked __z88dk_fastcall {
__asm
BIT 7,H
JP Z,_Basic_PRWORD_ROM

; HL := -HL
EX DE,HL ; 4
XOR A ; 4
LD L,A ; 4
LD H,A ; 4
SBC HL,DE ; 15 => 31t

PUSH HL
LD A,#0x2D
CALL _Basic_PRCHAR_ROM+1
POP BC
JP _Basic_PRWORD_ROM+2
__endasm;
} //Basic_PRINT_ROMПриветствуются любые замечания по сокращению кода.

P.S. Можно ускорить смену знака на один такт. Вместо:

; HL := -HL
EX DE,HL ; 4
XOR A ; 4
LD L,A ; 4
LD H,A ; 4
SBC HL,DE ; 15 => 31tиспользовать:

LD A,L ; 4
CPL ; 4
LD L,A ; 4
LD A,H ; 4
CPL ; 4
LD H,A ; 4
INC HL ; 6 => 30tНо это не даст никакого ощутимого выигрыша, всё равно PRINT-FP использует медленный калькулятор. Но менее компактно (7 байт против 6).

Alex Rider
04.01.2017, 01:46
LD A,#2
CALL 0x1601

А зачем при печати каждого символа звать CHAN-OPEN? Там же хренотуча кода, который выполняется не шустро ни разу. Я бы в либах вообще отказался от работы с другими каналами, кроме S (экран). Для этого надо:
1. Открывать канал S при нинциализации приложения;
2. Переписать CLS (штатная беузмно тормозная) чтобы канал не сбрасывался в K;
3. Переписать AT чтобы можно было указывать 23 и 24 строки.
4. Убрать CHAN-OPEN из печати символа. Если в либах поддерживается вызов INPUT (нужен пример реализации?), то открывать S после этого INPUT.

Самописные CLS и AT получатся весьма компактными, а выгода по скорости будет весьма неплохая.

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

UPD: Если не поддерживать пользовательские каналы, то вместо RST 16 можно звать 09F4 - сэкономится куча тактов и не попортится DE'

Oleg N. Cher
04.01.2017, 03:06
CHAN-OPEN звать при печати каждого символа чтобы не пихать код открытия канала в общий инициализатор библиотеки. Отдельный инициализатор печати, нужный только для печати кодом из ПЗУ, видится лишним нагромождением, особенно когда печать из ПЗУ вообще не юзается. И не такая уж CHAN-OPEN и тормозная.

Печать кодом из ПЗУ - это только одна из опций. Если бы ты знал архитектуру библиотеки Basic, то знал бы, что там есть ещё один способ печати - включается убиранием #define ROM_OUTPUT в файле конфигурации BasicCfg.h, который может присутствовать в собственном проекте или же отсутствовать (в этом случае используется стандартная конфигурация по умолчанию - ZXDev/Lib/BasicCfg.h).

Опция ROM_OUTPUT поддерживается ТОЛЬКО для тех случаев, когда нужна компактность, а скорости хватает. Если её закомментировать, то подключаются самописные быстрые AT, CLS и вывод работает во всём экране, включая нижние строки.

Библиотека Console предоставляет ещё один дополнительный способ печати из трёх:


/* Use ROM output (RST 10H, slow, 32x22) or COMPACT/FAST (fast, 32x24) */

//#define Console_OUTPUT_COMPACT
//#define Console_OUTPUT_FAST
#define Console_OUTPUT_ROM

#09F4 - печатает всегда в канал 2 ?

Alex Rider
04.01.2017, 11:04
И не такая уж CHAN-OPEN и тормозная.
CHAN-OPEN: 524 такта для канала 2
RST 16: 1961 такт.
CHAN-OPEN жрет 1/5 общего времени вызова.

Отдельный инициализатор печати, нужный только для печати кодом из ПЗУ, видится лишним нагромождением, особенно когда печать из ПЗУ вообще не юзается.
Не очень я это понимаю. Потратить 524 такта в инициализации - лишнее нагроможение, а при печати каждого символа - норм.


#09F4 - печатает всегда в канал 2 ?
Нет, она является процедурой вывода для каналов K, S, P. Экономия по сравнению с RST 16 в том, оно не шарится по таблицам каналов чтобы сделать в конце концов переход на 09F4.
Если использовать 09F4, то открывать S можно вызовом 1642 (аргументы ей не нужны, будет работать чуть шустрее):
1642: 207 тактов, не надо инициализировать A, использует только A, H, L - символ для печати можно сохранить в регистре просто.
09F4: 1857 тактов



void Basic_PRCHAR_ROM (unsigned char ch) __z88dk_fastcall {
__asm
LD E,L
LD IY,#0x5C3A
CALL 0x1642
LD A,E
CALL 0x09F4
__endasm;
} //Basic_PRCHAR_ROM


Но лучше все же CALL 0x1642 с его 207 тактами убрать в инициализатор и в CLS.

PS INPUT у вас реализован? Надо пример?

Oleg N. Cher
04.01.2017, 12:30
Не очень я это понимаю. Потратить 524 такта в инициализации - лишнее нагроможение, а при печати каждого символа - норм.Ну можно конечно сделать в Basic.Init отдельную секцию, открывающую канал 2 при включенной опции ROM_OUTPUT. Сделаю.

Кстати, а как можно реализовать CLS? Есть варианты, превосходящие LDIR по скорости? (10 кб кода на очистку экрана во фрейм не рассматриваем, код нужен по возможности компактный).


PS INPUT у вас реализован? Надо пример?Пример не помешает.

У нас есть Console.ReadInt и ReadIntRange(min, max) для всего экрана (а не для канала 0), но он простенький.

SaNchez
04.01.2017, 13:24
Кстати, а как можно реализовать CLS? Есть варианты, превосходящие LDIR по скорости? (10 кб кода на очистку экрана во фрейм не рассматриваем, код нужен по возможности компактный).

Вариант средний по скорости и длине:


ld hl,#4000
ld de,#4001
ld bc,#1800
ld (hl),0
loop1 dup 32
ldi
edup
jp pe,loop1
ld bc,#300
ld (hl),7; байт атрибута
loop2 dup 32
ldi
edup
jp pe,loop2
ret

blackmirror
04.01.2017, 15:01
LP_PDW2$: INC A ;увеличиваем счётчик SBC HL,DE ;вычитаем текущую степень десятки JR NC,LP_PDW2$ ;повторяем пока HL>=0 ADD HL,DE ;HL=HL mod DE; A=HL div DE
Если оптимизировать это по скорости, то нужно поменять SBC на ADD и знак у чисел в таблице, кроме этого JR стоит заменить на JP. Или вообще взять и развернуть цикл:

ADD HL,DE
JR NC,DIV_2
INC A
ADD HL,DE
JR NC,DIV_2
INC A
ADD HL,DE
JR NC,DIV_2
INC A
ADD HL,DE
JR NC,DIV_2
INC A
ADD HL,DE
DIV_2:
ADD HL,HL
ADD A,A
SBC HL,DE
JR C,DIV_1
INC A
SBC HL,DE
DIV_1:
Только для такого развёрнутого цикла таблица констант требуется другая: -20000, -4000, -800, -160, -32, хотя конечно последний элемент таблицы не нужен, поскольку последняя цифра в том или ином виде в HL уже есть.

tiboh
04.01.2017, 19:07
Кстати, а как можно реализовать CLS? Есть варианты, превосходящие LDIR по скорости? (10 кб кода на очистку экрана во фрейм не рассматриваем, код нужен по возможности компактный).


Компактно и быстро:

LD D,7;цвет атрибутов
LD B,6
LD HL,0
ADD HL,SP
LD SP,#5b00
cls LD E,D
PUSH DE;повторить 64 раза
DJNZ $-64
LD A,D
OR A
LD D,B
LD B,48
JR NZ,cls
LD SP,HL
RET

SaNchez
04.01.2017, 19:26
Ну это до тех пор, пока вдруг стек не укажет на ROM ;)

Alex Rider
07.01.2017, 17:11
Пример не помешает.
В первых версиях Sprite Graber'а имя файла (8 символов) с помощью ROM-editor'а запрашивалось вот так (в буфер по адресу Variables.input_buffer):



@chan_open equ #1601
@set_min equ #16b0
@editor equ #0f2c

@flagx equ #5c71
@k_cur equ #5c5b
@err_sp equ #5c2d
@worksp equ #5c61


input_line:
ld hl,flagx
set 7,(hl)
set 5,(hl)
call set_min

ld bc,#0001
rst #30
ld (hl),#0d
ld (k_cur),hl
ld hl,input_line_exit
push hl
ld (err_sp),sp
call editor
pop hl
ld hl,(worksp)
ld de,Variables.input_buffer
ld b,#08
input_line_copy:
ld a,(hl)
cp #0d
jr z,input_line_exit
ld (de),a
inc hl
inc de
djnz input_line_copy
input_line_exit:
ld a,2
call chan_open
jp set_min


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

UPD: процедура нещадно портит err_sp, надо сохранять и восстанавилвать, иначе после любого rst #08 в ПЗУ случится вылет в параллельную вселенную.

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

UPD2: Если случится переполнение буфера или всякое STOP in INPUT, буфер по адресу Variables.input_buffer не изменится. Все подобные спецэффекты можно обрабатывать в процедуре, адрес которой запоминается на стеке перед занесением sp в err_sp. set_min при любом исходе категорически рекомендуется во избежание зажора навсегда памяти в workspace Basic'а. chan_open - по вкусу

SaNchez
07.01.2017, 18:31
Немного оффтопа.. А так ли нужна печать средствами ПЗУ? Вот например, меня, как человека кодящего в асме, это отталкивает от изначального использованию ЯВУ на спектруме. Может имеет смысл сделать faq для ассемблерщиков, например начиная с какого адреса стартует прога и как выглядит типовой hellow world в коде. imno, это бы привлекло бы какое-то количество кодеров в ряды ЯВУ-шников. (при всём при этом я без лишних вопросов пишу на PC на delphi и с#, абсолютно не замарачиваясь такими вопросами)

Alex Rider
07.01.2017, 19:45
А так ли нужна печать средствами ПЗУ?
Я тоже задавался этим вопросом. Олег ответил (http://zx-pk.ru/threads/27260-pechat-dvukhbajtovogo-chisla-bez-znaka-i-so-znakom-v-mashkode.html?p=896272&viewfull=1#post896272). Если в двух словах - это как опция для нешустрых приложений, которым важна компактность библиотек.

Oleg N. Cher
08.01.2017, 04:04
SaNchez, библиотека Basic появилась в результате работы над портом игры Дурак от Copper Feet, чтобы была возможность легко работать "как на Бейсике". Но кроме неё есть модуль Console, реализующий быстрый ввод-вывод в цветной консоли. Пока в нём только нужные мне возможности, впрок не кодирую, нет смысла. Была надежда, что подтянется пипл, но пока что не видел ни одной библиотечки, сделанной или адаптированной для ZXDev кем-то, кроме меня. Со здешнего форума попытки разрабатывать на ZXDev делали Reobne и AzAtom. Destr видел среду в действии, я ему показывал. Даже что-то вроде хотел делать на ней. Eltaron и Sergey помогли советами. За что всем им спасибо.


Может имеет смысл сделать faq для ассемблерщиков, например начиная с какого адреса стартует прога и как выглядит типовой hellow world в коде. imno, это бы привлекло бы какое-то количество кодеров в ряды ЯВУ-шников.Гм. Я немного не понял. Если это вопросы по ZXDev и Оберону, то отвечу.

Прога стартует с любого адреса, какой задашь. Хоть из ПЗУ. Адреса кода и данных произвольные.

Типовой хелловорлд:

MODULE Hello; IMPORT Console;
BEGIN (*$MAIN*)
Console.WriteStr("Hello World");
END Hello.

Ассемблерщиков к разработке на ЯВУ так просто не привлечёшь. Они везде видят недостатки данного подхода. Неэффективно. Плохой код. На двадцать тактов и десять байт больше, чем можно на асме. Всё.

jerri
08.01.2017, 19:13
Ассемблерщиков к разработке на ЯВУ так просто не привлечёшь. Они везде видят недостатки данного подхода. Неэффективно. Плохой код. На двадцать тактов и десять байт больше, чем можно на асме. Всё.

да да и еще не фреймово и вообще тормозно.

Alex Rider
08.01.2017, 22:29
да да и еще не фреймово и вообще тормозно.
Ну вот я вроде понимаю зачем изобрели ЯВУ, но проектов, для которых оно надо на Спектруме, для себя не могу придумать. Если сильно постараться, получаются логические игры и системный софт, не особо требовательный к памяти (например, редактор звуков для AY). Можно сделать менюшку к игре если засунуть ее вместе с либами в 128-ю страницу. А, вообще, было бы где развернуться на машинках с турбой и большим объемом памяти типа ZX Evo - написанные на C с SDK игры явно намекают.

Oleg N. Cher
09.01.2017, 06:27
Можно ещё для привлечения новых людей в разработку, которым трудно сразу врулить в асм. Если будет много библиотек, закодированных на асме старшими товарищами, то "салагам" ;-) будет сильно проще дёргать их из ЯВУ, который в этом случае служит как "клей" между прикладным кодом и низкоуровневым. При этом не нужно думать о регистрах, где какой портится, о стеке и многом другом. А скорости и памяти будет значительно побольше, чем на всяких Мега- и Лазер-Бейсиках и Хайсофт Паскале.

Кстати, граф. движки типа Nirvana (и даже мой Laser2) можно вполне юзать из ЯВУ, получится очень круто. Логические игры тоже интересно пописать, да. Эстетика какая-то ловится. Меня лично при кодинге на асме тупо ломает, а на Обероне - отдыхаю. ;-)

jerri
09.01.2017, 21:19
Oleg N. Cher, мне казалось что все что можно был обсудить уже обсудили тогда.
народ пишет для спека на ЯВУ это факт. то что написано на Нирване.
Да и АГД я думаю тоже конструктор для написания игр.

НО. правда ли можно поставить знак равенства между
например REX (http://www.worldofspectrum.org/infoseekid.cgi?id=0004129&loadpics=3) и Harbinger (https://www.worldofspectrum.org/forums/discussion/53470/new-game-harbinger-convergence-128k)
хотя вторая явно сделана с претензией.

Oleg N. Cher
10.01.2017, 04:04
Ага. И ещё Чуррера.

Мир Спекки неисчерпаем, как и темы на этом форуме, иногда всплывают давно уже перетёртые, и опять с упоением обсуждаются ;-)

Кстати, бывает, появляется новичок, который прям жаждет начать разработку для ZX, ему сразу начинают рассказывать как правильно передавать параметры из Бейсика в машкод. Вместо того, чтобы дать старт в средство простое (я про ZXDev), но качественно превосходящее гибридный Бейсико-машкодовый подход по памяти и по скорости на порядки. Любой "ветеран" сочтёт, что его путь самый путёвый, знач им и надоть всем иттить. ;-)

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

Сравните. Вызов движка WHAM! для воспроизведения мелодии. Традиционный "ветеранский" способ:


10 POKE 49135,155: POKE 49126,0: RANDOMIZE USR 49100
Оберон (ZXDev):

Music.Play(Music.TitleMelody, Music.Largo);Чувствуете разницу? Мы даже асм сюда приплетать не будем) Именно этому и надо учить новичков-кодеров для ZX. Которых, к сожалению, всё меньше.

jerri
10.01.2017, 10:49
Oleg N. Cher, ты так прям упрямо режешь поперек что я даже удивляюсь
есть замечательный продукт для новичков - Boriel ZX Basic (http://www.boriel.com/en/software/the-zx-basic-compiler/)
хорошо документированный и удобный для новичка
даже есть несколько туториалов вот например по созданию пакмана (https://docs.google.com/document/pub?id=1vUneCCC18oXLglzoRcJdrMDUSh7vaO_tGDjzjOc8Ih U)

Oleg N. Cher
10.01.2017, 12:04
Я не против, действуйте. Я просто иду своим путём, лучшим из. Как всегда ;-)

jerri
10.01.2017, 12:26
Oleg N. Cher, результат где?

Oleg N. Cher
10.01.2017, 12:39
Спроси об этом у всех, кто не стал юзерами ZXDev. Я не могу сделать всю работу, я делаю только то, что мне интересно.

ZXDev стал для меня хорошим инструментом, во многом превосходящим Бориель басик, я могу на нём делать очень интересные вещи. Но я кодер, понимаешь? Не демо- и не игро-мейкер. Тебе это сложно понять наверно. Раз не понял до сих пор.

Так что результат по ссылке у меня в подписи.

jerri
10.01.2017, 12:53
Oleg N. Cher, :) если твой инструмент не пользуется популярностью,
видимо он не то что нужно тем кто ищет инструмент

ну а если ты кодер и написал не то что нужно людям
то у тебя есть 2 пути.
Раз не понял до сих пор.

Oleg N. Cher
10.01.2017, 19:45
Видишь ли, Бориель, по сути представляя собой структурный язык типа Оберона, выплыл на своём сродстве с Бейсиком. Это сродство греет душу многим спектрумистам. Это и хорошо, и плохо. Плохо потому, что получился несовместимый ни с чем язык, который невозможно применить где-то ещё, кроме как на ZX. Ну ладно, быть может, можно ещё на других Z80-based машинках, но надо припилить его туда. Оберон же - это универсальный язык, его применяют на АЭС, в космосе, в промышленности. Сегодня, а не 20 лет назад. Ссылки я давал ранее. А то, что он может быть полезен и для Спека - это подчёркивает его достоинства. Тем и привлекает. Что можно не отрываться от любимого хобби. Мы на это по-разному смотрим, понимаешь? Ты любишь васик со встроенным асмом, а мне нравится неизменный исходник собирать сразу для нескольких очень разных платформ. Это разные интересы, тут единства искать нечего.

Насчёт путей - забыл у тебя спросить, чего да как мне делать. Я вообще эстет, люблю процесс. ZXDev можно развивать до безконечности.

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

И ещё. Совсем не так важно, нравится ли то, что я делаю, трём людям или трёхстам. Всё равно в общей массе человечества это капелька. И лучше блюсти свои интересы, а не, скривя морду, делать то, чего хочет jerri. А именно кривые демки (другие я делать просто не смогу). Но не лучше ли оставить это занятие другим, более достойным? Ты не согласен?

Но мне было бы приятно получить конструктивные предложения от людей, которые мою среду хотя бы видели и запускали. А есть, увы, только неконструктив от тебя - притом отвержение идёт на уровне концепта: "не Бейсик, бастард Паскаля и транслирует в Си, а ещё не асм и не ложится во фрейм". Вот.

Бориэль и ZXDev - очень близкородственные средства. Я могу легко взять из тамошних библиотек любую процедуру в коде и применить в ZXDev. А вот отношение к ним совсем разное. Ну да, ZXDev построен на Обероне, бастарде всеми здесь хаемого Паскаля. А Бориэль приятно греет душу воспоминаниями о первых своих кривых бейсиковских поделках) Я понимаю. И мне тоже есть что вспомнить на эту тему))) Что поделать. Допустим, сто человек любят бейсик со встроенным асмом. А одному нравится программировать с минимальной опорой на железяку. Мне нравятся языки программирования не узко заточенные под устаревшую железку, а которые имеют самостоятельную ценность. Нам нравятся разные вещи. Тебе, jerri, смотреть новые демки, мне - писать в своё удовольствие среду разработки на моём любимом языке. Тут нет никаких проблем, и не хнычь о результатах, если они не такие, как тебе нравится) Шеф мой вот тоже требует результатов, но он хотя бы платит деньги за них ;-) Ты же неявно аппелируешь к ценностям спектрумистов, и тоже с маниакальной упрямостью. Я понимаю твои интересы. Но не разделяю их. Мы это уже обсуждали, впрочем.

А вот некоторых тонких оптимизаций SDCC в Бориэле нет. Даже больше скажу - и не будет. Не всё в ZXDev идеально, даже не всё оптимально. Там дофига рутинной работы, которую я потихоньку делаю. ZXDev уже не тот, что даже два года назад. Оброс библиотеками, появились новые возможности и интересные языковые расширения, улучшилось качество кода (притом даже без усилий с моей стороны). Сейчас вот я произвожу рефакторинг библиотеки Basic, с этой целью открыл здесь на форуме несколько тем. Вношу тонкие оптимизации, переделываю под регистровые параметры. Добавляю к процедурам директиву, указывающую какие регистры портит процедура. Чтобы потом компилятор использовал эту инфу для дополнительных оптимизаций. Думаю, в Бориэле таких возможностей нет и не будет.

http://i.piccy_.info/i9/b01bae4b2760b551ca4aab89c6c90286/1484066478/24478/1065564/BasicRegs.png

jerri
11.01.2017, 09:21
Oleg N. Cher, вот тут один человек написал умную мысль


на самом деле, да. Как игровая платформа Спектрум мертв, давным давно уже, И скоро совсем исчезнет как наскальная живопись, в связи с вымиранием, тех кто в детстве этот пк собирал. В то время как на современную, комерческиуспешную платформу разработчики буду липнуть как мухи, и хоть мухобойкой махай и шмякай. Не разработчики, так издатели, а они уж любых разработчиков запиннают в любом случае . Поэтому игр, когда куча потребителе этих игр пасётся, всегда будет полно и предостаточно. А Спектрум, это память. И не хочется чтоб эта память, любопытствующим окружающим виделась помойкой, из примитивных новоделов. Пускай за пять лет выйдет только одна игра, но игра шедевр во всех отношениях. не удержался, я чего то, а хотел ведь больше не писать.

а ты все еще ждешь каких то новичков на спектрум.

я скажу почему в в бориеле нет тонкой оптимизации
она там не нужна.
уж слишком все просто.

а тебе надо свой девнабор ориентировать на чтото более другое, не такое древнее. например на планшеты и телефоны.

Oleg N. Cher
11.01.2017, 14:03
Один не потяну :-) Постепенно мож Оберон-сообщество что-то в этом смысле сделает, продвижки есть.