PDA

Просмотр полной версии : SjASMPlus Z80 кросс ассемблер



Страницы : 1 [2] 3 4 5 6 7

Antipod
09.09.2008, 12:42
device zxspectrum128

org 0x6000
start
savesna "output.sna", start

в полученном снапшоте с адреса 0x5c00 - мусор ( системные переменные и какой-то загрузчик? а зачем? )

Aprisobal
12.09.2008, 20:11
device zxspectrum128

org 0x6000
start
savesna "output.sna", start

в полученном снапшоте с адреса 0x5c00 - мусор ( системные переменные и какой-то загрузчик? а зачем? )Там находятся системные переменные. Сделано было по просьбе, которая когда-то озвучивалась в этой теме (где именно? нужно искать).

Новую версию скоро выпущу, тем более мне вчера буржуин прислал патч, исправляющий ошибку в директиве MODULE и множество утечек памяти.

Shadow Maker
27.09.2008, 03:42
Писание чего-либо в скобках дает лишний ноль:

ld a, (1+2)
Результате дает #3e, 3, 0

Зачем?

До кучи вопрос - а округлять как? Скажем мне надо из #0124 получить #02. Ну или целочисленно поделить на 256.

Vitamin
27.09.2008, 12:16
ld a, (1+2)
Результате дает #3e, 3, 0

Зачем?
O_o
А что, 16-разрядные адреса уже отменили? Только 8-разрядные используются?


До кучи вопрос - а округлять как? Скажем мне надо из #0124 получить #02. Ну или целочисленно поделить на 256.
Как обычно вроде...
(addr + 255) shr 8

goodboy
27.09.2008, 14:40
ld a, (1+2)
Результате дает #3e, 3, 0

Зачем?

а почему не #3A ???

Shwartz
27.09.2008, 22:55
Результате дает #3e, 3, 0
Проверил, такого результата не бывает. Возможно два варианта:
3e,NN - ld a, N
3a,NN,NN - ld a, (N)
Судя по всему, признаком первой команды для компилятора является отсутствие внешних скобок, хотя возможно, что есть какие-то нюансы.


До кучи вопрос - а округлять как? Скажем мне надо из #0124 получить #02. Ну или целочисленно поделить на 256.

Можно как предлагает Vitamin, но возникнет сложность с адресами, большими чем #ff00 - результат не влезет в байт. Тут можно обрезать результат , используя and или mod, но проще через оператор high - high (addr + 255).
Целочисленно поделить на 256 - high N.

Что меня смутило в документации SjAsMPlus'а, так это опраторы сдвига:
x>>y shift right signed
x>>>y shift right unsigned
В чем состоит суть signed сдвига? Не меняется старший бит или что? Я этого не заметил. Назовите значение, на котором эти операторы будут работать по-разному.

Vitamin
27.09.2008, 23:06
Назовите значение, на котором эти операторы будут работать по-разному.
Везде, где установлен старший бит.
Например:
0x8000 - это 32768 для беззнаков и -32768 для знаковых
Делаем сдвиг к младшим разрядам (делим на 2) двумя способами:
беззнаково- получаем 0x4000- 16384 в обоих нотациях, что неверно для знаковых
знаково- получаем 0xc000- 49152 для беззнака, что неправильно и -16384 для знаковых, что правильно :)

Shwartz
27.09.2008, 23:13
беззнаково- получаем 0x4000- 16384 в обоих нотациях, что неверно для знаковых
знаково- получаем 0xc000- 49152 для беззнака, что неправильно и -16384 для знаковых, что правильно
Именно на этом значении я и проверял, результаты одинаковы, что меня и удивило

Может знаковость относится к 32-битным числам, в которых SjASMPlus считает?

Shadow Maker
28.09.2008, 02:00
Ладно, ага. Спасибо. У меня тупилово-режим включился.

Antipod
07.10.2008, 16:33
2Aprisobal
наскока реально имплементировать нечто похожее в макросах?


#include <iostream>

#define MY_MACRO( arg ) arg##_test();

void ff_test()
{
std::cout << "ff_test";
}

void main()
{
MY_MACRO( ff );
}

имеется ввиду ##.

Aprisobal
16.10.2008, 00:48
Antipod, пока ничего дельного не придумал.

Antipod
16.10.2008, 03:52
2Aprisobal
реализовано... правда, не через ##, а через '_'.
измененные сорцы ( по отношению к 1.07-rc7 ) прилагаются - tables.zip.
из ридми:

short sample:
-----
macro MyMacro arg
call arg_f
endm

MyMacro test
-----
will be expanded to:
-----
call test_f
-----

там уже, ессесна, на твое усмотрение включать в проект или нет.
комментарии приветствуются.

Shadow Maker
16.10.2008, 15:58
Как средствами SjAsmPlus сохранить басик с автостартом? А то монолоадер без автостарта - это не гут.

Antipod
17.10.2008, 16:47
2Aprisobal
расширена функциональность:

short sample:
-----
macro MyMacro arg0, arg1
call arg0_f
call arg0_arg1
call arg1_arg0
endm

MyMacro abc, def
-----
will be expanded to:
-----
call abc_f
call abc_def
call def_abc
-----
сорцы, исходник на котором тестировалось, и виндозный бинарник прилагаются.

2All
прошу протестировать бинарник на совместимость с оригинальной версией и сообщить о багах. Спасибо заранее.

Antipod
18.10.2008, 03:59
2Aprisobal
пофиксил некоторые баги, файлы обновил. Теперь работает как мне надо.

Shadow Maker
18.10.2008, 11:49
Мож мне кто-то ответит на мой вопрос?

breeze
18.10.2008, 16:06
Мож мне кто-то ответит на мой вопрос?


если мне не изменяет память, автозагрузка зависит от адреса в описателе файла, вот кусок от Doors где генериться 100% автозагружаемый басик:



DEVICE ZXSPECTRUM128

DEFINE KERNEL_KAY
;DEFINE KERNEL_SCORP
;DEFINE KERNEL_ATM

EMPTYTRD "../bin/doors.trd"

;MODULE MonoLoader

org #6000
bootBegin
include "bootloader/boot.asm"
bootEnd

org #4000
DISP 23867

Basic db #00,#00 ; basic number string [#00,#01]
dw EndBasic-Begin ; size of basic string
Begin db #FD ; "CLEAR" token
db #30 ; "0" fake numeber
db #0e,#00,#00
dw #5fff ; real stack (CLEAR) [#5fb3]
db #00
db #3a ; ":"
db #f9 ; "RANDOMIZE" token
db #c0 ; "USR" token
db #30 ; "0" fake numeber
db #0e,#00,#00
dw #5d53 ; real call (USR) [#5d53]
db #00
db #3a ; ":"
db #ea ; "REM" token

include "bootloader/basicboot.asm"

db #D
EndBasic
ENT

SAVETRD "../bin/doors.trd","boot.B",16384,EndBasic-Basic



SAVETRD "../bin/doors.trd","bootcode.C",bootBegin,bootEnd-bootBegin

boo_boo
18.10.2008, 17:05
автозагрузка зависит от адреса в описателе файла
не, автостарт васика сидит в конце васик-файла, #80,#AA,strL,strH
(эти 4 байта не должны входить в общую длину васик-программы в каталоге)

breeze
18.10.2008, 17:10
не, автостарт васика сидит в конце васик-файла, #80,#AA,strL,strH
(эти 4 байта не должны входить в общую длину васик-программы в каталоге)

ыыы :eek: как же у меня тогда сие чудо работает ;)

boo_boo
18.10.2008, 18:12
ыыы :eek: как же у меня тогда сие чудо работает ;) каким-то неизвестным науке способом :)
тока что проверил: отассемблировал твой сорс, сделал LIST -- автостарта нету..

breeze
18.10.2008, 19:00
каким-то неизвестным науке способом :)
тока что проверил: отассемблировал твой сорс, сделал LIST -- автостарта нету..

o_O ну ты знаешь я тоже только что компилировал прежде чем что-то написать, вот только разница в том ;) что у меня сорцы то полные а не часть, но думаю скорее всего у меня удачное стечение байтов :)

Shadow Maker
18.10.2008, 23:47
У меня тоже не работает. У тебя работает скорее всего потому, что бут у тебя запускает басики не "LOAD "name"", а "RUN "name""
boo_boo прав, именно в этом и проблема - вручную я могу проставить автостарт, а средствами сьясма - хрен. В итоге занимаюсь извращениями в стиле - сначала отассемблировали и записали на диск с автостартом в теле программы, потом всё удалили, убрали автостарт из тела и опять записали. Поскольку сьясм трдшки не чистит, получается как бы с автостартом.

breeze
19.10.2008, 02:39
У меня тоже не работает. У тебя работает скорее всего потому, что бут у тебя запускает басики не "LOAD "name"", а "RUN "name"

ммм... :o вообще-то у меня записывается "boot.b" на чисто созданную TRD'ку, затем она подсовывается емулю и всё отлично автостартует :eek:

Shadow Maker
19.10.2008, 02:59
Ну короче мировые флуктуации космоса мы не учитываем. Вопрос открыт.

boo_boo
19.10.2008, 04:45
Вопрос открыт. если тебя не ломает билдить через мейкфайл или любой другой скрипт, можно заюзать внешние тулзы для работы с трд-образом. по принципу -- сделать сжасмом бейсик с инфой об автостарте, а потом подправить длину в каталоге, чтобы автостарт стал автостартом..

breeze
19.10.2008, 12:37
если тебя не ломает...

что-то не совсем до конца понимаю, а не проще ли доработать sjasm что-бы он корректно сохранял басики ?

boo_boo
19.10.2008, 14:13
не проще ли доработать sjasm что-бы он корректно сохранял басики ? билд-скрипт проще написать, чем код чужого немаленького проекта править. другое дело, что доработка сжасма общественно-полезное дело, а написание билд-скрипта нет..
(мне, правда, не очень понятно, за что народ любит совмещать билдинг и кодинг в одном ассемблерном файле, но любит, эт факт.)

breeze
19.10.2008, 16:35
мне, правда, не очень понятно, за что народ любит совмещать билдинг и кодинг в одном ассемблерном файле, но любит, эт факт.

ну тут вообще-то речь идёт именно при удобствах написания монолоадера для проекта, а это согласись проще и удобнее сделать сразу в коде, а затем записать последовательно все файлы на диск.

boo_boo
19.10.2008, 16:58
а это согласись проще и удобнее сделать сразу в коде, а затем записать последовательно все файлы на дис
дело вкуса, по мне удобнее нагенерить бинарников, а потом запилить их на трдшку как и куда надо, заюзав для этого Makefile :)

boo_boo
19.10.2008, 18:40
приделал к сжасму версии 1.07 RC7 запись в трд с автостартом, во вложении измененные файлы.
как работает: в SAVETRD к старту и длине добавил необязательный параметр -- номер строки автостарта. если оно есть, то к концу файла дописываюца заветные 4 байта, длина файла в байтах остается прежней, длина в секторах при надобности увеличиваеца. тип файла пофиг. пример на основе кода breeze:


DEVICE ZXSPECTRUM128

EMPTYTRD "test.trd"

org #4000
DISP 23867

Basic db #00,#01 ; basic number string [#00,#01]
dw EndBasic-Begin ; size of basic string
Begin db #FD ; "CLEAR" token
db #30 ; "0" fake numeber
db #0e,#00,#00
dw #5fff ; real stack (CLEAR) [#5fb3]
db #00
db #3a ; ":"
db #f9 ; "RANDOMIZE" token
db #c0 ; "USR" token
db #30 ; "0"
db #0e,#00,#00
dw #0000 ; сброс!
db #00
db #3a ; ":"
db #ea ; "REM" token
db "FUCK"
db #D
EndBasic
ENT

SAVETRD "test.trd","boot.B",16384,EndBasic-Basic,1

ЗЫ LUA-интерфейс не менял, бо ломает разбираться с toloa, просто отключил там доп. параметр

Aprisobal
20.10.2008, 12:38
Ок, спасибо, скоро точно обещаюсь выпустить новую версию со всеми патчами. А их накопилось много!

[..удалено..] - thx to breeze и newart.

Добавлено через 28 секунд
А также помещу исходный код в SVN репозиторий - там всегда будет самая свежая версия.

Raydac
20.10.2008, 13:35
Ок, спасибо, скоро точно обещаюсь выпустить новую версию со всеми патчами. А их накопилось много!
задокументи главное нормально и большим количеством маленьких примеров, что бы не копаться

Aprisobal
06.11.2008, 02:58
Новая пререлиз версия, в которой добавлена директива SAVETAP, исправлены некоторые утечки памяти, применены патчи Antipod, boo_boo и PulkoMandy. Проверьте, плз, на своих проектах - компилируются или нет. Тестировал на SquareMania - все ок.

SAVETAP пишет *.tap файлы вплоть до 1024мб памяти. Использование:

SAVETAP "file.tap",STARTADDR


Компилировался под MSVC2005, поэтому требует наличия VC80 Redistributable.

SVN: https://sourceforge.net/svn/?group_id=173915

NovaStorm
06.11.2008, 08:58
>>файлы вплоть до 1024мб памяти
Вах!
>>поэтому требует наличия VC80 Redistributable
А на MinGW собирать не лучше?

Aprisobal
06.11.2008, 12:45
>>файлы вплоть до 1024мб памяти
Вах!
>>поэтому требует наличия VC80 Redistributable
А на MinGW собирать не лучше?Написано(и подчеркнуто!), что это пререлиз версия :) Для бета-тестеров.
Релиз да, собираю на MinGW.

Totem
11.11.2008, 19:15
объясните дятилу! как сохранить код SAVETRD


DEVICE ZXSPECTRUM128

EMPTYTRD "wa3.trd"
ORG #8000

BEGIN LD A,0
RET
DEFM "AUAU"
DEFM "QQQQ"
ENDOFPROG


;SAVESNA "WA3.SNA",#8000
SAVETRD "wa3.trd","wa3.C",BEGIN,ENDOFPROG-BEGIN
гружу ручками в спекуляторе
randomize usr 15619:rem:load"wa3"code
в дебагере на #8000 милые глазику нопики. Зопутался ужо :(

поправил тег.

Aprisobal
11.11.2008, 19:32
Во-первых код нужно оформлять в тегах CODE:

DEVICE ZXSPECTRUM128

EMPTYTRD "wa3.trd"
;ORG #8000

BEGIN LD A,0
RET
DEFM "AUAU"
DEFM "QQQQ"
ENDOFPROG


;SAVESNA "WA3.SNA",#8000
SAVETRD "wa3.trd","wa32.C",BEGIN,ENDOFPROG-BEGIN (код скопировал из письма-уведомления об ответе)

Во-вторых:
randomize usr 15619:rem:load"wa32"code, хотя это больше похоже на опечатку.

А в-третьих в вашем посте не видно, но в коде, который пришел с уведомлением, есть строка ";ORG #8000". Зачем закомментировали ORG не понимаю, раскомментируйте (убираем ";") и все будет работать.

Totem
11.11.2008, 19:48
:v2_conf2:нет кода на #8000 уважаемый Aprisobal, если сохранять 48 sna все ок. прога грузится и запускается (ну не эта конечно) :) порыл документашку, примеры,эту ветку:v2_conf2: ниче не понимаю,что не так

Aprisobal
11.11.2008, 20:50
:v2_conf2:нет кода на #8000 уважаемый Aprisobal, если сохранять 48 sna все ок. прога грузится и запускается (ну не эта конечно) :) порыл документашку, примеры,эту ветку:v2_conf2: ниче не понимаю,что не так
В приложенном файле ваш код + .bat файл + sjasmplus. Запускаем, смотрим, что скомпилировалось и файл wa3.trd создался. В эмуляторе загружаем код в память по команде RANDOMIZE USR 15691:REM:LOAD "wa32"CODE, открываем отладчик, переходим по адресу 8000h и наблюдаем, что код на месте.

Удачи!

Totem
12.11.2008, 01:20
по команде RANDOMIZE USR 15691:REM:LOAD "wa32"CODE
мммм очепятка,
уважаемый Aprisobal! скорее всего проблема локальная или у меня в (п.1)мозгу или с (п.2)ноутом,
не из UE, не батником, не получается и Unreal и в Spec'ом дебагере - nop'ы.
диск создатся, участок пишется на него все ок, но кода там нет.
исходя из того, что (п.1):
компилим,загружаем, смотрим (LIST),есть wa32.c !(randomize usr 15619:rem:load"wa32"code)
в Unreal ;жмем ctrl+f1 в дебагер, на окошке z80 клацаем ctrl+G,вбиваем заветные 8000-видим nop'ы.

Shadow Maker
12.11.2008, 01:45
А в снапшот компилируется?

Totem
12.11.2008, 01:59
Shadow Maker, да в 48 работает, код есть, в 128 вылетает сразу в 48

Antipod
12.11.2008, 10:58
randomize usr 15619:rem:load"wa32"codeкосяк в этой строке.
Птому что файл пишется на диск со стартовым адресом(адрес загрузки) ноль. Если указать его явно - все пахает.


randomize usr 15619:rem:load"wa32"code 32768

ps: как выявить этот косяк - делаем list, видим что у wa32 start 00000. Берем анреал, ставим бряк поинт на запись в память по адресу 0. загружаем( load"wa32"code ) - вываливаемся в дебаггер на бряк поинте. Занавес.

pps: load"filename"code - грузит файло по адресу по умолчанию ( по тому, что указан в каталоге ).

Totem
12.11.2008, 13:01
указывал явно и адрес те же яй..ца

Добавлено через 1 час 34 минуты
вообще на диск пишется с 32768. пошарился по диску в дебагере
и ручками и поиском, чета не нашел кода.
попробую сегодя с монолоадером в RC8 tap'ы можно писать ужо?

Antipod
12.11.2008, 15:02
указывал явно и адрес те же яй..ца

Добавлено через 1 час 34 минуты
вообще на диск пишется с 32768. пошарился по диску в дебагере
и ручками и поиском, чета не нашел кода.
Ну значит пишет в ПЗУ. Ставь бряк поинт на запись в ПЗУ.
Еще можешь поставить бряк поинт на адрес 0x2ff0 (TR-DOS 5.04F) - в этом месте из буфера чтения копируется в память, узнаешь куда читается.
Относительно стартового адреса: юзай последнюю версию sjasma.

Aprisobal
12.11.2008, 17:44
Что RC7, что prerelease RC8, один черт, см. скриншоты(1 - RC7, 2 - RC8):

Aprisobal
12.11.2008, 17:46
Какими версиями-то пользуетесь?

Antipod
12.11.2008, 18:13
Какими версиями-то пользуетесь?
последний пререлиз( размер эхешника 1646592 байта ) и тот билд с моими изменениями... результат один и тот же. сорцы с форума ( пост #287 ) .

Totem
12.11.2008, 19:13
пробывал на другой машине -результат тот же RC8 и RC7, если у остальных работает :v2_jawdr:. Вобщим буду пока юзать tap, оно работает отличненько:v2_thumb:

Добавлено через 10 минут
Antipod, в #287, закоменчен ORG #8000
потому и стартовый нулевой. а басик грузит c CODE 32768? код есть на месте аль нет?

Antipod
12.11.2008, 20:32
Добавлено через 10 минут
Antipod, в #287, закоменчен ORG #8000
потому и стартовый нулевой.

провтыкал, исправил. Все пахает намана. Приаттач трд-образ, если нетрудно.

Aprisobal
13.11.2008, 00:55
последний пререлиз( размер эхешника 1646592 байта ) и тот билд с моими изменениями... результат один и тот же. сорцы с форума ( пост #287 ) .Ок, понятно, посмотрю.

Antipod
13.11.2008, 09:25
Ок, понятно, посмотрю.да там, в принципе, смотреть не на что, птому как с этим wa32.c работает так же как у тебя.

ps: ждем trd-образ от totema...

Totem
13.11.2008, 17:48
сопственно дицк

Antipod
13.11.2008, 17:58
сопственно дицк
?
этот диск пуст.

Totem
13.11.2008, 18:11
упс вот дицк

Antipod
13.11.2008, 18:20
Грузил строкой с доса ( load"wa32"code ), с обох бейсиков ( randomize usr 15619:rem:load"wa32"code ). Нормально все загрузилось.
Файл соответствует исходнику. К sjasmу претензий нет:).
Убедись, что именно этот образ подключаешь к эмулю;)

Totem
13.11.2008, 18:29
вобщем то на то и грешу
попробую в другом эмуле

Totem
13.11.2008, 19:25
:v2_eek::v2_scare: все а я сошла с ума какая досада.....:v2_devil:

psndcj
13.11.2008, 19:58
странная проблема... уже не один проект сделал в сиджасме. после загрузки файла из трд-шника все ОК!

Antipod
13.11.2008, 20:03
:v2_eek::v2_scare: все а я сошла с ума какая досада.....:v2_devil:Приаттач прошивки, которые юзаешь в анреале, если нетрудно:)

Totem
13.11.2008, 20:15
:v2_biggr: прошивки стандартные с ви трдоса. залил чистый образ системы на старенкий hp
PIII все работает. :v2_conf2:

Antipod
13.11.2008, 22:54
:v2_biggr: прошивки стандартные с ви трдоса. залил чистый образ системы на старенкий hp
PIII все работает. :v2_conf2:
мистика:v2_conf2:
ради интереса, плз, поставь такой бряк поинт в анреале[в отладчике нажми alt+c и введи в левое крайнее поле]:
(PC==2FF0)
потом загрузи файло, вывалишься в дебаггер, кинь сюда скриншот.

Totem
14.11.2008, 00:19
гыыыы вылетел винт:v2_scare:
просто посыпался я такого ище не видал :v2_mad:

Antipod
14.11.2008, 10:29
гыыыы вылетел винт:v2_scare:
просто посыпался я такого ище не видал :v2_mad: соболезную... я тож такого еще не видел:v2_huh:

Aprisobal
04.12.2008, 12:13
Версия, которую выложил выше как приложенный файл - у всех все ок? Сделал бы релиз Stable и перешел по версии выше.

bugsy
04.12.2008, 19:25
у меня компилится

psndcj
04.12.2008, 19:36
я не рискнул пересобирать нашу последнюю дему... и рискну уже только после релиза =( Апри - респект!!!

Antipod
05.12.2008, 16:05
я не рискнул пересобирать нашу последнюю дему... и рискну уже только после релиза =( Апри - респект!!! сорри за оффтоп... а де риск? суть как раз в том, что на выходе должно быть тоже самое относительно предыдущей версии (Тупо прогнать компаратором )...

Shadow Maker
14.01.2009, 22:54
У меня после ассемблирования вот этого исходника в последней версии почему-то включена 7 страница. Хотя директивы PAGE там вообще нет. Почему? В stable все нормально, 0 страница.

http://zx.pk.ru/showthread.php?t=9284&page=2

Aprisobal
15.01.2009, 00:44
У меня после ассемблирования вот этого исходника в последней версии почему-то включена 7 страница. Хотя директивы PAGE там вообще нет. Почему? В stable все нормально, 0 страница.

http://zx.pk.ru/showthread.php?t=9284&page=2Ок, будет проверено на днях.

Aprisobal
19.01.2009, 15:32
Ок, будет проверено на днях.Баг имеется. Заставить исходник работать на всех версиях можно, установив нулевую страницу перед SAVESNA (т.е. PAGE 0, затем SAVESNA).

Shadow Maker
19.01.2009, 16:25
Ну это-то само собой понятно... Фикс планируется?

Aprisobal
19.01.2009, 17:24
Shadow Maker, да, конечно и соот-но будет выпущена стабильная 1.07 версия. Ориентировочно в начале февраля.

valker
21.01.2009, 10:27
В разделе DISPLAY <bytes>

Написано:


ORG 100h
TESTLABEL:
;...some code...
RET
DISPLAY "--the some program-- by me"
DISPLAY "TESTLABEL address is:",/A,TESTLABEL
/*
will be out to the console next strings:
> --the some program-- by me
> TESTLABEL address is:0x100,257
*/


Следует читать:


ORG 100h
TESTLABEL:
;...some code...
RET
DISPLAY "--the some program-- by me"
DISPLAY "TESTLABEL address is:",/A,TESTLABEL
/*
will be out to the console next strings:
> --the some program-- by me
> TESTLABEL address is:0x100,256
*/

Antipod
21.01.2009, 12:24
слегка оффтоп... Недавно открыл для себя такое чудо (сабж), немного, правда, покоробило, что явно нигде не написано что за *.l файлы, как оно должно называться, где лежать. В доке асма только коротенько про labelslist, в доке к анреалу только быстрая кнопка ( просветление случайно наступило тут (http://zx.pk.ru/showpost.php?p=177763&postcount=77) )...
Иногда генерятся такие метки вида:
05:27E3 54.53.51.50>l5Не знаю нормально ли это... Еще анреалу (0.35.2) плохеет (тупо с исключением валится) от слишком длинных меток. Написал за пару минут перл-скрипт для обрезания имени меток до 10 символов и отсеивания меток вида 54.53.51.50 (на всякий случай). Терь жить мона.:)

breeze
21.01.2009, 13:27
Еще анреалу плохеет (тупо с исключением валится) от слишком длинных меток.

[:\/\/\/\/\/\/\:]
ну вообще-то вы бы батенька уточняли версию анрила, ибо в старых, такая проблема присутствовала, в последних версиях такое давно пофикшено!

Antipod
21.01.2009, 14:05
[:\/\/\/\/\/\/\:]
ну вообще-то вы бы батенька уточняли версию анрила, ибо в старых, такая проблема присутствовала, в последних версиях такое давно пофикшено!
упс, сорри). 0.35.2

breeze
05.02.2009, 00:25
приделал к сжасму версии 1.07 RC7 запись в трд с автостартом...

эээ.... судя по скриншоту, в RC8 сия фишка должна присутсвовать, однако если написать LOAD "boot" никакого автостарта нет :mad:

гм... кто-нибудь прояснит ситуацию с записью автостартующих басиков в sjasm ?

breeze
05.02.2009, 00:30
гы гы :) пока писал пост разобрался :) номер строки всё-таки должен быть 1, у меня было 0

было:



Basic db #00,#00 ; basic number string [#00,#01]
dw EndBasic-Begin ; size of basic string
Begin db #FD ; "CLEAR" token
db #30 ; "0" fake numeber


стало:


Basic db #00,#01 ; basic number string [#00,#01]
dw EndBasic-Begin ; size of basic string
Begin db #FD ; "CLEAR" token
db #30 ; "0" fake numeber

Shadow Maker
05.02.2009, 06:17
SAVETRD "st_force.trd","ST_FORCE.B",16384,EndBasic-Basic,1

Вот так я записываю и у меня всё автостартует.

breeze
05.02.2009, 10:00
SAVETRD "st_force.trd","ST_FORCE.B",16384,EndBasic-Basic,1

Вот так я записываю и у меня всё автостартует.

это понятно :) но есть в басике нет строки под номером 1 так и стартовать нечему :)

Shadow Maker
05.02.2009, 11:56
Логично.

Aprisobal
16.02.2009, 14:46
Сижу, привожу код компилятора в порядок...

Думаю, что нужно выпустить две версии 1.07 Stable и 1.08 RC1. Последняя будет включать в себя код Kurles'a.

breeze
16.02.2009, 16:45
Сижу, привожу код компилятора в порядок...

Думаю, что нужно выпустить две версии 1.07 Stable и 1.08 RC1. Последняя будет включать в себя код Kurles'a.

ждём с нетерпением ;)

Vitamin
19.02.2009, 13:21
Обнаружено в версии 1.07 RC7:

- savebin с нулевой длиной записывает файл примерно 40кб размером
- если есть метка и на следующей строке equ, то не понимает.

Antipod
19.02.2009, 17:45
Обнаружено в версии 1.07 RC7:
- savebin с нулевой длиной записывает файл примерно 40кб размером
в сорцах есть такое:

if (length <= 0) {
length = 0x10000 - start;
}
видимо, как результат:
savebin "file.bin", addr, 0
и
savebin "file.bin", addr
эквивалентны. Тость парсинг несущесвующего параметра - ноль.

- если есть метка и на следующей строке equ, то не понимает.явно нигде не написано, но это ошибка синтаксиса - должно быть в одной строке. Точно также не проканает вещь типа:

ld
a,
10

Vitamin
19.02.2009, 17:48
явно нигде не написано, но это ошибка синтаксиса - должно быть в одной строке.
ЕМНИП, в аласме вроде можно было переносить. Иначе рвется форматирование на длинных метках.

Antipod
19.02.2009, 18:26
ЕМНИП, в аласме вроде можно было переносить. Иначе рвется форматирование на длинных метках.по идее можно реализовать, добавив как новый опкод... существующий парсинг трогать не стоит %)

psndcj
19.02.2009, 21:54
а имхо вообще лучше это не трогать - это все-таки не аласм - а сорцы с аласма переделать каждому кому это надо самому. со Шторма тоже не все корректно перетаскивается - но это же не повод для изменения парсинга.

в Шторме .10 ldi:inc h компилится как dup 10 (ldi:inc h) edup
а в сиджасме ----- dup 10 (ldi) edup : inc h

нашел несовместимостей 5 когда перетаскивал свои сорцы в сиджасм - самое плохое, что в отличие от вышеуказанной "ошибки" с EQU никакого сообщения об ошибке нет - в результате получаем просто нерабочий бинарник =(

Aprisobal
20.02.2009, 02:51
а имхо вообще лучше это не трогать - это все-таки не аласм - а сорцы с аласма переделать каждому кому это надо самому. со Шторма тоже не все корректно перетаскивается - но это же не повод для изменения парсинга.

в Шторме .10 ldi:inc h компилится как dup 10 (ldi:inc h) edup
а в сиджасме ----- dup 10 (ldi) edup : inc h

нашел несовместимостей 5 когда перетаскивал свои сорцы в сиджасм - самое плохое, что в отличие от вышеуказанной "ошибки" с EQU никакого сообщения об ошибке нет - в результате получаем просто нерабочий бинарник =(Однозначно в FAQ! Необходимо составить, а данный пункт назвать: "Перенос исходного кода из STORM".

Vitamin
20.02.2009, 07:45
Однозначно в FAQ! Необходимо составить, а данный пункт назвать: "Перенос исходного кода из STORM".
Ну я, например не переношу ничего ниоткуда.

Ладно, подойдем с другой стороны. Какие ассемблеры из существующих (для спека, естесно)
а) не поддерживают метки длиннее 8 символов
б) не поддерживают директивы, расположенные не по первой табуляции и не по табуляции вообще.

Antipod
20.02.2009, 17:48
Условия: sjasm, unreal.
Проблема: если писать прогу, которая занимает больше 128 к, имеем некоторые затруднения с загрузкой программы в эмуль... которые можно обойти по-разному, как то: выгружать откомпилированное в трд-образ, потом при инициализации загрузить выгруженное в память... Ну тут уже каждый как хочет... Мне, например, не подходит время ожидания пока программа загрузится, даже когда эмуль настроен на мильон-мильардов тактов в секунду, это чуть дольше чем вообще без загрузки.

Решение: Имеем сорцы компилера и эмуля - и имеем поддержку снапшотов выше 128к.
Что с того вышло:
sjasm:
- savesna само выбирает размер снапшота в зависимости от device( в данный момент добавлены 256К, 512К, 1024К );
- какой бы не был установлен последний page - в снапшоте он всегда - 7.
- тип девайса ( атм, пентагон и тд ) не сохраняется в снапшот и не восстанавливается.
unreal:
- сделана только _загрузка_ снапшотов, выгрузка мне просто пока не нужна %);
- после загрузки размер снапшота ( те, что более 128К ) автоматом устанавливает размер памяти в эмуляторе ( не тип ). [В сорцах как альтернатива есть мессадж бокс].

может еще что забыл... сорцы ( только измененные файлы ) прилагаются.

psndcj
17.03.2009, 14:47
столкнулся с неприятным багом =(

org #6300
snd incbin "test.dat",0,#10000-$-1

такая конструкция сделана для того, чтобы загрузить файл который не влазит в память целиком (-1 поставил уже в поисках избавления от глюка). после загрузки файл оказывается битым =((( судя по дампу с какого-то смещения начинаются дублироваться отдельные байты (не все). это начинается с адреса #8001 - видимо как-то связано с моделью страниц (???).

если порезать файл руками и загрузить часть, то все ок
org #6300
snd incbin "test.000"

в аттаче 2 файла - сохранял из анрыла часть памяти для сравнения.
cjasm 1.07 stable - если в более новых версиях исправлено, то извиняюсь.

Aprisobal
17.03.2009, 15:28
столкнулся с неприятным багом =(

org #6300
snd incbin "test.dat",0,#10000-$-1

такая конструкция сделана для того, чтобы загрузить файл который не влазит в память целиком (-1 поставил уже в поисках избавления от глюка). после загрузки файл оказывается битым =((( судя по дампу с какого-то смещения начинаются дублироваться отдельные байты (не все). это начинается с адреса #8001 - видимо как-то связано с моделью страниц (???).

если порезать файл руками и загрузить часть, то все ок
org #6300
snd incbin "test.000"

в аттаче 2 файла - сохранял из анрыла часть памяти для сравнения.
cjasm 1.07 stable - если в более новых версиях исправлено, то извиняюсь. Видимо 1.06 Stable, 7-й Stable еще нет.

Пристал недавно какой-то буржуин с вопросами и багрепортами - версию для MacOS X ему подавай :D

psndcj
17.03.2009, 16:10
ну значит не Stable =)
SjASMPlus 1.07 Documentation [31.05.2007] - из документации...
а насчет "бага" то что? просто боязно - в каких случаях это проявиться может?

Пристал недавно какой-то буржуин с вопросами и багрепортами - версию для MacOS X ему подавай
Gasman наверное =)

Aprisobal
18.03.2009, 17:47
psndcj, уезжаю на Украину на несколько дней, поэтому отвечу только через неделю.

А просит не Гасман, а другой человек. И программирует он не для спектрума :)

Spir0
19.04.2009, 19:05
Попытался собрать SjASMPlus под Linux - не собирается :(

1.07 RC7 выдает:



тут вначале куча строк с deprecated conversation

... sjasm/directives.cpp:2181: предупреждение: deprecated conversion from string constant to ‘char*’
sjasm/directives.cpp: In function ‘bool LuaSetPage(long unsigned int)’:
sjasm/directives.cpp:2186: предупреждение: deprecated conversion from string constant to ‘char*’
sjasm/directives.cpp: In function ‘bool LuaSetSlot(long unsigned int)’:
sjasm/directives.cpp:2199: предупреждение: deprecated conversion from string constant to ‘char*’
make: *** [sjasm/directives.o] Ошибка 1


1.07 RC8 Pre


sjasm/directives.o: In function `dirSAVETAP()':
directives.cpp:(.text+0x307b): undefined reference to `SaveTAP_ZX(char*, unsigned short)'
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [all] Ошибка 1

Aprisobal
19.04.2009, 19:19
Spir0, для версии 1.07 RC7 используйте Makefile, который идет вместе с исходниками - успешно компилируется под Ubuntu и CentOS. На предупреждения не обращать внимания - если нет ERROR'ов, то значит все скомпилировалось и ищите бинарный файл "sjasmplus".

Для 1.07 RC8 Pre в Makefile видимо не подключен один из заголовочных файлов, нужно проверить, что передается в параметрах к GCC.

Spir0
19.04.2009, 20:05
Spir0, для версии 1.07 RC7 используйте Makefile, который идет вместе с исходниками - успешно компилируется под Ubuntu и CentOS. На предупреждения не обращать внимания - если нет ERROR'ов, то значит все скомпилировалось и ищите бинарный файл "sjasmplus".

Error есть , при компиляции directives.cpp. Приведу фрагмент до ошибки сначала:


g++ -O2 -DLUA_USE_LINUX -DMAX_PATH=PATH_MAX -Ilua5.1 -Itolua++ -o sjasm/directives.o -c sjasm/directives.cpp
sjasm/directives.cpp: In function ‘int ParseDirective(bool)’:
sjasm/directives.cpp:64: предупреждение: deprecated conversion from string constant to ‘char*’

тут куча всяких deprecated conversion from string constant to ‘char*’ и заканчивается как цитировал выше

sjasm/directives.cpp: In function ‘bool LuaSetPage(long unsigned int)’:
sjasm/directives.cpp:2186: предупреждение: deprecated conversion from string constant to ‘char*’
sjasm/directives.cpp: In function ‘bool LuaSetSlot(long unsigned int)’:
sjasm/directives.cpp:2199: предупреждение: deprecated conversion from string constant to ‘char*’
make: *** [sjasm/directives.o] Ошибка 1

Т.е. не компилируется этот файл и sjasmplus нигде не создается.
Компилятор - g++ --version
g++ (GCC) 4.3.3

Aprisobal
19.04.2009, 21:02
Только что проверил - все ок. Действия были такие (Ubuntu):
1. Открыл терминал
2. Далее: mkdir SjASMPlus && cd SjASMPlus
3. Далее: wget http://switch.dl.sourceforge.net/sourceforge/sjasmplus/sjasmplus-src-1.07-rc7.zip
4. Далее: unzip sjasmplus-src-1.07-rc7.zip
5. Далее: make (куча предупреждений)
6. Далее: ./sjasmplus и на экране:
http://zx.pk.ru/attachment.php?attachmentid=11689&stc=1&d=1240160496

Готово! В приложении бинарный файл (в архиве ZIP еще архив TAR+GZIP, т.к. на форуме разрешены только определенные расширения, а ZIP не сохраняет права у файлов)

Spir0
19.04.2009, 21:44
Aprisobal, да, именно так тоже все и делаю, но почему то вылетает с ошибкой. Вот в 1.07 RC8 Pre этот файл и остальные компилятся нормально (ну кроме ошибки в конце с SaveTAP) - мистика какая то :)

Вообщем пока буду пользовать готовый бинарник в ожидании фикса RC8 Pre

Vitamin
20.04.2009, 02:14
На предупреждения не обращать внимания - если нет ERROR'ов, то значит все скомпилировалось
А вот этого бы крайне не рекомендовал. В 90% случаев предупреждение делается не зря и крайне стоит поправить код так, чтобы оно не возникало.

ЗЫ. У меня тоже не собирается:


[vitamin@vitamin-linux SJAsmPlus]$ make 2>&1 | grep error
sjasm/directives.cpp:1639: error: ‘system’ was not declared in this scope
sjasm/directives.cpp: In function ‘void _lua_showerror()’:
sjasm/directives.cpp:1897: error: ‘atoi’ was not declared in this scope

[vitamin@vitamin-linux SJAsmPlus]$ uname -a
Linux vitamin-linux 2.6.29-ARCH #1 SMP PREEMPT Wed Apr 8 12:39:28 CEST 2009 x86_64 AMD Turion(tm) 64 X2 Mobile Technology TL-60 AuthenticAMD GNU/Linux

Shadow Maker
20.04.2009, 06:00
- какой бы не был установлен последний page - в снапшоте он всегда - 7.


:v2_scare::v2_scare::v2_scare: НАХРЕНА?!

Antipod
21.04.2009, 16:12
:v2_scare::v2_scare::v2_scare: НАХРЕНА?!
не знаю. Так было в сорцах "до меня". Я не модифицировал.

Shadow Maker
21.04.2009, 18:16
Верните на родину тот пейдж, который был установлен последним, плыз. А то тут извратами приходится страдать из-за этого.

Aprisobal
21.04.2009, 22:44
Верните на родину тот пейдж, который был установлен последним, плыз. А то тут извратами приходится страдать из-за этого.А разве это не было исправлено в RC8 Pre? Если нет, то исправим.

SAM style
27.04.2009, 15:27
ЗЫ. У меня тоже не собирается:
У меня собрался. Результат присобачен. К каждому исходнику, в котором gcc ругался на atoi, calloc и ещё что-то прибавил #include <stdlib.h>, ибо там они все скрываются. 1.0.7.rc7
ЗЫ: debian5.0 ведро 2.6.26-1-686 gcc 4.3.2
PS: И огромное спасибо RASMER'у за то, что пинал меня полгода, подбивая собрать весч, которой я не пользуюсь.

rasmer
28.04.2009, 19:33
вот нет в жЫзни справедливости....
я СанСаныча пинал полгода гдето собрать под лялих.... а все спасибы ему... :(

Aprisobal
28.04.2009, 20:54
Вижу, что deb и rpm пакеты интересны будут не только мне одному?

siril
26.06.2009, 20:48
@Aprisobal, привет! =)

я тут нарисовал конфиги для синтаксической подсветки z80 (и директив sjasmplus) в XCode (IDE for MacOSX), можешь их добавить в Recommended Editors? (http://sjasmplus.sourceforge.net/recommended-text-editors/)

суть такова:
для установки подсветки - следует скопировать файлы a80.xclangspec и a80.xcspec в каталог /Developer/Library/Xcode/Specifications/,

для установки файлового темплейта - каталог "Z80 Assembly File.pbfiletemplate" скопировать в "/Developer/Library/Xcode/File Templates/Other".

либо можно воспользоваться автоматическим инсталлятором "Z80 Syntax Coloring for XCode.mpkg", который сделает ровно то же самое.

(нормальные темплейты для удобного build и build&run — ещё не готовы, если кто подсобит - будет круто =)

для единообразия - линк на XCode -> http://developer.apple.com/tools/xcode/

siril
09.07.2009, 20:08
@Aprisobal, стОит ждать, что ты выложишь подсветку для XCode на свою страницу? =)

Aprisobal
10.07.2009, 01:17
siril, стоит! Вот-вот...

siril
11.07.2009, 12:30
ок! спасибо! =)

Keeper
12.07.2009, 03:00
TPressR DB "Press R to repeat","."+#80,0 ;для ASKREPFORM

Ошибка Unexpected +#80 и дальше до конца строки, т.е. +#80,0. Если пишу:


TPressR DB "Press R to repeat",("."+#80),0 ;для ASKREPFORM

то все ОК

alone
17.07.2009, 19:01
Можно ли в сабже провернуть следующее? (Пример из ALASM - \0 тут первый параметр макроса.)
Если да, то как?

MACRO GETREALFRQ
CALL chn\0volumer ;не портит DE
chn\0frq=$+1
LD HL,0
chn\0glisson=$
CALL chn\0glisser ;не портит DE
LD A,H ;HL=frq
SUB E;_tmin+(_wmin*_div) ;минимальный период
JNC $+3
XOR A
ADD A,E;_tmin+(_wmin*_div)
LD (bch\0t),A ;realfrq
SUB _tmin ;CY=0
RRA
SRL A
LD C,A
LD A,(chn\0volH)
CP C
JC $+4
LD A,C
DEC A
SUB D;1
ADC A,D;1
LD (bch\0w1),A
;imp0=realfrq/div-imp1
SUB C
NEG
LD (bch\0w0),A
ENDM

Aprisobal
17.07.2009, 19:09
Можно ли в сабже провернуть следующее? (Пример из ALASM - \0 тут первый параметр макроса.)
Если да, то как?

MACRO GETREALFRQ
CALL chn\0volumer ;не портит DE
chn\0frq=$+1
LD HL,0
chn\0glisson=$
CALL chn\0glisser ;не портит DE
LD A,H ;HL=frq
SUB E;_tmin+(_wmin*_div) ;минимальный период
JNC $+3
XOR A
ADD A,E;_tmin+(_wmin*_div)
LD (bch\0t),A ;realfrq
SUB _tmin ;CY=0
RRA
SRL A
LD C,A
LD A,(chn\0volH)
CP C
JC $+4
LD A,C
DEC A
SUB D;1
ADC A,D;1
LD (bch\0w1),A
;imp0=realfrq/div-imp1
SUB C
NEG
LD (bch\0w0),A
ENDM С помощью макросов - нет. С помощью скрипта на LUA - да.

Kurles
18.07.2009, 19:25
TPressR DB "Press R to repeat","."+#80,0 ;для ASKREPFORM

Ошибка Unexpected +#80 и дальше до конца строки, т.е. +#80,0. Если пишу:


TPressR DB "Press R to repeat",("."+#80),0 ;для ASKREPFORM

то все ОКВообще-то двойные кавчки для символьных строк используются, для одиночных символов используй одинарные ('.'+#80) :)

Antipod
20.07.2009, 19:06
Можно ли в сабже провернуть следующее? (Пример из ALASM - \0 тут первый параметр макроса.)
Если да, то как?

MACRO GETREALFRQ
CALL chn\0volumer ;не портит DE
chn\0frq=$+1
LD HL,0
chn\0glisson=$
CALL chn\0glisser ;не портит DE
LD A,H ;HL=frq
SUB E;_tmin+(_wmin*_div) ;минимальный период
JNC $+3
XOR A
ADD A,E;_tmin+(_wmin*_div)
LD (bch\0t),A ;realfrq
SUB _tmin ;CY=0
RRA
SRL A
LD C,A
LD A,(chn\0volH)
CP C
JC $+4
LD A,C
DEC A
SUB D;1
ADC A,D;1
LD (bch\0w1),A
;imp0=realfrq/div-imp1
SUB C
NEG
LD (bch\0w0),A
ENDM

можно. Если переделать в такое:


macro GETREALFRQ param
CALL param_volumer ;не портит DE
param_frq=$+1
LD HL,0
param_glisson=$
CALL param_glisser ;не портит DE
LD A,H ;HL=frq
SUB E;_tmin+(_wmin*_div) ;минимальный период
JNC $+3
XOR A
ADD A,E;_tmin+(_wmin*_div)
LD (param_t),A ;realfrq
SUB _tmin ;CY=0
RRA
SRL A
LD C,A
LD A,(param_volH)
CP C
JC $+4
LD A,C
DEC A
SUB D;1
ADC A,D;1
LD (param_w1),A
;imp0=realfrq/div-imp1
SUB C
NEG
LD (param_w0),A
endm

вопрос встал тут:
http://zx.pk.ru/showpost.php?p=157080&postcount=260
добавлено в официальную версию тут:
http://zx.pk.ru/showpost.php?p=163066&postcount=283
имплементация где-то между этими двумя постами.

alone
20.07.2009, 19:44
С какими названиями метки сгенерируются в результате?

Antipod
20.07.2009, 19:56
С какими названиями метки сгенерируются в результате?

http://zx.pk.ru/showpost.php?p=159487&postcount=264

Corpsegrinder
24.07.2009, 10:53
Прошу прощения, ниасилил многабукф.

Планируется ли поддержка CVS или SVN?

breeze
24.07.2009, 12:03
Прошу прощения, ниасилил многабукф.

Планируется ли поддержка CVS или SVN?

эээ... а на сайт проекта сходить, не ?

http://sourceforge.net/projects/sjasmplus/develop

jerri
01.12.2009, 13:02
Вот этот файл не компилируется
сначала компилировался, а потом перестал

он выдает - ошибок нет и все...

jerri
01.12.2009, 13:11
во! ошибку нашел


dup 56
ldi
вот здесь я пропустил EDUP
ld sp,56
add hl,sp
ld sp,hl
dup 28
dec l
ld d,(hl)
dec l
ld e,(hl)
push de
edup

надо бы научить его чтобы он количество dup/edup считал

Aprisobal
01.12.2009, 18:49
jerri, ок, я не проверял, но он должен был отобразить ошибку, т.к. не закрыт один из dup'ов. Посмотрим.

M80
19.01.2010, 11:36
Пытаюсь перевести свой проект под sj. В целом asm нравится, но есть текущие вопросы:
- метка в equ должна быть с первой позиции в строке? Чего так строго?
- глобальные (external) метки через :: не?
- макро name - нельзя ли наоборот? Понимаю, что не смертельно, но на мой взляд более читаемо (приходится много перепахивать).
- хотелось бы IRP/IRPC для полного счастья - не вижу чем заменить?
Вообще, проект поддерживается или уже тогось?

Aprisobal
19.01.2010, 13:36
Поддерживается, естественно.

IRP - повторить код по списку аргументов?

Метка в EQU должна быть с первой позиции в строке - такое ограничение, еще с оригинального SJASM.

Глобальные метки(т.е. на которые не воздействуют директива MODULE и др.) начинаются с @.

M80
19.01.2010, 15:23
IRP-ENDM - повторять до конца списка аргументов,
IRPC-ENDM - до конца текстовой строки.
Блоки макроповторений присутствуют во всех "серьёзных" макроассемблерах, тут только REPT-EREPT:)
Иногда требуется выделять отдельные equ отступами для наглядности, свиду ничего ведь не мешает?
Ещё, не заметил условного оператора для выбора прохода транслятора, типа IF1? А выбор системы счисления, типа RADIX? Удобненько ведь:)

Aprisobal
19.01.2010, 15:51
IRP-ENDM - повторять до конца списка аргументов,
IRPC-ENDM - до конца текстовой строки.
Блоки макроповторений присутствуют во всех "серьёзных" макроассемблерах, тут только REPT-EREPT:)
Иногда требуется выделять отдельные equ отступами для наглядности, свиду ничего ведь не мешает?
Ещё, не заметил условного оператора для выбора прохода транслятора, типа IF1? А выбор системы счисления, типа RADIX? Удобненько ведь:) Этот компилятор создавался как альтернатива спектрумовским ассемблерам, где описанных вами возможностей нет.
IF1 можно пока сэмулировать с помощью скрипта на LUA... Возможно.

M80
19.01.2010, 16:22
OK. Если я правильно понял, дальнейших расширений (улучшений) не предвидится? Или же можно сюда выкладывать пожелания, а дальше - на Ваше усмотрение?
В IF1 пока нет необходимости, т.к. сообщения по DISPLAY выводятся на последнем проходе.

Aprisobal
19.01.2010, 17:43
Или же можно сюда выкладывать пожелания, а дальше - на Ваше усмотрение? Именно так ;))

Aprisobal
27.01.2010, 21:18
Во вложении MacOS X (Intel) версия по просьбе англоговорящих пользователей.

savelij
29.01.2010, 18:39
Во вложении MacOS X (Intel) версия по просьбе англоговорящих пользователей.

Вопрос: а можно получить версию для доса?

Aprisobal
29.01.2010, 21:04
Вопрос: а можно получить версию для доса? Для ДОС пока только версия 1.06, ссылка в первом посте http://zx.pk.ru/showthread.php?t=447

savelij
29.01.2010, 21:37
Для ДОС пока только версия 1.06, ссылка в первом посте http://zx.pk.ru/showthread.php?t=447

Про ту версию я в курсе. Хотелось бы последний верс для доса.

Sergey
24.02.2010, 22:26
Приветствую!
Нельзя ли версию для АмигаОС 3.x ?

Aprisobal
28.02.2010, 17:41
Приветствую!
Нельзя ли версию для АмигаОС 3.x ? Можно, но GCC для AmigaOS есть?

Sergey
01.03.2010, 14:50
Можно, но GCC для AmigaOS есть?

Чисто амижная версия гсс есть, но она, кажется старовата будет - 2.7, край - 2.95.
http://aminet.net/search?query=GCC

А есть ещё такой пакет - AmiDevCPP, позволяет один и тот же проект компилировать для AROS, MorphOS, AmigaOS 4.x и 3.x.
http://amidevcpp.amiga-world.de/aboutamidevcpp.php?HR_LANG=english.
Здесь вроде бы GCC 3.4.0

От меня что-то требуется, кроме ссылок на дистрибутивы?

Aprisobal
02.03.2010, 01:09
Чисто амижная версия гсс есть, но она, кажется старовата будет - 2.7, край - 2.95.
http://aminet.net/search?query=GCC

А есть ещё такой пакет - AmiDevCPP, позволяет один и тот же проект компилировать для AROS, MorphOS, AmigaOS 4.x и 3.x.
http://amidevcpp.amiga-world.de/aboutamidevcpp.php?HR_LANG=english.
Здесь вроде бы GCC 3.4.0

От меня что-то требуется, кроме ссылок на дистрибутивы? Пакет AmiDevCPP - то, что нужно!
Как понимаю необходимо было скомпилировать для m68k и amigaos? Амигу видел только через эмулятор.

Использовал компилятор m68k-amigaos-gcc.exe, проблем никаких не возникло, получил на выходе файл в аттачменте.

Makefile на основе версии для Linux для исходников из SVN:


GCC=m68k-amigaos-gcc.exe
CC=$(GCC)
GPP=m68k-amigaos-g++.exe
C++=$(GPP)

EXE=sjasmplus

CFLAGS=-Os -DLUA_USE_POSIX -DMAX_PATH=256 -Ilua5.1 -Itolua++
CXXFLAGS=$(CFLAGS)

LDFLAGS=

#sjasmplus object files
OBJS=sjasm/devices.o sjasm/directives.o sjasm/io_snapshots.o sjasm/io_trd.o sjasm/io_tape.o sjasm/lua_lpack.o sjasm/lua_sjasm.o \
sjasm/parser.o sjasm/reader.o sjasm/sjasm.o sjasm/sjio.o sjasm/support.o sjasm/tables.o sjasm/z80.o

#liblua objects
LUAOBJS= lua5.1/lapi.o lua5.1/lauxlib.o lua5.1/lbaselib.o lua5.1/lcode.o lua5.1/ldblib.o \
lua5.1/ldebug.o lua5.1/ldo.o lua5.1/ldump.o lua5.1/lfunc.o lua5.1/lgc.o lua5.1/linit.o \
lua5.1/liolib.o lua5.1/llex.o lua5.1/lmathlib.o lua5.1/lmem.o lua5.1/loadlib.o \
lua5.1/lobject.o lua5.1/lopcodes.o lua5.1/loslib.o lua5.1/lparser.o lua5.1/lstate.o \
lua5.1/lstring.o lua5.1/lstrlib.o lua5.1/ltable.o lua5.1/ltablib.o lua5.1/ltm.o \
lua5.1/lundump.o lua5.1/lvm.o lua5.1/lzio.o

# tolua objects
TOLUAOBJS=tolua++/tolua_event.o tolua++/tolua_is.o tolua++/tolua_map.o \
tolua++/tolua_push.o tolua++/tolua_to.o

all: $(LUAOBJS) $(TOLUAOBJS) $(OBJS)
$(GPP) -o $(EXE) $(LDFLAGS) $(CXXFLAGS) $(OBJS) $(LUAOBJS) $(TOLUAOBJS)

.c.o:
$(GCC) $(CFLAGS) -o $@ -c $<
.cpp.o:
$(GPP) $(CFLAGS) -o $@ -c $<

clean:
rm -vf *.o *.o lua5.1/*.o tolua++/*.o *~ $(EXE)

Sergey
02.03.2010, 08:42
Пакет AmiDevCPP - то, что нужно!
Как понимаю необходимо было скомпилировать для m68k и amigaos? Амигу видел только через эмулятор.

Использовал компилятор m68k-amigaos-gcc.exe, проблем никаких не возникло, получил на выходе файл в аттачменте.


Ввау! Круто, сейчас заценим.

Да нужно было AmigaOS m68k/

Кстати с помощью этого пакета можно ещё на 3 платформы SjASM распространить.

---------- Post added at 09:17 ---------- Previous post was at 08:45 ----------

---------- Post added at 09:22 ---------- Previous post was at 09:17 ----------

Всё работает: проверил на frost4k

Спасибо!

---------- Post added at 09:42 ---------- Previous post was at 09:22 ----------




У меня ещё один вопрос:

А может ли SjASM компилировать исходник в бинарный файл формата, определенного пользователем? Например, таблицы релокации, определённые заголовки и т.п.?
Ну и, соответственно, компилить перемещаемый код и составлять эти самые таблицы релокации?

Aprisobal
02.03.2010, 11:58
Нет, компилировать перемещаемый код он не умеет и соответственно выходной формат тоже менять нельзя, на выходе только то, что определено программой.

Насколько помню, в комплекте с C-компилятором z88dk http://www.z88dk.org/ был ассемблер, который умел компилировать перемещаемый код.

Sergey
02.03.2010, 16:18
Нет, компилировать перемещаемый код он не умеет и соответственно выходной формат тоже менять нельзя, на выходе только то, что определено программой.

Насколько помню, в комплекте с C-компилятором z88dk http://www.z88dk.org/ был ассемблер, который умел компилировать перемещаемый код.

А ты не можешь этому SjASM научить? Если это проблематично, то просто буду вручную делать, или отдельный компоновщик на ZX писать.

psb
02.03.2010, 17:37
если нужно просто сделать перемещаемый код - это можно сделать очень простой утилиткой (самому написать, на чем угодно). если что-то еще, то тогда хз.

Higgins
04.03.2010, 20:15
А ты не можешь этому SjASM научить? Если это проблематично, то просто буду вручную делать, или отдельный компоновщик на ZX писать.

Если не секрет, зачем понадобился перемещаемый код?

Sergey
12.03.2010, 07:44
Если не секрет, зачем понадобился перемещаемый код?

Для многозадачной ОС на Спектрум, которая, скорее всего, так и не будет мною написана.
А, может, и будет.

Sinus
12.03.2010, 16:10
патчит вложенные if в dup

savelij
21.03.2010, 11:09
Возник вопрос. Вот скомпилил я прогу. Как создать TRD образ знаю, как скомпиленное в него записать знаю. А вот как записать скомпиленое создав из него готовый Басик моноблок? Есть какое решение для этого? В доке что-то ничего не нашел или просто проглядел. Да и здесь в теме понаписано слищком много чтобы что-то быстро найти, если решение уже было. Создание SCL после компиляции сделал. Интересует создание в TRD образе.

breeze
21.03.2010, 11:46
как записать скомпиленое создав из него готовый Басик моноблок?

Начиная где-то отсюда (http://zx.pk.ru/showthread.php?p=159593&highlight=monoloader#post159593) или отсюда (http://zx.pk.ru/showthread.php?p=145757&highlight=monoloader#post145757). :rolleyes:

savelij
21.03.2010, 12:02
Начиная где-то отсюда (http://zx.pk.ru/showthread.php?p=159593&highlight=monoloader#post159593) или отсюда (http://zx.pk.ru/showthread.php?p=145757&highlight=monoloader#post145757). :rolleyes:

Ну почти то что нужно, но насколько понимаю все равно создается 2 файла? Интересно чтобы создавалось 1 файлом. Или попробовать допилить указанное.

Aprisobal
21.03.2010, 12:37
Возник вопрос. Вот скомпилил я прогу. Как создать TRD образ знаю, как скомпиленное в него записать знаю. А вот как записать скомпиленое создав из него готовый Басик моноблок? Есть какое решение для этого? В доке что-то ничего не нашел или просто проглядел. Да и здесь в теме понаписано слищком много чтобы что-то быстро найти, если решение уже было. Создание SCL после компиляции сделал. Интересует создание в TRD образе. Как предоставил по первой ссылке breeze, в комплекте с SjASMPlus для Windows имеется директория Examples, которая в примере для Worm255 содержит вариант для создания Basic-загрузчика.

Чтобы позже сделать из этого моноблок - загрузи в Real Commander и склей файлы. Или релизы выходят настолько часто, что необходима автоматическая склейка?

savelij
21.03.2010, 13:31
Как предоставил по первой ссылке breeze, в комплекте с SjASMPlus для Windows имеется директория Examples, которая в примере для Worm255 содержит вариант для создания Basic-загрузчика.

Чтобы позже сделать из этого моноблок - загрузи в Real Commander и склей файлы. Или релизы выходят настолько часто, что необходима автоматическая склейка?

Ну не то чтобы часто, но было бы крайне полезно. Хотя как вариант могу и SCL использовать. Его проще создать сразу и полностью. Но тоже несколько извратно :)

savelij
25.03.2010, 18:05
Ну я думаю достаточно хотя бы сделать посекторную запись например во вновь созданный трд образ. Или еще как вариант возможность создания бейсик файла в соответствии с его форматом и заданным размером в секторах для создания моноблока и посекторным доступом к образу. Ну или как то так.

psb
26.03.2010, 09:34
я думаю для счастья нужно только это:

1. запись блока данных в TAP в настраиваемом формате (можно сделать что заголовок формировать блоком DB, так будет гибче).
2. запись в TRD файла с произвольным заголовком (т.е. чтобы указывался тип файла, старт и длина (они могут отличаться от реальных!!!))

все это можно сделать даже внешней утилитой (нет такой? надо чтобы кто-нить сделал). и так же внешней утилитой склеивать файлы в TRD.

вопрос в том, надо ли все это реализовывать именно в ассемблере? я не уверен.

ZEK
10.04.2010, 15:04
Незнаю бага или фича.
Вот кусок


MACRO DBG stat
ld a,stat ; !!!!
out (0xFF),a
ENDM

MACRO TESTMEM addr
ld hl, addr
ld a, ((addr >> 12) & 0x0F) | (((addr >> 8)^0xFF) & 0xF0)
ld (hl), a
nop
ld a, (hl)
DBG a ; !!!!!
ENDM


вызывается так


TESTMEM 0x0000
TESTMEM 0x4000
TESTMEM 0x8000
TESTMEM 0xC000


результат выглядит так


58 0070 TESTMEM 0x0000
58 0070 21 00 00 > ld hl, addr
58 0073 3E F0 > ld a, ((addr >> 12) & 0x0F) | (((addr >> 8)^0xFF) & 0xF0)
58 0075 77 > ld (hl), a
58 0076 00 > nop
58 0077 7E > ld a, (hl)
58 0078 7F > ld a,stat ;!!!!
58 0079 D3 FF > out (0xFF),a


Как по мне можно имеет смысле викидывать 0078 7F то есть при развороте макроса DBG a, получилась инструкция ld a,a

Vitamin
10.04.2010, 15:12
Как по мне можно имеет смысле викидывать 0078 7F то есть при развороте макроса DBG a, получилась инструкция ld a,a
А что, компилятор должен на кофейной гуще гадать- случайно ли ты вставил лишние конструкции или специально?

ZEK
10.04.2010, 15:41
Я про этап разворота макроса...

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

psb
10.04.2010, 17:22
багофича будет тогда, когда асм самовольно станет что-то оптимизировать.. а если я специально сделал такой макрос?
так что все ок.

ZEK
10.04.2010, 17:51
Можно ли как нить изобразить что нить в таком духе ?


MACRO DBG stat
if stat != 'a'
ld a,stat ; !!!!
endif
out (0xFF),a
ENDM


то есть проверяю что передан параметром регистр a, например заюзав каким то боком lua

Aprisobal
11.04.2010, 18:34
Можно ли как нить изобразить что нить в таком духе ?


MACRO DBG stat
if stat != 'a'
ld a,stat ; !!!!
endif
out (0xFF),a
ENDM


то есть проверяю что передан параметром регистр a, например заюзав каким то боком lua Нет, так нельзя.
Думаю, что есть другой способ. Нужно подумать.

kotsoft
15.04.2010, 23:05
Граждане, подскажите как быть.
ассембер сий как я понимаю требует пробел перед инструкцией или метку,
а моя буржуйская прога TommyGun генерит defb-ы кучами без пробелов сначала
в результате компилятор страшно ругается и компилить отказывается.
как то бы с этим справится нельзя?

psb
16.04.2010, 07:50
сделать поиск и замену 'defb' на ' defb'

kotsoft
16.04.2010, 12:39
2psb: не не катит))) при каждой компиляции файлы ресурсов поиском-заменой проходить не вариант, тем более их несколько. я сейчас поставил версию 1.05, в ней все нормально, почему в 1.07 убрали это не понимаю(

Vitamin
16.04.2010, 12:44
Написать обертку для генератора, которая будет вызывать оригинальную тулзу и делать пост-процессинг.

kotsoft
16.04.2010, 12:54
2Vitamin: Балин, ну очевидные идеи подсказываете. но этож маразм, так можно и до собственного ассемблера дойти. А времени свободного совсем мало, хочется под спек что-нибудь сделать, а больше времени гробится на написание левых утилит. Может афтар всеж сделает возможность писать инструкции без меток и пробелов вначале, тем более это уже было реализовано в версии 1.05. почему убрали?

Aprisobal
16.04.2010, 13:19
2Vitamin: Балин, ну очевидные идеи подсказываете. но этож маразм, так можно и до собственного ассемблера дойти. А времени свободного совсем мало, хочется под спек что-нибудь сделать, а больше времени гробится на написание левых утилит. Может афтар всеж сделает возможность писать инструкции без меток и пробелов вначале, тем более это уже было реализовано в версии 1.05. почему убрали? Припоминаю, что "афтара" просили убрать возможность писать инструкции без меток, иначе по-другому нет логики, почему "афтар" убрал эту возможность.

Напишите автору TommyGun, он очень активно свою программу разрабатывает, поэтому и быстро исправит свой генератор.

kotsoft
16.04.2010, 15:01
2Aprisobal: Ха! как это нет логики? Во всех языках есть логика, а тут вдруг пропала? и в alasm даже помнится так можно было делать. ну ладна попробуем инглишь вспомнить и написать. А может можно какой патчик соорудить для тех кому это надо?
Второй вопрос:
Пытался сделать библиотеку, ну например собрать
в файлик interrupt.asm несколько процедур для старта - остановки - обработки im2 прерывания. ну в нем к примеру есть макрос im2start.
инклужу в основной блок
INCLUDE "lib/interrut.asm"
и потом делаю:
im2start vector,jump
в результате получаю Unrecognized instruction: im2start
это что получается макросы из инклуда он не видит? как тогда библотеки организовывать части которых компилируются по мере надобности?
Я конечно понимаю что годы программирования на ПЦ меня испортили, но все же)))
p.s. версия 1.05

---------- Post added at 15:01 ---------- Previous post was at 14:49 ----------

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

psb
16.04.2010, 15:22
Я конечно понимаю что годы программирования на ПЦ меня испортили

а больше времени гробится на написание левых утилит.
написание проги, вставляющей пробелы/табы (постпроцессинг), заняло бы максимум час времени (в прыжке). или годы сделали тебя ну ооочень ленивым?;))

kotsoft
16.04.2010, 15:32
2psb: ну это дело принципа, я принципиально противник методов "заплаток" и "костылей". опыт как раз показывает, что после навешивания всяких "переходников" для постпроцессинга и подобного проект в конце концов превращается в "черте что" где "черт ногу сломит".

Vitamin
16.04.2010, 15:35
Можно не писать, можно взять готовый, тот же sed, например. Проблема в том чтобы прикрутить его к существующему вызову.

kotsoft
16.04.2010, 15:37
Вобщем у меня такое пожелание к автору, вдруг прислушается...
Раз уж кому-то надо пробел в начале если нет метки, а кому-то не надо, предлагаю
ввести директиву компиляции включающую такой режим при необходимости. будет вообще шикарно
А так - ассемблеру цены нет, респект и уважуха

DimkaM
18.04.2010, 18:32
Вопросик №1

В чём отличие меток с двоеточием, от меток без двоеточия?

---------- Post added at 18:32 ---------- Previous post was at 18:24 ----------

И ещё вопрос №2 в догонку.
Код в аласме:


IFN ?METKA
LD A,B
ELSE
LD A,C
ENDIF

в SJASM'е должен быть таким:


IFNDEF METKA
LD A,B
ELSE
LD A,C
ENDIF


?

Вопрос №3
Почему не компилится:


MACRO LOADHL reg
LD reg,(HL)
INC HL
ENDM

LOADHL <E,D,C,B>

Aprisobal
20.04.2010, 00:12
В чём отличие меток с двоеточием, от меток без двоеточия? Нет отличий, только для совместимости с другими ассемблерами.

О макросе. Конструкция LD E,D,C,B,(HL) никак не скомпилируется, т.к. разворачивается ассемблером в:
LD E,D
LD C,B
LD (HL) ; <-- ошибка

DimkaM
20.04.2010, 15:50
Aprisobal, очень благодарен, твоей команде, за проделанную работу. Компилятором вполне доволен.

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

psb
20.04.2010, 16:22
Лучше повышать функционал, а не совместимость
вопрос очень даже философский... иногда совместимость играет решающую роль (пусть не так навороченно, но хотя бы такое есть).

savelij
28.04.2010, 18:54
Небольшой багрепорт. Столнулся со следующей проблемой. Переносил чужие сорцы из аласма с кучей DISP и ни одного ENT (DISPов штуки 4 как минимум). Ни одного сообщения об ошибке, компилер просто падает (вылетает в винду с сообщением об ошибке).

Antipod
04.05.2010, 19:06
написание проги, вставляющей пробелы/табы (постпроцессинг), заняло бы максимум час времени (в прыжке). или годы сделали тебя ну ооочень ленивым?;))

Perl. Пять минут. Не реклама.

psb
04.05.2010, 19:48
Perl. Пять минут.
ну это как бы того... инструментов-то миллион, можно хоть sed, хоть даже bash использовать, если есть линукс, в котором оно по дефолту стоит обычно (да и инструменты эти надо знать!)... а в винде? ставить ради этого перл? я бы не стал категорически.

ZEK
04.05.2010, 20:27
ставить ради этого перл?
в виндах есть wsh

psb
04.05.2010, 20:45
да в виндах есть UnxUtils, но не у каждого;) а какое-то средство разработки вроде как уже стояло...

kotsoft
04.05.2010, 22:05
2psb: php - одна короткая регулярка. ) Кстати я пытался связаться с автором томмигана - не отвечает, и томмиган уж год не обновлялся, наверное заброшена очередная хорошая идя(
Пока перебиваюсь старой версией sjasm-а, жду может всеж афтар сделает диррективу компиляции) Постпроцессинг навешивать - принципиально не хочу. Если уж и буду писать что-то дополнительное - так утилиту типа того же томмигана под себя.

Antipod
05.05.2010, 13:27
2psb: php - одна короткая регулярка. ) Кстати я пытался связаться с автором томмигана - не отвечает, и томмиган уж год не обновлялся, наверное заброшена очередная хорошая идя(
Пока перебиваюсь старой версией sjasm-а, жду может всеж афтар сделает диррективу компиляции) Постпроцессинг навешивать - принципиально не хочу. Если уж и буду писать что-то дополнительное - так утилиту типа того же томмигана под себя.
Perl. Еще короче. Хочаб по записи, сравни preg_replace() и s///; К тому же php это другая опера, как никак веб-приложение уже.
Принципы - это вообще хорошо. Но хуже делаешь только себе. Давно бы получил нужный результат и без напряга для окружающих % )

DimkaM
02.06.2010, 11:49
Aprisobal, вот бы SjASMPlus под PocketPC заиметь?! Сможете скомпилировать?
Консоль и Unreal на КПК установлены.
P.S.Очень много времени в общественном транспорте провожу, вот бы это время с пользой для спека проводить.

rajdee
02.06.2010, 11:53
а в винде? ставить ради этого перл? я бы не стал категорически.
Sed for Windows (http://gnuwin32.sourceforge.net/packages/sed.htm) :)

Aprisobal
02.06.2010, 13:29
Aprisobal, вот бы SjASMPlus под PocketPC заиметь?! Сможете скомпилировать?
Консоль и Unreal на КПК установлены.
P.S.Очень много времени в общественном транспорте провожу, вот бы это время с пользой для спека проводить. У меня была подобная идея и даже начал реализацию в какой-то момент, пока имел в наличии смартфон на Windows Mobile. Но, к сожалению, толковых средств дебаггинга у Microsoft не было, приложение хоть и компилировалось, но ужасно глючило на самом смартфоне. И на смартфонах нет консольных приложений, поэтому была дополнительная головная боль сделать редактор текста с возможностью компиляции.

На PocketPC возможен запуск консольных программ? Просто никогда с КПК на PocketPC толком не работал.

DimkaM
02.06.2010, 13:42
Aprisobal, PocketC# и PocketGCC только через консоль и работают.
Консолей очень много различных.
Может все таки попробуешь?

Aprisobal
02.06.2010, 13:58
DimkaM, PocketGCC это интересно. Попробуем.

psb
02.06.2010, 15:04
Sed for Windows
угу, знаю, юзаю иногда.

DimkaM
02.06.2010, 19:50
DimkaM, PocketGCC это интересно. Попробуем.

Я PocketGCC не не пробовал т.к. с Сями не дружу. А вот PocketC# очень удобно на КПК иметь, от скуки чё нить пописать.

А на счёт SjASMPlus подумайте плиз.

kotsoft
05.06.2010, 13:26
Граждане, вот еще вопросик. sjasm генерит при компиляции lst файл. это я как понимаю файл с названиями меток. А есть ли такой эмуль который может этот файл понимать, и в дебаггере эти метки именами показывать?

alone
05.06.2010, 13:27
Unreal Speccy

Aprisobal
05.06.2010, 18:16
Граждане, вот еще вопросик. sjasm генерит при компиляции lst файл. это я как понимаю файл с названиями меток. А есть ли такой эмуль который может этот файл понимать, и в дебаггере эти метки именами показывать? Для UnrealSpeccy свой формат. Смотрите директиву в документации: LABELSLIST

SfS
28.06.2010, 20:16
Собрал sjasmplus под линух.
вроде работает. НО!

При попытке использовать директиву MODULE - вылетает по segfault.
Кто такое видел, пробовал исправить?

Aprisobal
28.06.2010, 20:33
Собрал sjasmplus под линух.
вроде работает. НО!

При попытке использовать директиву MODULE - вылетает по segfault.
Кто такое видел, пробовал исправить? Какой версией gcc собирали и сколько-разрядная система?
Последний раз, тестируя под Линукс, прекрасно собрал на sjasmplus свои Numb Cars 2 и SquareMania из исходников, где часто используется директива MODULE, поэтому идей пока нету - но очевидно, что где-то ошибка в программе.

SfS
28.06.2010, 20:54
Какой версией gcc собирали и сколько-разрядная система?
Последний раз, тестируя под Линукс, прекрасно собрал на sjasmplus свои Numb Cars 2 и SquareMania из исходников, где часто используется директива MODULE, поэтому идей пока нету - но очевидно, что где-то ошибка в программе.

Программа - worm255 из примеров. Так что если ошибка - то не моя :-)
gcc версия 4.4.3
Пробовал и 64 и 32 разряда собирать. Результат один.

ЗЫ. Я этот асм впервые вижу, так что могу ньюансов не знать какихто.

Исходники: sjasmplus-src-1.07-rc7.zip

molodcov_alex
12.07.2010, 12:12
Не знаю, может уже где писалось, но у меня изкаропки SjAsmPlus под линухом не собирается. Проблема в неподключаемом stdlib.h. Решил так:

--- sjasm/sjdefs_.h 2008-04-01 17:41:58.000000000 +0400
+++ sjasm/sjdefs.h 2010-07-12 10:52:03.055463053 +0400
@@ -68,9 +68,7 @@
using std::flush;
using std::stack;
#include <stdio.h>
-#ifdef WIN32
#include <stdlib.h>
-#endif
#include <string.h>
#include <ctype.h>
#include <math.h>

А при сборке асмовского файла у меня тоже segfault... Насчет этого я покопаюсь...

---------- Post added at 12:12 ---------- Previous post was at 10:59 ----------

Нашел место вылета (sjasm/tables.cpp):

CStringsList::CStringsList(char* nstring, CStringsList* nnext) {
string = STRDUP(nstring);
//if (string == NULL) {
// Error("No enough memory!", 0, FATAL);
//}
next = nnext;
}
На strdup'е собственно и валится (nstring = NULL).

Сделал так:

CStringsList::CStringsList(char* nstring, CStringsList* nnext) {
if ( nstring )
string = STRDUP(nstring);
else
string = NULL;
//if (string == NULL) {
// Error("No enough memory!", 0, FATAL);
//}
next = nnext;
}
Вроде даже работает :D

Aprisobal
12.07.2010, 15:52
molodcov_alex, спасибо. Скоро, думаю, прибить проект на SourceForge.net вместе с сайтом и перенести все на GitHub.com, чтобы любой желающий мог сделать свою ветку и модернизировать и усовершенствовать компилятор самостоятельно.

DimkaM
12.07.2010, 19:41
А можно примерчик использования структур, а то чёта в инструкции не очень понял.
И желательно поподробней объяснить зачем эти структуры нужны.

savelij
19.08.2010, 18:21
Хотелось бы отписать о косяке компилятора и надеяться на быстрое исправление если возможно. Вот картинка. В логе все нормально, но декомпиленный бинарик уже отличается. Обвел красной рамкой.

savelij
19.08.2010, 18:22
Версия естественно последняя.

Aprisobal
19.08.2010, 18:55
Хотелось бы отписать о косяке компилятора и надеяться на быстрое исправление если возможно. Вот картинка. В логе все нормально, но декомпиленный бинарик уже отличается. Обвел красной рамкой. Хорошо бы просто скриншот дебаггера любого эмулятора, а не IDA. И побольше листинг. И кстати, в Unreal можно смотреть дебаггер с метками, если использовать директиву LABELSLIST.

savelij
19.08.2010, 19:11
На картинке вижу серьезные отличия в адресах листинга и декомпиляции в IDA. Если правильно все понял, то прошу показать куски кода, где адреса совпадают и имеется ошибка.

И есть уверенность, что IDA не ошибается при декомпилировании? Хорошо бы просто скриншот дебаггера любого эмулятора. И кстати, в Unreal можно смотреть дебаггер с листингом меток, если использовать директиву LABELSLIST.

Отличия в адресах это из-за того, что идой адреса не подгонял. Там код компилится по DISP. А привел именно совпадающие куски. То есть в лог записано одно, в бинарике уже другое. WINHEXом бинарик просмотрел. Ида эту разницу просто декомпилировала. LABELLISIT увы не осваивал, но в унрыле тот же бинарик. Получился глюк в НЕ ГЛЮКе.

---------- Post added at 19:09 ---------- Previous post was at 19:02 ----------

Вот кусок сорца:

OK_WORK CALL CSHIGHG:LD A,#77

OUTSTAT OUT (ZXDATWR),A

;ОЖИДАНИЕ КОГДА СПЕК ЗАБЕРЕТ БАЙТ ДАННЫХ
WDN IN A,(ZXSTAT):RLA:JR C,WDN:RET

;ОЖИДАНИЕ КОГДА СПЕК ДАСТ БАЙТ ДАННЫХ
WDY IN A,(ZXSTAT):RLA:JR NC,WDY:RET

GSDDRVE

ENT

---------- Post added at 19:11 ---------- Previous post was at 19:09 ----------

Компиляция по DISP для адреса #1D00, длина кода #1C4. Сам код попадает по расположению как ида декомпильнула на картинке.

Aprisobal
19.08.2010, 19:27
Отличия в адресах это из-за того, что идой адреса не подгонял. Там код компилится по DISP. А привел именно совпадающие куски. То есть в лог записано одно, в бинарике уже другое. Да да, после отправки первой версии сообщения, пересмотрел еще раз картинку и понял.

Скомпилировал приведенный код, декомпилировал в IDA, получил то, что нужно.

Было бы здорово получить в личную почту полный исходный код программы, по-другому ошибку не исправлю. Приватность гарантирую.

savelij
19.08.2010, 19:28
Вот картинко с Анрыла, правда без меток.

savelij
19.08.2010, 19:30
Ты в ICQ бываешь?

Aprisobal
19.08.2010, 19:32
Ты в ICQ бываешь? Нет, только в Skype.

ICQ из профиля уберу.

savelij
19.08.2010, 19:36
Нет, только в Skype.

ICQ из профиля уберу.

Жаль. Ну кинь адрес электропочты, вышлю.

savelij
19.08.2010, 22:58
В общем я в полном трауре. компиляя один и тот же код получил следующее. Версии с RC1 по RC4 по все видимости падают ибо скомпиленое вместо 12кило кода с хвостиком получаю 8 кило ровно с теми же кривыми байтиками. Версия RC5 - "прогармма не может быть выполнена". С RC6 и RC7 одно и тоже выдает. Версия 1.06 вообще с другими ключами пашет и перепахивать свои сорцы придется под другой асм. Доверия уж извините уже нету:(:mad:

---------- Post added at 22:58 ---------- Previous post was at 22:34 ----------

Может вот такое поможет, а может и нет. Изменил местоположение кода. Ничего не изменилось. Попробовал JR не на метку сделать, а как $-число. Абсолютно то же самое.

Aprisobal
19.08.2010, 23:09
Ошибка есть, устраним.

Временно можно использовать директиву OUTPUT "main.rom" (вставлять в начале программы, подробнее см. документацию), вместо SAVEBIN "main.rom" и код будет таким, как в листинге. См. скриншот.

savelij
21.08.2010, 23:37
Ошибка есть, устраним.

Временно можно использовать директиву OUTPUT "main.rom" (вставлять в начале программы, подробнее см. документацию), вместо SAVEBIN "main.rom" и код будет таким, как в листинге. См. скриншот.

Успехи какие-нибудь есть?

Директива OUTPUT не есть гуд. Я могу ее использовать, но при сложной сборке после каждого ORG надо вбивать FPOS. Был бы 1-2 еще куда ни шло. А при счете хотя бы в десяток уже довольно тягомотно, особенно при куче файлов.

siril
15.09.2010, 10:41
В http://sjasmplus.sourceforge.net/recommended-text-editors/ Xcode так и не добавил -_-

siril
15.09.2010, 20:59
Такой вопрос, хочу собрать sjasm под MacOSX, но http://sourceforge.net/projects/sjasmplus/files/sjasmplus%20freebsd/ - файл недоступен, а как собирать линуксовый (http://sourceforge.net/projects/sjasmplus/files/sjasmplus%20src/) я не понял.

(вообще в *nix - не очень хорошо разбираюсь =)

Научите как собрать, а? =)

P.S. (помню раньше как-то просто собрал -_- а сейчас MacOSX 10.6.4 - x64 — что-то с налёту не получилось)

breeze
15.09.2010, 21:05
эээ… ну для этих целей как минимум нужен gcc и make

скачиваешь сорцы, распаковываешь, запускаешь в консоллле :)

%make
%make install

как-то так…

siril
15.09.2010, 21:08
всё. протупил =) на самом деле всё после make собралось.

(на make install оно сругнулось:

oisee:sjasmplus-src-1 oisee$ make install
make: *** No rule to make target `install'. Stop.)

просто я пошёл откомпилированный файл sjasm в ./bin искать, а он в ./ и называется sjasmplus =)

thx, breeze! =)

breeze
16.09.2010, 01:16
thx, breeze! =)

ave zx! :rolleyes:

DimkaM
19.09.2010, 12:42
а научите под WM(WindowsMobile) собрать, плиииззз.

breeze
19.09.2010, 12:47
а научите под WM(WindowsMobile) собрать, плиииззз.

ну насколько я помню тут два варианта ;) либо ты самому gcc скажешь что ты хочешь собрать версию под PocketPC, либо ставишь на сам покет консоль, gcc и собираешь прямо на нём ;) правда подозреваю, что придётся ещё ставить lua и возможно другие депенденси ;)

DimkaM
20.09.2010, 08:49
gcc совсем не понимаю, консоль стоит.
Буду изучать.
Тут нашёл на перле компилятор, и даже на кпк запустился, но блин синтаксис там непривычный и инкбинов с инклудами нету.

pulsar
20.09.2010, 22:17
по просьбам трудящихся (http://speccy-live.untergrund.net/?p=3425), хотелось бы тоже получить небольшую помощь в докручивании вопроса!

Aprisobal
21.09.2010, 02:17
Успехи какие-нибудь есть? В процессе.


по просьбам трудящихся (http://speccy-live.untergrund.net/?p=3425), хотелось бы тоже получить небольшую помощь в докручивании вопроса! Зачем wine? Версия для MacOS X: http://zx.pk.ru/showpost.php?p=252508&postcount=382

pulsar
21.09.2010, 07:02
Версия для MacOS X: http://zx.pk.ru/showpost.php?p=252508&postcount=382
ого, rc8 нативная здорово! не заметил... спасибо, потестирую при случае.

---------- Post added at 09:02 ---------- Previous post was at 07:36 ----------


Во вложении MacOS X (Intel) версия по просьбе англоговорящих пользователей.
кто кстати? может стоит попробовать связаться - обменяться наработками, быть может дальше меня продвинулись...

pulsar
22.09.2010, 19:47
у меня, кажется, получилось прикрутить sjasm к xcode (http://speccy-live.untergrund.net/?p=3425&cpage=1#comment-736). aprisobal, plz отпишись по заключительной части.

DimkaM
23.09.2010, 11:48
Такс, под WM никто собирать не хочет, а сам я не умею.
Вот, по этому поводу я приобрёл Андроид-планшетник.
Кто самый смелый, в смысле под него собрать?

molodcov_alex
23.09.2010, 12:11
Такс, под WM никто собирать не хочет, а сам я не умею.
Собирается то dll'ка, которую надо к чему-нибудь прикручивать. (И то есть всякие неучтенные гадости - в WM путь разделяется '/', а не '\' как в винде; абсолютно отсутствует такое понятие как текущий каталог).
У меня есть недосборка какой-то старой версии с недогуем, но там все очень не очень работает (особенно радуютЪ exit() в sjasm которые заодно и мою прогу прикрывают).

DimkaM
23.09.2010, 12:33
Собирается то dll'ка, которую надо к чему-нибудь прикручивать. (И то есть всякие неучтенные гадости - в WM путь разделяется '/', а не '\' как в винде; абсолютно отсутствует такое понятие как текущий каталог).
У меня есть недосборка какой-то старой версии с недогуем, но там все очень не очень работает (особенно радуютЪ exit() в sjasm которые заодно и мою прогу прикрывают).

А чё .EXE никак не собирается?!
С путями фиг сними, на крайний случай в корень всё свалю(кстати консоль стоит).
Дайте хоть что нибудь.
И про Андроид тоже актуально.

П.С. У перла тоже слеш в другую сторону, но компилятор то работает на WM через консоль(компилятор дибильный, поэтому нужен Сясм)

molodcov_alex
23.09.2010, 12:46
А чё .EXE никак не собирается?!
То что в комплекте - настроено на dll. exe даже не пытался делать (да и вообще не думаю что в WM дико удобно в консоли работать).
Вечером постараюсь выкопать, если не совсем обдолбанный домой приеду.

П.С. У перла тоже слеш в другую сторону
Тут проблема в том что WM != Windows - сясм ломится по \over\9000\zx (или даже букву диска пытается подставить) и терпит фейл.


И про Андроид тоже актуально.
Лично у меня пока желания качать и разбираться с SDK андройда нету (да и негде его "разворачивать")

upd. На одном компе нифига не нашел (по идее там должна была валяться копия карточки с кпк), буду искать на другом, когда до него расчистится проход (ремонт аднака).
Может быть в вск. попробую exe'шник сделать.

siril
05.10.2010, 20:07
вот тестовый beta-bundle для TexMate (mac) и E text editor (win).

(могут быть неадекватности).

pulsar
17.10.2010, 23:49
Mission complete (speccy-live) (http://speccy-live.untergrund.net/?p=3543) - SjASM 1.07 RC7 прикручен к Xcode.

IgorU
28.10.2010, 15:42
Вопрос.

Структура кода следущая
ORG #EA60
... some code ...
ret
ORG #8000
some data

Так вот данные идут сразу после кода, а не по указанному адресу #8000. Что не так делаю?

siril
28.10.2010, 15:50
Вопрос.

Структура кода следущая
ORG #EA60
... some code ...
ret
ORG #8000
some data

Так вот данные идут сразу после кода, а не по указанному адресу #8000. Что не так делаю?

вероятно вместо some data стоит incbin "filename", а не DB "somedata"? об этой ситуации речь?

IgorU
28.10.2010, 15:55
DB

ORG #EA60
START
LD BC, DATA
LD DE, VAL
..............
RET
VAL EQU #C000
ORG #8002
DATA DB #0F, .....

Aprisobal
28.10.2010, 16:05
См. директиву DEVICE в документации, а также примеры, которые идут в составе. Если в примерах ничего с DEVICE не будет - пишите, что-нибудь быстро составлю.

IgorU
28.10.2010, 16:50
См. директиву DEVICE в документации, а также примеры, которые идут в составе. Если в примерах ничего с DEVICE не будет - пишите, что-нибудь быстро составлю.

К сожалению ничего о DEVICE не нашел, ни в примерах ни в документе по sjasm.

Качнул более полную доку. Читаю о директиве DEVICE/

---------- Post added at 14:50 ---------- Previous post was at 14:12 ----------

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

?

Aprisobal
28.10.2010, 23:34
Осталось не понятно как указать в коде адрес по которому следует размещать данные. Где текущий указатель, там и будут данные - в вашем последнем примере по адресу #8002.

IgorU
29.10.2010, 13:28
Вот мой пример:



ORG #EA60
START LD BC,DATA
RET

ORG #8002
DATA DB #0F,#8F,#0E,#8B


В BC адрес записывается #8002, но самих данных по этому адресу нет, они находятся сразу за командой ret.

Версия компилятора RC7.

Компилирую: sjasmplus.exe Symbol.asm

breeze
29.10.2010, 13:38
Вот мой пример:



ORG #EA60
START LD BC,DATA
RET

ORG #8002
DATA DB #0F,#8F,#0E,#8B


вы меня извините конечно, а штаны вы тоже через голову одеваете ? :eek:

может всёт-таки стоит всё последовательно располагать ? как оно собственно и должно лежать в памяти ? :rolleyes:



ORG #8002
DATA DB #0F,#8F,#0E,#8B

ORG #EA60
START LD BC,DATA
RET

Aprisobal
29.10.2010, 13:51
Вот мой пример:



ORG #EA60
START LD BC,DATA
RET

ORG #8002
DATA DB #0F,#8F,#0E,#8B


В BC адрес записывается #8002, но самих данных по этому адресу нет, они находятся сразу за командой ret.

Версия компилятора RC7.

Компилирую: sjasmplus.exe Symbol.asm См.


DEVICE ZXSPECTRUM128

ORG #EA60
START LD BC,DATA
RET

ORG #8002
DATA DB #0F,#8F,#0E,#8B

SAVESNA "Symbol.sna", START
Компилируем sjasmplus.exe Symbol.asm, открываем Symbol.sna в эмуляторе и смотрим в дебаггере, что все на своих местах. Также см. в документации и в примерах SAVEBIN, SAVETRD и т.д.

IgorU
29.10.2010, 14:12
Спасибо, так работает.

pulsar
29.10.2010, 18:32
Aprisobal, по поводу sjasm&xcode ответа не ждать?

Antipod
03.11.2010, 16:15
вы меня извините конечно, а штаны вы тоже через голову одеваете ? :eek:

может всёт-таки стоит всё последовательно располагать ? как оно собственно и должно лежать в памяти ? :rolleyes:



ORG #8002
DATA DB #0F,#8F,#0E,#8B

ORG #EA60
START LD BC,DATA
RET


ууу, батенька, как все запущено... :v2_dizzy_biggrin2:
Вы меня извините тоже, но порядок значения не имеет.

breeze
03.11.2010, 17:08
ууу, батенька, как все запущено... :v2_dizzy_biggrin2:
Вы меня извините тоже, но порядок значения не имеет.

http://habreffect.ru/files/9ac/5de2d5e64/woow.jpg

вааааааааааааау :eek: правда шоле!? :sleep:

Antipod
03.11.2010, 21:46
вааааааааааааау :eek: правда шоле!? :sleep:

DEVICE ZXSPECTRUM128

ORG #EA60
START LD BC,DATA
RET

ORG #8002
DATA DB #0F,#8F,#0E,#8B

SAVESNA "Symbol.sna", START

DEVICE ZXSPECTRUM128

ORG #8002
DATA DB #0F,#8F,#0E,#8B

ORG #EA60
START LD BC,DATA
RET

SAVESNA "Symbol.sna", START
выхлоп одинаковый. Или где?

breeze
03.11.2010, 22:28
выхлоп одинаковый. Или где?

Очень интересно! продолжайте… :rolleyes:

http://pit.dirty.ru/dirty/1/2010/09/08/28047-214048-ed657fbabdfbbc36eaa465bea8470a11.jpg

Sinus
03.11.2010, 23:42
извиняюсь, конечно, что вмешиваюсь, но
breeze, или это толстый троллинг, или ты неправ.

breeze
04.11.2010, 01:16
извиняюсь, конечно, что вмешиваюсь,но
breeze, или это толстый троллинг, или ты неправ.

сэр! :eek: как вы могли такое подумать :) меня гуру просвещает как надо писать программы, я просто устраиваюсь поудобнее, дабы узнать суть бытия и постичь дзен :sleep:

pulsar
07.11.2010, 16:18
как сделать чтобы при записи:


SAVETRD "test.trd","test.B",#5D3B,211

sjasm v1.07 RC7 (build 02-04-2008)
выгружал из памяти в trd'шник сектор (256 байт), а не 211 байт! но при этом в старт и длину basic файла записывалось число 211? нужно для правильного монолоадера, а не как в документации к sjasm'у в примерах worm255\monoloader.txt по aprisobal - без записи параметров автостарта. быть может кто-то знает как это сделать, например с помощью lua-скрипта?

в конечном итоге вообще не понимаю какой смысл в том, что при записи:


SAVETRD "test.trd","test.B",#5D3B,211

выгружается файл длиной не кратный сектору ведь на дискете один фиг окажется файл длиной кратной сектору, с дополнением нулями последнего сектора, тогда как в том же basic файле можно было не только указать параметры автостарта, но и например передать пару приветов не лазя в дисковый доктор.

видел, возможное, но далеко не идеальное решение от boo_boo (http://zx.pk.ru/showthread.php?p=159832#post159832). да, кстати в svn (http://sjasmplus.svn.sourceforge.net/viewvc/sjasmplus/) какая версия sjasm'а лежит? не удалось ее собрать - сборка (make) валится с ошибкой:

Undefined symbols:
"SaveTAP_ZX(char*, unsigned short)", referenced from:
dirSAVETAP() in directives.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [all] Error 1

что не так делаю?

Aprisobal
07.11.2010, 16:53
да, кстати в svn (http://sjasmplus.svn.sourceforge.net/viewvc/sjasmplus/) какая версия sjasm'а лежит? не удалось ее собрать - сборка (make) валится с ошибкой:

что не так делаю? Думаю, что в Makefile после sjasm/io_trd.o нужно добавить sjasm/io_tape.o

pulsar
07.11.2010, 17:31
Aprisobal, ага собрался! это та самая сборка rc8? вроде бы даже билд от того же числа... сейчас переделаю слегка по собственному рецепту (http://speccy-live.untergrund.net/?p=3425), потестирую работоспособность и отпишу.

вопрос про сохранение trdшников остается.

---------- Post added at 19:18 ---------- Previous post was at 19:10 ----------

Aprisobal, кстати в тех ли местах я исправлял error message? или можно было только в одном каком-то месте исправить или что-то еще не учел... давно жду ответа на этот вопрос, хотя сколько пользуюсь модифицированной версией sjasm'а - столько он себя нормально ведет.

---------- Post added at 19:29 ---------- Previous post was at 19:18 ----------

первые тесты показали, что модифицированный RC8 работает, ошибки разбираются, tap компилит, правда из 2х тестовых тапок нормально работает 1 (второй тапок несколько отличается от sna и trd версий), но здесь быть может сам что-то наглючил (перепроверю еще) - тестовый исходник был.

---------- Post added at 19:31 ---------- Previous post was at 19:29 ----------

Aprisobal, в svn'е (http://sjasmplus.svn.sourceforge.net/viewvc/sjasmplus/) может makefile поправишь? вдруг кому пригодится еще...

moroz1999
24.11.2010, 01:16
Ковыряюсь в кое-каких исходниках, вот пара вопросов:
LD B,metka[ - каков аналог этой записи в SJASM? в B должен оказаться старший байт адреса, на который указывает metka.
.2 - что означает такая запись на месте метки? каков аналог в SJASM?

Sinus
24.11.2010, 02:38
LD B,metka[


LD B,metka / 256



.2


спецефично для Storm. Означает DUP 2

DimkaM
24.11.2010, 10:09
LD B,metka / 256

Может всётаки high и low использовать?
ld b, high metka