Называется "попросили проверить и запустить кого-то ещё, а я как дурак, полез помогать".
Без какого-либо хейта хотел показать, что можно улучшить, но меня обвиняют.
Так что лучше пойду.
Для Спека? Очень смешно, аффтар, жжош, пейшы естчо.
За помощь спасибо. Но Вы не понимаете многих идей, положенных в основу XDev, чтобы давать адекватные советы. Мне совет показался в духе "придерусь хоть к чему-то, впрочем, мне всё не так".
- - - Добавлено - - -
SDCC в комплекте ZXDev 32-битный, тестился на XP, всё должно работать. Почему не работает? Возможно, Вы пытаетесь работать с библиотекой, собранной SDCC другой версии. Или что-то в таком роде.
- - - Добавлено - - -
Попробуйте пересобрать библиотеки. В XDev: File -> Open -> ZXDev/Lib/Mod/Console , F12. И так для всех остальных. Папка Bin должна присутствовать (в ней утилита для разрезания Си-файлов на куски, чтобы исправить родовой дефект Си и хоть в какой-то степени получить смарт-линковку).
- - - Добавлено - - -
Это не нужно. Всё должно работать даже в W2k.
Отдельный инсталлер не предусмотрен из-за той мысли, что для программиста не должно стать проблемой распаковать пару архивов. Можно конечно сделать автоматическую установку переменной окружения, да и то как-то сомнительно.
- - - Добавлено - - -
P.S. Вообще-то я конечно гоню, ведь библиотека юзается из той же версии SDCC, которой и собрана. Но Вы конечно согласитесь, что это проблема SDCC, а не ZXDev?
Попробую восстановить систему Windows7 32 бит в другом разделе винчестера. Для чистоты эксперимента. В том разделе, с которым я работаю, наустановлено черт-те что. К тому же винчестер хотя и новый, но прежний рухнул напрочь, так что мне его умелец питерский за приличные деньги восстанавливал посекторно и кое-что восстановить не удалось. Пока это ни в чем себя не проявляло. Система стабильно работает, приложения вроде тоже все работают штатно.
Просто еще одного компа у меня нет из-за малогабаритной квартиры( есть проги, которые только на XP-ке идут и комп с этим большую часть времени стоит под письменным столом). А так попробовать надо с минимумом установленных приложений, может и исчезнет эта проклятая ошибка.
все так, возможно и setup от этого бы не спас. Будем разбираться. Но это не антивирус точно. Кстати Windows10 сегодня нещадно предупреждал меня об опасности установки и запуска и sdcc и Вашего софта. Если бы левый человек скачивал и ставил, то уже бы сто раз сдриснул.
Увы, антивириям не нравится софт, собранный Оберон-линкерами. Не знаю, что можно с этим поделать.
- - - Добавлено - - -
Можно попробовать любую другую версию SDCC, которая заработает. Просто скопировать эти файлы в Bin:
sdar.exe
sdasz80.exe
sdcc.exe
sdcpp.exe
sdldz80.exe
На самом деле подход ZXDev НЕ ЗАБИРАЕТ у вас прямую возможность писать куски кода на Си, но ДАЁТ возможность писать на более высокоуровневом и логичном языке, который не разменивается на частности, позволяя программисту посмотреть на свой труд под другим углом. Убирание, вернее, снижение акцентов на низкоуровневые фичи стимулирует программиста писать более переносимый код. Если это нужно конечно.
Пример: порт игры Дурак с ZX на БК-001x. Если бы игра была с самого начала писана на Си, её пришлось бы для портирования просто переписать заново. Вряд ли сильно много кода с ZX-версии прямо легло бы на БК. Я же самолично проверил и убедился, что пишу так, что минимум 50% кода на Обероне переносимы между этими платформами обычным копипастом. Я понимаю, что г-ну Косореву это не интересно, но это так.
С подходом XDev программист получает возможность писать на одном языке для кучи ретро- и не ретро-платформ. Да, эта переносимость условная и со многими оговорками. Но здесь дело в железе, языки не виноваты. Они не в силах сделать железо совместимым. Писать на Си? Можно конечно, но Си не запрещает юзать фишки, поэтому их юзают. И получают очень плохо переносимый код. Нет стимулов разделять на переносимый и не переносимый. Это не надо для ретро? Возможно. Но мои интересы не ограничиваются только ретро.
В файле h:\XDevLite\ZXDev\Bin\compile.bat гадит строка следующего вида
SET Include=%Include% -I%ZXDev%\Lib\C -I%ZXDev%\Lib\Obj
она цепляет все, что в системе объявлено в INCLUDE
Стоит ее превратить в
SET Include= -I%ZXDev%\Lib\C -I%ZXDev%\Lib\Obj
и компилируется все превосходно!
Правда не понял, почему в Windows10 у меня было не так. Возможно там просто SET Include пустая.Код:1 ;--------------------------------------------------------
2 ; File Created by SDCC : free open source ANSI-C Compiler
3 ; Version 4.2.0 #13081 (MINGW32)
4 ;--------------------------------------------------------
5 .module HelloWorld
6 .optsdcc -mz80
7
8 ;--------------------------------------------------------
9 ; Public variables in this module
10 ;--------------------------------------------------------
11 .globl _main
12 .globl _Basic_Quit_DI
13 .globl _Basic_PRSTR_C_ROM_fastcall
14 .globl _Basic_PLOT_callee
15 .globl _Basic_PAUSE_DI
16 .globl _Basic_PAPER
17 .globl _Basic_INK
18 .globl _Basic_FLASH
19 .globl _Basic_DRAW_callee
20 .globl _Basic_CLS_ZX
21 .globl _Basic_BRIGHT
22 .globl _Basic_BORDER_fastcall
23 .globl _Basic_AT_ROM_callee
24 ;--------------------------------------------------------
25 ; special function registers
26 ;--------------------------------------------------------
27 ;--------------------------------------------------------
28 ; ram data
29 ;--------------------------------------------------------
30 .area _DATA
000000 31 _HelloWorld_x:
000000 32 .ds 2
000002 33 _HelloWorld__for__1:
000002 34 .ds 2
35 ;--------------------------------------------------------
36 ; ram data
37 ;--------------------------------------------------------
38 .area _INITIALIZED
39 ;--------------------------------------------------------
40 ; absolute external ram data
41 ;--------------------------------------------------------
42 .area _DABS (ABS)
43 ;--------------------------------------------------------
44 ; global & static initialisations
45 ;--------------------------------------------------------
46 .area _HOME
47 .area _GSINIT
48 .area _GSFINAL
49 .area _GSINIT
50 ;--------------------------------------------------------
51 ; Home
52 ;--------------------------------------------------------
53 .area _HOME
54 .area _HOME
55 ;--------------------------------------------------------
56 ; code
57 ;--------------------------------------------------------
58 .area _CODE
59 ;HelloWorld.c:14: int main (int argc, char **argv)
60 ; ---------------------------------
61 ; Function main
62 ; ---------------------------------
000000 63 _main::
64 ;HelloWorld.c:20: Basic_Init();
000000 F3 [ 4] 65 di
000001 FD CB 01 A6 [23] 66 res 4,1(iy)
000005 CD 42 16 [17] 67 call 0x1642
68 ;HelloWorld.c:21: Basic_BORDER(4);
000008 2E 04 [ 7] 69 ld l, #0x04
70 ; spillPairReg hl
71 ; spillPairReg hl
00000A CDr00r00 [17] 72 call _Basic_BORDER_fastcall
73 ;HelloWorld.c:22: Basic_PAPER(0);
00000D 2E 00 [ 7] 74 ld l, #0x00
75 ; spillPairReg hl
76 ; spillPairReg hl
00000F CDr00r00 [17] 77 call _Basic_PAPER
78 ;HelloWorld.c:23: Basic_CLS();
000012 CDr00r00 [17] 79 call _Basic_CLS_ZX
80 ;HelloWorld.c:24: HelloWorld_x = 0;
000015 21 00 00 [10] 81 ld hl, #0x0000
000018 22r00r00 [16] 82 ld (_HelloWorld_x), hl
83 ;HelloWorld.c:25: HelloWorld__for__1 = 123;
00001B 2E 7B [ 7] 84 ld l, #0x7b
00001D 22r02r00 [16] 85 ld (_HelloWorld__for__1), hl
86 ;HelloWorld.c:26: do {
000020 87 00101$:
88 ;HelloWorld.c:27: Basic_INK(6);
000020 2E 06 [ 7] 89 ld l, #0x06
90 ; spillPairReg hl
91 ; spillPairReg hl
000022 CDr00r00 [17] 92 call _Basic_INK
93 ;HelloWorld.c:28: Basic_PLOT(HelloWorld_x, 127);
000025 3Ar00r00 [13] 94 ld a, (_HelloWorld_x+0)
95 ; spillPairReg hl
96 ; spillPairReg hl
000028 2E 7F [ 7] 97 ld l, #0x7f
00002A CDr00r00 [17] 98 call _Basic_PLOT_callee
99 ;HelloWorld.c:29: Basic_DRAW(10, 10);
100 ; spillPairReg hl
101 ; spillPairReg hl
00002D 3E 0A [ 7] 102 ld a,#0x0a
00002F 6F [ 4] 103 ld l,a
000030 CDr00r00 [17] 104 call _Basic_DRAW_callee
105 ;HelloWorld.c:30: Basic_INK(3);
000033 2E 03 [ 7] 106 ld l, #0x03
107 ; spillPairReg hl
108 ; spillPairReg hl
000035 CDr00r00 [17] 109 call _Basic_INK
110 ;HelloWorld.c:31: Basic_PLOT(HelloWorld_x, 37);
000038 3Ar00r00 [13] 111 ld a, (_HelloWorld_x+0)
112 ; spillPairReg hl
113 ; spillPairReg hl
00003B 2E 25 [ 7] 114 ld l, #0x25
00003D CDr00r00 [17] 115 call _Basic_PLOT_callee
116 ;HelloWorld.c:32: Basic_DRAW(10, 10);
117 ; spillPairReg hl
118 ; spillPairReg hl
000040 3E 0A [ 7] 119 ld a,#0x0a
000042 6F [ 4] 120 ld l,a
000043 CDr00r00 [17] 121 call _Basic_DRAW_callee
122 ;HelloWorld.c:33: HelloWorld_x += 2;
000046 2Ar00r00 [16] 123 ld hl, (_HelloWorld_x)
000049 23 [ 6] 124 inc hl
00004A 23 [ 6] 125 inc hl
00004B 22r00r00 [16] 126 ld (_HelloWorld_x), hl
127 ;HelloWorld.c:34: } while (--HelloWorld__for__1);
00004E 2Ar02r00 [16] 128 ld hl, (_HelloWorld__for__1)
000051 2B [ 6] 129 dec hl
000052 22r02r00 [16] 130 ld (_HelloWorld__for__1), hl
000055 3Ar03r00 [13] 131 ld a, (_HelloWorld__for__1+1)
000058 21r02r00 [10] 132 ld hl, #_HelloWorld__for__1
00005B B6 [ 7] 133 or a, (hl)
00005C 20 C2 [12] 134 jr NZ, 00101$
135 ;HelloWorld.c:35: Basic_AT(11, 1);
00005E 2E 01 [ 7] 136 ld l, #0x01
137 ; spillPairReg hl
138 ; spillPairReg hl
000060 3E 0B [ 7] 139 ld a, #0x0b
000062 CDr00r00 [17] 140 call _Basic_AT_ROM_callee
141 ;HelloWorld.c:36: Basic_PAPER(1);
000065 2E 01 [ 7] 142 ld l, #0x01
143 ; spillPairReg hl
144 ; spillPairReg hl
000067 CDr00r00 [17] 145 call _Basic_PAPER
146 ;HelloWorld.c:37: Basic_INK(5);
00006A 2E 05 [ 7] 147 ld l, #0x05
148 ; spillPairReg hl
149 ; spillPairReg hl
00006C CDr00r00 [17] 150 call _Basic_INK
151 ;HelloWorld.c:38: Basic_BRIGHT(1);
00006F 2E 01 [ 7] 152 ld l, #0x01
153 ; spillPairReg hl
154 ; spillPairReg hl
000071 CDr00r00 [17] 155 call _Basic_BRIGHT
156 ;HelloWorld.c:39: Basic_FLASH(1);
000074 2E 01 [ 7] 157 ld l, #0x01
158 ; spillPairReg hl
159 ; spillPairReg hl
000076 CDr00r00 [17] 160 call _Basic_FLASH
161 ;HelloWorld.c:40: Basic_PRSTR((void*)" HELLO WORLD of ZX Spectrum ! ");
000079 21r8Dr00 [10] 162 ld hl, #___str_0
00007C CDr00r00 [17] 163 call _Basic_PRSTR_C_ROM_fastcall
164 ;HelloWorld.c:41: Basic_FLASH(0);
00007F 2E 00 [ 7] 165 ld l, #0x00
166 ; spillPairReg hl
167 ; spillPairReg hl
000081 CDr00r00 [17] 168 call _Basic_FLASH
169 ;HelloWorld.c:42: Basic_PAUSE(0);
000084 21 00 00 [10] 170 ld hl, #0x0000
000087 CDr00r00 [17] 171 call _Basic_PAUSE_DI
172 ;HelloWorld.c:43: Basic_Quit();
173 ;HelloWorld.c:44: __FINI;
174 ;HelloWorld.c:45: }
00008A C3r00r00 [10] 175 jp _Basic_Quit_DI
00008D 176 ___str_0:
00008D 20 48 45 4C 4C 4F 20 177 .ascii " HELLO WORLD of ZX Spectrum ! "
57 4F 52 4C 44 20 6F
66 20 5A 58 20 53 70
65 63 74 72 75 6D 20
21 20
0000AB 00 178 .db 0x00
179 .area _CODE
180 .area _INITIALIZER
181 .area _CABS (ABS)
- - - Добавлено - - -
не влияет!
Ага. Хотите сказать, что в Вашей системе переменная окружения Include уже была задана какой-то другой программой?
Дело в том, что батники Compile.bat и Build.bat ждут параметров в переменных. Видите менюшку XDev -> ZXDev Project Setup
Вложение 78425
Это меню нельзя использовать для настройки примеров ZXDev/Mod, оно предназначено для настройки проектов, которые хранятся в произвольном месте. Когда Вы нажимаете кнопку Save в папке Bin проекта автоматически создаются батники примерно такого вида:
Цитата:
Сообщение от Compile.bat
Они обращаются к тем самым батникам подсистемы - ZXDev/Bin/Compile.bat и Build.bat, передавая им нужные опции в переменных. Include тоже используется для этого.Цитата:
Сообщение от Build.bat
Не подскажете, какая именно софтина создаёт у Вас переменную окружения Include?
да я их сам руками насоздавал!
Вот
INCLUDE=h:\Program Files\DirectX SDK\Include;h:\Cg\include; h:\Fresh\include;g:\DM\include;g:\DM\include\stl;g :\DM\include\GL;h:\FASM\INCLUDE
вот это всё этот батник и засасывает не знаю зачем, а sdcc из-за этого дает ошибку!
- - - Добавлено - - -
я и не использовал
Ну просто на будущее. Ведь свои проекты удобно хранить вне подсистемы.
SDCC даёт ошибку из-за того, что ему подсовывается непонятно что в качестве опций командной строки ;)
Кстати, если бы показали выхлоп, как я и предлагал, то сразу бы и поняли в чём проблема.
Ну да теперь всё норм и можно разрабатывать!
- - - Добавлено - - -
Понятно же зачем. Батник так и устроен, чтобы получать опции в этих переменных. А тут имя переменной совпало с используемой в Build.bat