Я вижу его влияние на сгенерированный код; это небольшая, но она есть. Есть много вещей, которые имеют небольшое влияние, но когда вы добавляете их все, вы в конечном итоге с чем-то намного лучше.
Скрытый текст
I see its impact in the generated code; it is small but it is there. There are a lot of things that have a small impact but when you add them all up, you end up with something a lot better.
[свернуть]
- - - Добавлено - - -
Yes you can. We build binaries for windows and mac osx. Linux users have to build it themselves.
You can grab the latest by downloading a nightly build ( http://nightly.z88dk.org/ ). These packages are complete and are built every night and will contain the latest changes and built binaries. Click on the "z88dk-win32-latest.zip" link right at the top and unzip/install as described here: https://www.z88dk.org/wiki/doku.php?...:front#windows
If you have set up github, we don't put the binaries in z88dk/bin but you can copy the binaries from z88dk/bin in the download above and paste them into your github/z88dk/bin directory. Set the environment variables as described in the install instructions link above and you should be ok to compile.
After setting up the environment variable ZCCCFG and the path to point at z88dk/bin, you can compile out of a command prompt.
Some hints:
Translate to assembler for zx:
zcc +zx -vn -a -clib=sdcc_iy -SO3 --max-allocs-per-node200000 --opt-code-size test.c
--opt-code-size is optional
Change -vn to -v if you want to see what the compiler is doing
Add --c-code-in-asm if you want to see C statements interspersed with the output asm
Don't forget --fsigned-char if you want chars to be signed by default
Add -lm if using floats (use float_t or double_t instead of float or double to get rid of warnings)
Equivalent with sdcc:
sdcc -mz80 -S --max-allocs-per-node200000 --opt-code-size test.c
Add --reserves-regs-iy to be exactly equivalent to the z88dk compile but this may worsen sdcc's output.
Add -lm if using floats.
Don't forget --fsigned-char if you want chars to be signed by default
An asm translation will only show the C code translated. Library code is rooted here: https://github.com/z88dk/z88dk/tree/...c/_DEVELOPMENT and there is an EXAMPLES directory there with some programs to try (compile lines at top of .c)
Последний раз редактировалось Alcoholics Anonymous; 19.01.2017 в 21:33.
Alcoholics Anonymous, What about "banked" memory for "ZX 128 computers" ? I know, its very difficult
for example
http://www.softools.com/zilogwinide.htm
Скрытый текст
Ты слыхал как грузится Flyshark ?! нет, совсем не тот, что на дискете...а Flyshark, тот самый блин Flyshark...тот ,что был когда то на кассете...
zx spectrum 48 issuse 6a, Ленинград-1, zx spectum 128 +2 grey,Пентагон-128, ZXM-Phoenix 5.02 ( assembly)
Yes we are heading in that direction. z80asm, z88dk's assembler / linker, is actively developed.
Right now, with a little work, you can manually generate bankswitched programs. Not as easy as doing it automatically as you still have to manually decide what goes where but the z88dk tools will help you to solve many of the difficulties. You can place code and data in specific memory banks easily (the c compilers can only place code and rodata but we will fix that; the current workaround is to define variables with correct section assignment from a separate asm file). You can get the tools to output a list of defines for all public functions and data and use that as a reference when doing cross banking calls. The tools support command-line ordered linking; in other words you can change the address of common functions depending on what part of the project is being compiled. So, for example, if you put printf in one bank then -g when printf is compiled will give its address. Then you can create a trampoline in the common area that changes banks, calls that printf, restores banks and returns. For all banks not containing printf, you would compile against another set of defines that would do something like "defc printf = 0x8000 ; printf trampoline" so that calls to printf from other banks go through the trampoline code and there you have a cross bank call.
But for most cases, 128 programming is much simpler -- you have extra data in the extra banks or you have code in the extra banks that does not call across banks. And this can be done now very easily. Pietro bros is an example that puts the AY code and sound effects into a separate 128 bank.
Скрытый текст
Да, мы движемся в этом направлении. z80asm, z88dk в ассемблер / линкер, активно развивается.
Прямо сейчас, с небольшим количеством работы, вы можете вручную сгенерировать bankswitched программы. Не так просто, как это делать автоматически, как вам все равно придется вручную решить, что идет туда, куда но и z88dk инструменты помогут вам решить многие трудности. Вы можете разместить код и данные в отдельных банках памяти легко (с-компиляторы могут только размещать код и rodata, но мы исправим это, текущий обходной путь заключается в определении переменных с правильным назначением раздела из отдельного файла ASM). Вы можете получить инструменты для вывода списка определяет для всех государственных функций и данных, а также использовать его в качестве эталона при выполнении перекрестных банковских вызовов. Инструменты поддержки командной строки заказал связь; другими словами, вы можете изменить адрес общих функций в зависимости от того, какая часть проекта составляется. Так, например, если вы положили Printf в одном банке, то -g при компиляции Printf даст свой адрес. После этого вы можете создать трамплин в общей зоне, которая изменяет банки, вызовы, которые Printf, восстанавливает банки и возвращается. Для всех банков, не содержащих Printf, ты скомпилировал бы против другого набора устанавливает, что бы сделать что-то вроде "defc Printf = 0x8000; Printf батут", так что вызовы PRINTF от других банков пройти через код батут и там у вас есть вызов перекрестного банка ,
Но в большинстве случаев, 128 программирование намного проще - у вас есть дополнительные данные в дополнительных банках или у вас есть код в дополнительных банках, которые не звонят по банкам. И это может быть сделано сейчас очень легко. Пьетро Bros является примером, который помещает код AY и звуковые эффекты в отдельный 128 банка.
[свернуть]
Ты слыхал как грузится Flyshark ?! нет, совсем не тот, что на дискете...а Flyshark, тот самый блин Flyshark...тот ,что был когда то на кассете...
zx spectrum 48 issuse 6a, Ленинград-1, zx spectum 128 +2 grey,Пентагон-128, ZXM-Phoenix 5.02 ( assembly)
No I haven't. I have only read about it online and in the paper you linked.
The automatic linking of bankswitched programs is something we would like to do but it will take some more development and thought. Soft Tool only had to deal with one memory model - the z180's - which it then applied to the z80. We have a more complicated case in that there are machines with varying memory map, some with holes in the middle of ram, and varying banking schemes. We also have to keep an eye on recent C standard propositions -- there is an embedded technical report that specifies how banked variables and functions can be accessed from C. So a solution has to be more general and the pieces for that will come together after we've got a smooth way to do the banking manually. Once the manual banking is down we will have to work on the linker to optimally assigned code and data to require the least amount of memory and least amount of bankswitching given a target's specified memory map.
---
Нет у меня нет. Я только читал об этом в Интернете и в статье вы связаны между собой.
Автоматическое связывание bankswitched программ является то, что мы хотели бы сделать, но это займет еще некоторое развитие и мысль. Soft Tool только приходилось иметь дело с одной модели памяти, - установка Z180 - который он затем применяется к z80. У нас есть более сложный случай в том, что есть машины с различной картой памяти, некоторые с отверстиями в середине барана, и различные банковские схемы. Мы также должны следить за последних стандартных С предложениями - есть встроенный технический отчет, который определяет, как накренился переменные и функции могут быть доступны из C. Таким образом, решение должно быть более общим и куски для, которые придут вместе после того, как у нас есть плавный способ сделать банковские операции вручную. После того, как руководство банковского вниз мы будем работать над линкера оптимально присвоен код и данные требуют наименьшего количества памяти и наименьшее количество bankswitching учитывая указанную карту памяти, который цели.
Alcoholics Anonymous, its fоr eхample, 30 days free, its zilog party, are you never used ZDS?
Ты слыхал как грузится Flyshark ?! нет, совсем не тот, что на дискете...а Flyshark, тот самый блин Flyshark...тот ,что был когда то на кассете...
zx spectrum 48 issuse 6a, Ленинград-1, zx spectum 128 +2 grey,Пентагон-128, ZXM-Phoenix 5.02 ( assembly)
For my 30 days I am waiting until I have a large set of benchmarks to run. I'd like to spend that time taking a look at code quality.
I do have ZDS 3.68 but I have never been able to compile anything. The package they offer for download is missing dlls (z180.dll for me) and the support has no idea what I am talking about. I think it is too old for Zilog to care anymore Have you managed to get ZDS 3.68 to work at all?
Для моих 30 дней я жду, пока я не большой набор тестов для запуска. Я хотел бы провести это время взглянуть на качество кода.
У меня есть АРС 3,68, но я никогда не был в состоянии собрать что-нибудь. Пакет, который они предлагают для скачивания отсутствует DLLs (z180.dll для меня) и поддержка понятия не имеет, о чем я говорю. Я думаю, что слишком стар для Zilog, чтобы заботиться больше Вы сумели получить АРС 3,68 работать
Продолжаем. Мне удалось собрать минимальную подсистему ZXDev3, которая работает с Hi-Tech C v3.09 вместо SDCC. С неизменным рантаймом в виде cret, ncsv и indir смирился (его не вырезает даже оптимизатор). Правда, я слегка переписал CSV.AS, убрал оттуда обязательное сохранение регистра IY для каждой процедуры (пусть сама решает, сохранять ли его). И собрал в библиотеку LIBC2.LIB
Странное дело, но похоже, что каждая функция в момент входа в неё держит на стеке сохранённое значение IX (а в случае немодифицированного CSV.AS и IY тоже) с самого верху. То есть, чтобы добраться до параметров, обычное:
у меня не срабатывает. Нужен какой-то хитрый способ описания ассемблерных функций? Или мириться с тем, что возвращаться надо не по RET, а по JP cret? Плюс иметь затруднённый доступ к аргументам? Как же быть?Код:POP HL POP BC PUSH BC PUSH HL
HelloHTC3.zip
Код функции печати строки PRSTR у меня сейчас такой:
Код:void Basic_PRSTR_C_ROM_fastcall (unsigned char *str) { # asm LD IY, 5C3AH POP IX ; Без этого слетает. А в случае стандартного LIBC.LIB нужен и POP IY POP HL POP BC PUSH BC PUSH HL PRSTRstd$: LD A, (BC) OR A RET Z RST 16 INC BC JR PRSTRstd$ # endasm }
Какой будет аналог этого кода в Hi-Tech C v3.09 ? Просьба не писать наобум, а давать только рабочий код.
Вот так не работает:Код:#define Basic_Init() __asm di __endasm
( напоминаю, что в хайтек Си решётку можно ставить только в первой колонке строки )Код:# define Basic_Init() /**/ \ #asm \ DI \ #endasm
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)