Просмотр полной версии : SjASMPlus Z80 кросс ассемблер
Страницы :
1
[
2]
3
4
5
6
7
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.
ld a, (1+2)
Результате дает #3e, 3, 0
Зачем?
O_o
А что, 16-разрядные адреса уже отменили? Только 8-разрядные используются?
До кучи вопрос - а округлять как? Скажем мне надо из #0124 получить #02. Ну или целочисленно поделить на 256.
Как обычно вроде...
(addr + 255) shr 8
ld a, (1+2)
Результате дает #3e, 3, 0
Зачем?
а почему не #3A ???
Результате дает #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 сдвига? Не меняется старший бит или что? Я этого не заметил. Назовите значение, на котором эти операторы будут работать по-разному.
Назовите значение, на котором эти операторы будут работать по-разному.
Везде, где установлен старший бит.
Например:
0x8000 - это 32768 для беззнаков и -32768 для знаковых
Делаем сдвиг к младшим разрядам (делим на 2) двумя способами:
беззнаково- получаем 0x4000- 16384 в обоих нотациях, что неверно для знаковых
знаково- получаем 0xc000- 49152 для беззнака, что неправильно и -16384 для знаковых, что правильно :)
беззнаково- получаем 0x4000- 16384 в обоих нотациях, что неверно для знаковых
знаково- получаем 0xc000- 49152 для беззнака, что неправильно и -16384 для знаковых, что правильно
Именно на этом значении я и проверял, результаты одинаковы, что меня и удивило
Может знаковость относится к 32-битным числам, в которых SjASMPlus считает?
Shadow Maker
28.09.2008, 02:00
Ладно, ага. Спасибо. У меня тупилово-режим включился.
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, пока ничего дельного не придумал.
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 сохранить басик с автостартом? А то монолоадер без автостарта - это не гут.
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
прошу протестировать бинарник на совместимость с оригинальной версией и сообщить о багах. Спасибо заранее.
2Aprisobal
пофиксил некоторые баги, файлы обновил. Теперь работает как мне надо.
Shadow Maker
18.10.2008, 11:49
Мож мне кто-то ответит на мой вопрос?
Мож мне кто-то ответит на мой вопрос?
если мне не изменяет память, автозагрузка зависит от адреса в описателе файла, вот кусок от 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
автозагрузка зависит от адреса в описателе файла
не, автостарт васика сидит в конце васик-файла, #80,#AA,strL,strH
(эти 4 байта не должны входить в общую длину васик-программы в каталоге)
не, автостарт васика сидит в конце васик-файла, #80,#AA,strL,strH
(эти 4 байта не должны входить в общую длину васик-программы в каталоге)
ыыы :eek: как же у меня тогда сие чудо работает ;)
ыыы :eek: как же у меня тогда сие чудо работает ;) каким-то неизвестным науке способом :)
тока что проверил: отассемблировал твой сорс, сделал LIST -- автостарта нету..
каким-то неизвестным науке способом :)
тока что проверил: отассемблировал твой сорс, сделал LIST -- автостарта нету..
o_O ну ты знаешь я тоже только что компилировал прежде чем что-то написать, вот только разница в том ;) что у меня сорцы то полные а не часть, но думаю скорее всего у меня удачное стечение байтов :)
Shadow Maker
18.10.2008, 23:47
У меня тоже не работает. У тебя работает скорее всего потому, что бут у тебя запускает басики не "LOAD "name"", а "RUN "name""
boo_boo прав, именно в этом и проблема - вручную я могу проставить автостарт, а средствами сьясма - хрен. В итоге занимаюсь извращениями в стиле - сначала отассемблировали и записали на диск с автостартом в теле программы, потом всё удалили, убрали автостарт из тела и опять записали. Поскольку сьясм трдшки не чистит, получается как бы с автостартом.
У меня тоже не работает. У тебя работает скорее всего потому, что бут у тебя запускает басики не "LOAD "name"", а "RUN "name"
ммм... :o вообще-то у меня записывается "boot.b" на чисто созданную TRD'ку, затем она подсовывается емулю и всё отлично автостартует :eek:
Shadow Maker
19.10.2008, 02:59
Ну короче мировые флуктуации космоса мы не учитываем. Вопрос открыт.
Вопрос открыт. если тебя не ломает билдить через мейкфайл или любой другой скрипт, можно заюзать внешние тулзы для работы с трд-образом. по принципу -- сделать сжасмом бейсик с инфой об автостарте, а потом подправить длину в каталоге, чтобы автостарт стал автостартом..
если тебя не ломает...
что-то не совсем до конца понимаю, а не проще ли доработать sjasm что-бы он корректно сохранял басики ?
не проще ли доработать sjasm что-бы он корректно сохранял басики ? билд-скрипт проще написать, чем код чужого немаленького проекта править. другое дело, что доработка сжасма общественно-полезное дело, а написание билд-скрипта нет..
(мне, правда, не очень понятно, за что народ любит совмещать билдинг и кодинг в одном ассемблерном файле, но любит, эт факт.)
мне, правда, не очень понятно, за что народ любит совмещать билдинг и кодинг в одном ассемблерном файле, но любит, эт факт.
ну тут вообще-то речь идёт именно при удобствах написания монолоадера для проекта, а это согласись проще и удобнее сделать сразу в коде, а затем записать последовательно все файлы на диск.
а это согласись проще и удобнее сделать сразу в коде, а затем записать последовательно все файлы на дис
дело вкуса, по мне удобнее нагенерить бинарников, а потом запилить их на трдшку как и куда надо, заюзав для этого Makefile :)
приделал к сжасму версии 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 репозиторий - там всегда будет самая свежая версия.
Ок, спасибо, скоро точно обещаюсь выпустить новую версию со всеми патчами. А их накопилось много!
задокументи главное нормально и большим количеством маленьких примеров, что бы не копаться
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.
объясните дятилу! как сохранить код 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 не понимаю, раскомментируйте (убираем ";") и все будет работать.
: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 и наблюдаем, что код на месте.
Удачи!
по команде 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
А в снапшот компилируется?
Shadow Maker, да в 48 работает, код есть, в 128 вылетает сразу в 48
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 - грузит файло по адресу по умолчанию ( по тому, что указан в каталоге ).
указывал явно и адрес те же яй..ца
Добавлено через 1 час 34 минуты
вообще на диск пишется с 32768. пошарился по диску в дебагере
и ручками и поиском, чета не нашел кода.
попробую сегодя с монолоадером в RC8 tap'ы можно писать ужо?
указывал явно и адрес те же яй..ца
Добавлено через 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
Какими версиями-то пользуетесь?
Какими версиями-то пользуетесь?
последний пререлиз( размер эхешника 1646592 байта ) и тот билд с моими изменениями... результат один и тот же. сорцы с форума ( пост #287 ) .
пробывал на другой машине -результат тот же RC8 и RC7, если у остальных работает :v2_jawdr:. Вобщим буду пока юзать tap, оно работает отличненько:v2_thumb:
Добавлено через 10 минут
Antipod, в #287, закоменчен ORG #8000
потому и стартовый нулевой. а басик грузит c CODE 32768? код есть на месте аль нет?
Добавлено через 10 минут
Antipod, в #287, закоменчен ORG #8000
потому и стартовый нулевой.
провтыкал, исправил. Все пахает намана. Приаттач трд-образ, если нетрудно.
Aprisobal
13.11.2008, 00:55
последний пререлиз( размер эхешника 1646592 байта ) и тот билд с моими изменениями... результат один и тот же. сорцы с форума ( пост #287 ) .Ок, понятно, посмотрю.
Ок, понятно, посмотрю.да там, в принципе, смотреть не на что, птому как с этим wa32.c работает так же как у тебя.
ps: ждем trd-образ от totema...
сопственно дицк
?
этот диск пуст.
Грузил строкой с доса ( load"wa32"code ), с обох бейсиков ( randomize usr 15619:rem:load"wa32"code ). Нормально все загрузилось.
Файл соответствует исходнику. К sjasmу претензий нет:).
Убедись, что именно этот образ подключаешь к эмулю;)
вобщем то на то и грешу
попробую в другом эмуле
:v2_eek::v2_scare: все а я сошла с ума какая досада.....:v2_devil:
странная проблема... уже не один проект сделал в сиджасме. после загрузки файла из трд-шника все ОК!
:v2_eek::v2_scare: все а я сошла с ума какая досада.....:v2_devil:Приаттач прошивки, которые юзаешь в анреале, если нетрудно:)
:v2_biggr: прошивки стандартные с ви трдоса. залил чистый образ системы на старенкий hp
PIII все работает. :v2_conf2:
:v2_biggr: прошивки стандартные с ви трдоса. залил чистый образ системы на старенкий hp
PIII все работает. :v2_conf2:
мистика:v2_conf2:
ради интереса, плз, поставь такой бряк поинт в анреале[в отладчике нажми alt+c и введи в левое крайнее поле]:
(PC==2FF0)
потом загрузи файло, вывалишься в дебаггер, кинь сюда скриншот.
гыыыы вылетел винт:v2_scare:
просто посыпался я такого ище не видал :v2_mad:
гыыыы вылетел винт:v2_scare:
просто посыпался я такого ище не видал :v2_mad: соболезную... я тож такого еще не видел:v2_huh:
Aprisobal
04.12.2008, 12:13
Версия, которую выложил выше как приложенный файл - у всех все ок? Сделал бы релиз Stable и перешел по версии выше.
я не рискнул пересобирать нашу последнюю дему... и рискну уже только после релиза =( Апри - респект!!!
я не рискнул пересобирать нашу последнюю дему... и рискну уже только после релиза =( Апри - респект!!! сорри за оффтоп... а де риск? суть как раз в том, что на выходе должно быть тоже самое относительно предыдущей версии (Тупо прогнать компаратором )...
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 версия. Ориентировочно в начале февраля.
В разделе 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
*/
слегка оффтоп... Недавно открыл для себя такое чудо (сабж), немного, правда, покоробило, что явно нигде не написано что за *.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 (на всякий случай). Терь жить мона.:)
Еще анреалу плохеет (тупо с исключением валится) от слишком длинных меток.
[:\/\/\/\/\/\/\:]
ну вообще-то вы бы батенька уточняли версию анрила, ибо в старых, такая проблема присутствовала, в последних версиях такое давно пофикшено!
[:\/\/\/\/\/\/\:]
ну вообще-то вы бы батенька уточняли версию анрила, ибо в старых, такая проблема присутствовала, в последних версиях такое давно пофикшено!
упс, сорри). 0.35.2
приделал к сжасму версии 1.07 RC7 запись в трд с автостартом...
эээ.... судя по скриншоту, в RC8 сия фишка должна присутсвовать, однако если написать LOAD "boot" никакого автостарта нет :mad:
гм... кто-нибудь прояснит ситуацию с записью автостартующих басиков в sjasm ?
гы гы :) пока писал пост разобрался :) номер строки всё-таки должен быть 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
Вот так я записываю и у меня всё автостартует.
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.
Сижу, привожу код компилятора в порядок...
Думаю, что нужно выпустить две версии 1.07 Stable и 1.08 RC1. Последняя будет включать в себя код Kurles'a.
ждём с нетерпением ;)
Обнаружено в версии 1.07 RC7:
- savebin с нулевой длиной записывает файл примерно 40кб размером
- если есть метка и на следующей строке equ, то не понимает.
Обнаружено в версии 1.07 RC7:
- savebin с нулевой длиной записывает файл примерно 40кб размером
в сорцах есть такое:
if (length <= 0) {
length = 0x10000 - start;
}
видимо, как результат:
savebin "file.bin", addr, 0
и
savebin "file.bin", addr
эквивалентны. Тость парсинг несущесвующего параметра - ноль.
- если есть метка и на следующей строке equ, то не понимает.явно нигде не написано, но это ошибка синтаксиса - должно быть в одной строке. Точно также не проканает вещь типа:
ld
a,
10
явно нигде не написано, но это ошибка синтаксиса - должно быть в одной строке.
ЕМНИП, в аласме вроде можно было переносить. Иначе рвется форматирование на длинных метках.
ЕМНИП, в аласме вроде можно было переносить. Иначе рвется форматирование на длинных метках.по идее можно реализовать, добавив как новый опкод... существующий парсинг трогать не стоит %)
а имхо вообще лучше это не трогать - это все-таки не аласм - а сорцы с аласма переделать каждому кому это надо самому. со Шторма тоже не все корректно перетаскивается - но это же не повод для изменения парсинга.
в Шторме .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".
Однозначно в FAQ! Необходимо составить, а данный пункт назвать: "Перенос исходного кода из STORM".
Ну я, например не переношу ничего ниоткуда.
Ладно, подойдем с другой стороны. Какие ассемблеры из существующих (для спека, естесно)
а) не поддерживают метки длиннее 8 символов
б) не поддерживают директивы, расположенные не по первой табуляции и не по табуляции вообще.
Условия: sjasm, unreal.
Проблема: если писать прогу, которая занимает больше 128 к, имеем некоторые затруднения с загрузкой программы в эмуль... которые можно обойти по-разному, как то: выгружать откомпилированное в трд-образ, потом при инициализации загрузить выгруженное в память... Ну тут уже каждый как хочет... Мне, например, не подходит время ожидания пока программа загрузится, даже когда эмуль настроен на мильон-мильардов тактов в секунду, это чуть дольше чем вообще без загрузки.
Решение: Имеем сорцы компилера и эмуля - и имеем поддержку снапшотов выше 128к.
Что с того вышло:
sjasm:
- savesna само выбирает размер снапшота в зависимости от device( в данный момент добавлены 256К, 512К, 1024К );
- какой бы не был установлен последний page - в снапшоте он всегда - 7.
- тип девайса ( атм, пентагон и тд ) не сохраняется в снапшот и не восстанавливается.
unreal:
- сделана только _загрузка_ снапшотов, выгрузка мне просто пока не нужна %);
- после загрузки размер снапшота ( те, что более 128К ) автоматом устанавливает размер памяти в эмуляторе ( не тип ). [В сорцах как альтернатива есть мессадж бокс].
может еще что забыл... сорцы ( только измененные файлы ) прилагаются.
столкнулся с неприятным багом =(
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
ну значит не Stable =)
SjASMPlus 1.07 Documentation [31.05.2007] - из документации...
а насчет "бага" то что? просто боязно - в каких случаях это проявиться может?
Пристал недавно какой-то буржуин с вопросами и багрепортами - версию для MacOS X ему подавай
Gasman наверное =)
Aprisobal
18.03.2009, 17:47
psndcj, уезжаю на Украину на несколько дней, поэтому отвечу только через неделю.
А просит не Гасман, а другой человек. И программирует он не для спектрума :)
Попытался собрать 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, для версии 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 не сохраняет права у файлов)
Aprisobal, да, именно так тоже все и делаю, но почему то вылетает с ошибкой. Вот в 1.07 RC8 Pre этот файл и остальные компилятся нормально (ну кроме ошибки в конце с SaveTAP) - мистика какая то :)
Вообщем пока буду пользовать готовый бинарник в ожидании фикса RC8 Pre
На предупреждения не обращать внимания - если нет 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: НАХРЕНА?!
: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'у за то, что пинал меня полгода, подбивая собрать весч, которой я не пользуюсь.
вот нет в жЫзни справедливости....
я СанСаныча пинал полгода гдето собрать под лялих.... а все спасибы ему... :(
Aprisobal
28.04.2009, 20:54
Вижу, что deb и rpm пакеты интересны будут не только мне одному?
@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/
@Aprisobal, стОит ждать, что ты выложишь подсветку для XCode на свою страницу? =)
Aprisobal
10.07.2009, 01:17
siril, стоит! Вот-вот...
TPressR DB "Press R to repeat","."+#80,0 ;для ASKREPFORM
Ошибка Unexpected +#80 и дальше до конца строки, т.е. +#80,0. Если пишу:
TPressR DB "Press R to repeat",("."+#80),0 ;для ASKREPFORM
то все ОК
Можно ли в сабже провернуть следующее? (Пример из 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 - да.
TPressR DB "Press R to repeat","."+#80,0 ;для ASKREPFORM
Ошибка Unexpected +#80 и дальше до конца строки, т.е. +#80,0. Если пишу:
TPressR DB "Press R to repeat",("."+#80),0 ;для ASKREPFORM
то все ОКВообще-то двойные кавчки для символьных строк используются, для одиночных символов используй одинарные ('.'+#80) :)
Можно ли в сабже провернуть следующее? (Пример из 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
имплементация где-то между этими двумя постами.
С какими названиями метки сгенерируются в результате?
С какими названиями метки сгенерируются в результате?
http://zx.pk.ru/showpost.php?p=159487&postcount=264
Corpsegrinder
24.07.2009, 10:53
Прошу прощения, ниасилил многабукф.
Планируется ли поддержка CVS или SVN?
Прошу прощения, ниасилил многабукф.
Планируется ли поддержка CVS или SVN?
эээ... а на сайт проекта сходить, не ?
http://sourceforge.net/projects/sjasmplus/develop
Вот этот файл не компилируется
сначала компилировался, а потом перестал
он выдает - ошибок нет и все...
во! ошибку нашел
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'ов. Посмотрим.
Пытаюсь перевести свой проект под sj. В целом asm нравится, но есть текущие вопросы:
- метка в equ должна быть с первой позиции в строке? Чего так строго?
- глобальные (external) метки через :: не?
- макро name - нельзя ли наоборот? Понимаю, что не смертельно, но на мой взляд более читаемо (приходится много перепахивать).
- хотелось бы IRP/IRPC для полного счастья - не вижу чем заменить?
Вообще, проект поддерживается или уже тогось?
Aprisobal
19.01.2010, 13:36
Поддерживается, естественно.
IRP - повторить код по списку аргументов?
Метка в EQU должна быть с первой позиции в строке - такое ограничение, еще с оригинального SJASM.
Глобальные метки(т.е. на которые не воздействуют директива MODULE и др.) начинаются с @.
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... Возможно.
OK. Если я правильно понял, дальнейших расширений (улучшений) не предвидится? Или же можно сюда выкладывать пожелания, а дальше - на Ваше усмотрение?
В IF1 пока нет необходимости, т.к. сообщения по DISPLAY выводятся на последнем проходе.
Aprisobal
19.01.2010, 17:43
Или же можно сюда выкладывать пожелания, а дальше - на Ваше усмотрение? Именно так ;))
Aprisobal
27.01.2010, 21:18
Во вложении MacOS X (Intel) версия по просьбе англоговорящих пользователей.
Во вложении MacOS X (Intel) версия по просьбе англоговорящих пользователей.
Вопрос: а можно получить версию для доса?
Aprisobal
29.01.2010, 21:04
Вопрос: а можно получить версию для доса? Для ДОС пока только версия 1.06, ссылка в первом посте http://zx.pk.ru/showthread.php?t=447
Для ДОС пока только версия 1.06, ссылка в первом посте http://zx.pk.ru/showthread.php?t=447
Про ту версию я в курсе. Хотелось бы последний верс для доса.
Приветствую!
Нельзя ли версию для АмигаОС 3.x ?
Aprisobal
28.02.2010, 17:41
Приветствую!
Нельзя ли версию для АмигаОС 3.x ? Можно, но GCC для AmigaOS есть?
Можно, но 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)
Пакет 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/ был ассемблер, который умел компилировать перемещаемый код.
Нет, компилировать перемещаемый код он не умеет и соответственно выходной формат тоже менять нельзя, на выходе только то, что определено программой.
Насколько помню, в комплекте с C-компилятором z88dk http://www.z88dk.org/ был ассемблер, который умел компилировать перемещаемый код.
А ты не можешь этому SjASM научить? Если это проблематично, то просто буду вручную делать, или отдельный компоновщик на ZX писать.
если нужно просто сделать перемещаемый код - это можно сделать очень простой утилиткой (самому написать, на чем угодно). если что-то еще, то тогда хз.
А ты не можешь этому SjASM научить? Если это проблематично, то просто буду вручную делать, или отдельный компоновщик на ZX писать.
Если не секрет, зачем понадобился перемещаемый код?
Если не секрет, зачем понадобился перемещаемый код?
Для многозадачной ОС на Спектрум, которая, скорее всего, так и не будет мною написана.
А, может, и будет.
патчит вложенные if в dup
Возник вопрос. Вот скомпилил я прогу. Как создать TRD образ знаю, как скомпиленное в него записать знаю. А вот как записать скомпиленое создав из него готовый Басик моноблок? Есть какое решение для этого? В доке что-то ничего не нашел или просто проглядел. Да и здесь в теме понаписано слищком много чтобы что-то быстро найти, если решение уже было. Создание SCL после компиляции сделал. Интересует создание в TRD образе.
как записать скомпиленое создав из него готовый Басик моноблок?
Начиная где-то отсюда (http://zx.pk.ru/showthread.php?p=159593&highlight=monoloader#post159593) или отсюда (http://zx.pk.ru/showthread.php?p=145757&highlight=monoloader#post145757). :rolleyes:
Начиная где-то отсюда (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 и склей файлы. Или релизы выходят настолько часто, что необходима автоматическая склейка?
Как предоставил по первой ссылке breeze, в комплекте с SjASMPlus для Windows имеется директория Examples, которая в примере для Worm255 содержит вариант для создания Basic-загрузчика.
Чтобы позже сделать из этого моноблок - загрузи в Real Commander и склей файлы. Или релизы выходят настолько часто, что необходима автоматическая склейка?
Ну не то чтобы часто, но было бы крайне полезно. Хотя как вариант могу и SCL использовать. Его проще создать сразу и полностью. Но тоже несколько извратно :)
Ну я думаю достаточно хотя бы сделать посекторную запись например во вновь созданный трд образ. Или еще как вариант возможность создания бейсик файла в соответствии с его форматом и заданным размером в секторах для создания моноблока и посекторным доступом к образу. Ну или как то так.
я думаю для счастья нужно только это:
1. запись блока данных в TAP в настраиваемом формате (можно сделать что заголовок формировать блоком DB, так будет гибче).
2. запись в TRD файла с произвольным заголовком (т.е. чтобы указывался тип файла, старт и длина (они могут отличаться от реальных!!!))
все это можно сделать даже внешней утилитой (нет такой? надо чтобы кто-нить сделал). и так же внешней утилитой склеивать файлы в TRD.
вопрос в том, надо ли все это реализовывать именно в ассемблере? я не уверен.
Незнаю бага или фича.
Вот кусок
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
Как по мне можно имеет смысле викидывать 0078 7F то есть при развороте макроса DBG a, получилась инструкция ld a,a
А что, компилятор должен на кофейной гуще гадать- случайно ли ты вставил лишние конструкции или специально?
Я про этап разворота макроса...
Как вариант можно добавить возможность проверить что было передано в параметре макроса пусть даже в виде строки
багофича будет тогда, когда асм самовольно станет что-то оптимизировать.. а если я специально сделал такой макрос?
так что все ок.
Можно ли как нить изобразить что нить в таком духе ?
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 Нет, так нельзя.
Думаю, что есть другой способ. Нужно подумать.
Граждане, подскажите как быть.
ассембер сий как я понимаю требует пробел перед инструкцией или метку,
а моя буржуйская прога TommyGun генерит defb-ы кучами без пробелов сначала
в результате компилятор страшно ругается и компилить отказывается.
как то бы с этим справится нельзя?
сделать поиск и замену 'defb' на ' defb'
2psb: не не катит))) при каждой компиляции файлы ресурсов поиском-заменой проходить не вариант, тем более их несколько. я сейчас поставил версию 1.05, в ней все нормально, почему в 1.07 убрали это не понимаю(
Написать обертку для генератора, которая будет вызывать оригинальную тулзу и делать пост-процессинг.
2Vitamin: Балин, ну очевидные идеи подсказываете. но этож маразм, так можно и до собственного ассемблера дойти. А времени свободного совсем мало, хочется под спек что-нибудь сделать, а больше времени гробится на написание левых утилит. Может афтар всеж сделает возможность писать инструкции без меток и пробелов вначале, тем более это уже было реализовано в версии 1.05. почему убрали?
Aprisobal
16.04.2010, 13:19
2Vitamin: Балин, ну очевидные идеи подсказываете. но этож маразм, так можно и до собственного ассемблера дойти. А времени свободного совсем мало, хочется под спек что-нибудь сделать, а больше времени гробится на написание левых утилит. Может афтар всеж сделает возможность писать инструкции без меток и пробелов вначале, тем более это уже было реализовано в версии 1.05. почему убрали? Припоминаю, что "афтара" просили убрать возможность писать инструкции без меток, иначе по-другому нет логики, почему "афтар" убрал эту возможность.
Напишите автору TommyGun, он очень активно свою программу разрабатывает, поэтому и быстро исправит свой генератор.
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 ----------
Ой соори, моя глупая ошибка, файл инклуда был в другой директории.
Асм почему-то не ругнулся на это
Я конечно понимаю что годы программирования на ПЦ меня испортили
а больше времени гробится на написание левых утилит.
написание проги, вставляющей пробелы/табы (постпроцессинг), заняло бы максимум час времени (в прыжке). или годы сделали тебя ну ооочень ленивым?;))
2psb: ну это дело принципа, я принципиально противник методов "заплаток" и "костылей". опыт как раз показывает, что после навешивания всяких "переходников" для постпроцессинга и подобного проект в конце концов превращается в "черте что" где "черт ногу сломит".
Можно не писать, можно взять готовый, тот же sed, например. Проблема в том чтобы прикрутить его к существующему вызову.
Вобщем у меня такое пожелание к автору, вдруг прислушается...
Раз уж кому-то надо пробел в начале если нет метки, а кому-то не надо, предлагаю
ввести директиву компиляции включающую такой режим при необходимости. будет вообще шикарно
А так - ассемблеру цены нет, респект и уважуха
Вопросик №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) ; <-- ошибка
Aprisobal, очень благодарен, твоей команде, за проделанную работу. Компилятором вполне доволен.
Нет отличий, только для совместимости с другими ассемблерами.
Вот это зря, я имею ввиду вообще совместимость, а не конкретно двоеточия. Чем больше совместимости, тем больше глюков. Самому частенько приходится писать(не для спека) процедурки совместимые с чем попало, а это куча проверок-перепроверок, бывает так код запутывается, что дебагером не всегда распутаешь.
Лучше повышать функционал, а не совместимость(кому надо - те уже перегнали свои исходники)
Лучше повышать функционал, а не совместимость
вопрос очень даже философский... иногда совместимость играет решающую роль (пусть не так навороченно, но хотя бы такое есть).
Небольшой багрепорт. Столнулся со следующей проблемой. Переносил чужие сорцы из аласма с кучей DISP и ни одного ENT (DISPов штуки 4 как минимум). Ни одного сообщения об ошибке, компилер просто падает (вылетает в винду с сообщением об ошибке).
написание проги, вставляющей пробелы/табы (постпроцессинг), заняло бы максимум час времени (в прыжке). или годы сделали тебя ну ооочень ленивым?;))
Perl. Пять минут. Не реклама.
Perl. Пять минут.
ну это как бы того... инструментов-то миллион, можно хоть sed, хоть даже bash использовать, если есть линукс, в котором оно по дефолту стоит обычно (да и инструменты эти надо знать!)... а в винде? ставить ради этого перл? я бы не стал категорически.
ставить ради этого перл?
в виндах есть wsh
да в виндах есть UnxUtils, но не у каждого;) а какое-то средство разработки вроде как уже стояло...
2psb: php - одна короткая регулярка. ) Кстати я пытался связаться с автором томмигана - не отвечает, и томмиган уж год не обновлялся, наверное заброшена очередная хорошая идя(
Пока перебиваюсь старой версией sjasm-а, жду может всеж афтар сделает диррективу компиляции) Постпроцессинг навешивать - принципиально не хочу. Если уж и буду писать что-то дополнительное - так утилиту типа того же томмигана под себя.
2psb: php - одна короткая регулярка. ) Кстати я пытался связаться с автором томмигана - не отвечает, и томмиган уж год не обновлялся, наверное заброшена очередная хорошая идя(
Пока перебиваюсь старой версией sjasm-а, жду может всеж афтар сделает диррективу компиляции) Постпроцессинг навешивать - принципиально не хочу. Если уж и буду писать что-то дополнительное - так утилиту типа того же томмигана под себя.
Perl. Еще короче. Хочаб по записи, сравни preg_replace() и s///; К тому же php это другая опера, как никак веб-приложение уже.
Принципы - это вообще хорошо. Но хуже делаешь только себе. Давно бы получил нужный результат и без напряга для окружающих % )
Aprisobal, вот бы SjASMPlus под PocketPC заиметь?! Сможете скомпилировать?
Консоль и Unreal на КПК установлены.
P.S.Очень много времени в общественном транспорте провожу, вот бы это время с пользой для спека проводить.
а в винде? ставить ради этого перл? я бы не стал категорически.
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 толком не работал.
Aprisobal, PocketC# и PocketGCC только через консоль и работают.
Консолей очень много различных.
Может все таки попробуешь?
Aprisobal
02.06.2010, 13:58
DimkaM, PocketGCC это интересно. Попробуем.
Sed for Windows
угу, знаю, юзаю иногда.
DimkaM, PocketGCC это интересно. Попробуем.
Я PocketGCC не не пробовал т.к. с Сями не дружу. А вот PocketC# очень удобно на КПК иметь, от скуки чё нить пописать.
А на счёт SjASMPlus подумайте плиз.
Граждане, вот еще вопросик. sjasm генерит при компиляции lst файл. это я как понимаю файл с названиями меток. А есть ли такой эмуль который может этот файл понимать, и в дебаггере эти метки именами показывать?
Aprisobal
05.06.2010, 18:16
Граждане, вот еще вопросик. sjasm генерит при компиляции lst файл. это я как понимаю файл с названиями меток. А есть ли такой эмуль который может этот файл понимать, и в дебаггере эти метки именами показывать? Для UnrealSpeccy свой формат. Смотрите директиву в документации: LABELSLIST
Собрал sjasmplus под линух.
вроде работает. НО!
При попытке использовать директиву MODULE - вылетает по segfault.
Кто такое видел, пробовал исправить?
Aprisobal
28.06.2010, 20:33
Собрал sjasmplus под линух.
вроде работает. НО!
При попытке использовать директиву MODULE - вылетает по segfault.
Кто такое видел, пробовал исправить? Какой версией gcc собирали и сколько-разрядная система?
Последний раз, тестируя под Линукс, прекрасно собрал на sjasmplus свои Numb Cars 2 и SquareMania из исходников, где часто используется директива MODULE, поэтому идей пока нету - но очевидно, что где-то ошибка в программе.
Какой версией 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, чтобы любой желающий мог сделать свою ветку и модернизировать и усовершенствовать компилятор самостоятельно.
А можно примерчик использования структур, а то чёта в инструкции не очень понял.
И желательно поподробней объяснить зачем эти структуры нужны.
Хотелось бы отписать о косяке компилятора и надеяться на быстрое исправление если возможно. Вот картинка. В логе все нормально, но декомпиленный бинарик уже отличается. Обвел красной рамкой.
Версия естественно последняя.
Aprisobal
19.08.2010, 18:55
Хотелось бы отписать о косяке компилятора и надеяться на быстрое исправление если возможно. Вот картинка. В логе все нормально, но декомпиленный бинарик уже отличается. Обвел красной рамкой. Хорошо бы просто скриншот дебаггера любого эмулятора, а не IDA. И побольше листинг. И кстати, в Unreal можно смотреть дебаггер с метками, если использовать директиву LABELSLIST.
На картинке вижу серьезные отличия в адресах листинга и декомпиляции в 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, получил то, что нужно.
Было бы здорово получить в личную почту полный исходный код программы, по-другому ошибку не исправлю. Приватность гарантирую.
Вот картинко с Анрыла, правда без меток.
Aprisobal
19.08.2010, 19:32
Ты в ICQ бываешь? Нет, только в Skype.
ICQ из профиля уберу.
Нет, только в Skype.
ICQ из профиля уберу.
Жаль. Ну кинь адрес электропочты, вышлю.
В общем я в полном трауре. компиляя один и тот же код получил следующее. Версии с 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" и код будет таким, как в листинге. См. скриншот.
Ошибка есть, устраним.
Временно можно использовать директиву OUTPUT "main.rom" (вставлять в начале программы, подробнее см. документацию), вместо SAVEBIN "main.rom" и код будет таким, как в листинге. См. скриншот.
Успехи какие-нибудь есть?
Директива OUTPUT не есть гуд. Я могу ее использовать, но при сложной сборке после каждого ORG надо вбивать FPOS. Был бы 1-2 еще куда ни шло. А при счете хотя бы в десяток уже довольно тягомотно, особенно при куче файлов.
В http://sjasmplus.sourceforge.net/recommended-text-editors/ Xcode так и не добавил -_-
Такой вопрос, хочу собрать 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 — что-то с налёту не получилось)
эээ… ну для этих целей как минимум нужен gcc и make
скачиваешь сорцы, распаковываешь, запускаешь в консоллле :)
%make
%make install
как-то так…
всё. протупил =) на самом деле всё после make собралось.
(на make install оно сругнулось:
oisee:sjasmplus-src-1 oisee$ make install
make: *** No rule to make target `install'. Stop.)
просто я пошёл откомпилированный файл sjasm в ./bin искать, а он в ./ и называется sjasmplus =)
thx, breeze! =)
thx, breeze! =)
ave zx! :rolleyes:
а научите под WM(WindowsMobile) собрать, плиииззз.
а научите под WM(WindowsMobile) собрать, плиииззз.
ну насколько я помню тут два варианта ;) либо ты самому gcc скажешь что ты хочешь собрать версию под PocketPC, либо ставишь на сам покет консоль, gcc и собираешь прямо на нём ;) правда подозреваю, что придётся ещё ставить lua и возможно другие депенденси ;)
gcc совсем не понимаю, консоль стоит.
Буду изучать.
Тут нашёл на перле компилятор, и даже на кпк запустился, но блин синтаксис там непривычный и инкбинов с инклудами нету.
по просьбам трудящихся (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
Версия для 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) версия по просьбе англоговорящих пользователей.
кто кстати? может стоит попробовать связаться - обменяться наработками, быть может дальше меня продвинулись...
у меня, кажется, получилось прикрутить sjasm к xcode (http://speccy-live.untergrund.net/?p=3425&cpage=1#comment-736). aprisobal, plz отпишись по заключительной части.
Такс, под WM никто собирать не хочет, а сам я не умею.
Вот, по этому поводу я приобрёл Андроид-планшетник.
Кто самый смелый, в смысле под него собрать?
molodcov_alex
23.09.2010, 12:11
Такс, под WM никто собирать не хочет, а сам я не умею.
Собирается то dll'ка, которую надо к чему-нибудь прикручивать. (И то есть всякие неучтенные гадости - в WM путь разделяется '/', а не '\' как в винде; абсолютно отсутствует такое понятие как текущий каталог).
У меня есть недосборка какой-то старой версии с недогуем, но там все очень не очень работает (особенно радуютЪ exit() в sjasm которые заодно и мою прогу прикрывают).
Собирается то 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'шник сделать.
вот тестовый beta-bundle для TexMate (mac) и E text editor (win).
(могут быть неадекватности).
Mission complete (speccy-live) (http://speccy-live.untergrund.net/?p=3543) - SjASM 1.07 RC7 прикручен к Xcode.
Вопрос.
Структура кода следущая
ORG #EA60
... some code ...
ret
ORG #8000
some data
Так вот данные идут сразу после кода, а не по указанному адресу #8000. Что не так делаю?
Вопрос.
Структура кода следущая
ORG #EA60
... some code ...
ret
ORG #8000
some data
Так вот данные идут сразу после кода, а не по указанному адресу #8000. Что не так делаю?
вероятно вместо some data стоит incbin "filename", а не DB "somedata"? об этой ситуации речь?
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 не будет - пишите, что-нибудь быстро составлю.
См. директиву DEVICE в документации, а также примеры, которые идут в составе. Если в примерах ничего с DEVICE не будет - пишите, что-нибудь быстро составлю.
К сожалению ничего о DEVICE не нашел, ни в примерах ни в документе по sjasm.
Качнул более полную доку. Читаю о директиве DEVICE/
---------- Post added at 14:50 ---------- Previous post was at 14:12 ----------
Почитал.
Осталось не понятно как указать в коде адрес по которому следует размещать данные.
?
Aprisobal
28.10.2010, 23:34
Осталось не понятно как указать в коде адрес по которому следует размещать данные. Где текущий указатель, там и будут данные - в вашем последнем примере по адресу #8002.
Вот мой пример:
ORG #EA60
START LD BC,DATA
RET
ORG #8002
DATA DB #0F,#8F,#0E,#8B
В BC адрес записывается #8002, но самих данных по этому адресу нет, они находятся сразу за командой ret.
Версия компилятора RC7.
Компилирую: sjasmplus.exe Symbol.asm
Вот мой пример:
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 и т.д.
Aprisobal, по поводу sjasm&xcode ответа не ждать?
вы меня извините конечно, а штаны вы тоже через голову одеваете ? :eek:
может всёт-таки стоит всё последовательно располагать ? как оно собственно и должно лежать в памяти ? :rolleyes:
ORG #8002
DATA DB #0F,#8F,#0E,#8B
ORG #EA60
START LD BC,DATA
RET
ууу, батенька, как все запущено... :v2_dizzy_biggrin2:
Вы меня извините тоже, но порядок значения не имеет.
ууу, батенька, как все запущено... :v2_dizzy_biggrin2:
Вы меня извините тоже, но порядок значения не имеет.
http://habreffect.ru/files/9ac/5de2d5e64/woow.jpg
вааааааааааааау :eek: правда шоле!? :sleep:
вааааааааааааау :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
выхлоп одинаковый. Или где?
выхлоп одинаковый. Или где?
Очень интересно! продолжайте… :rolleyes:
http://pit.dirty.ru/dirty/1/2010/09/08/28047-214048-ed657fbabdfbbc36eaa465bea8470a11.jpg
извиняюсь, конечно, что вмешиваюсь, но
breeze, или это толстый троллинг, или ты неправ.
извиняюсь, конечно, что вмешиваюсь,но
breeze, или это толстый троллинг, или ты неправ.
сэр! :eek: как вы могли такое подумать :) меня гуру просвещает как надо писать программы, я просто устраиваюсь поудобнее, дабы узнать суть бытия и постичь дзен :sleep:
как сделать чтобы при записи:
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
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?
LD B,metka[
LD B,metka / 256
.2
спецефично для Storm. Означает DUP 2
LD B,metka / 256
Может всётаки high и low использовать?
ld b, high metka
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot