Вход

Просмотр полной версии : Сборка SCL из sjasm (не финальная)



denpopov
17.06.2014, 18:16
написал от безделья сборку в ужясме .SCL:


device zxspectrum128

org $8000-14*2-9;
scl_b:
;header_b:
db "SINCLAIR"
db 2;two! filez
;-1st
; 12345678t
db "abstractC"
dw $8000;start adres of code block
dw end-begin;size of code
db 4;sectors
;-2nd
; 12345678t
db "abstractB"
dw basic_e-basic_b;size of basic
dw basic_e-basic_b;size of basic
db 1;sectors
;header_e:
; ORG #8000
begin
ld hl,pack,de,$6100
push de
include "zx7.a80"
pack: incbin "test.bin.zx7"
end
org $8400
basic_b:
db #00,10;номер строки
DW EndLine1 - Line1
Line1:

db $FD;clear
db $B0;val
db $22,"24575",$22,":"
db $F9;randomize
db $C0;usr
db $B0;val
db $22,"15619",$22,":"
db $EA;rem
db ":"
db $F7;run
db $22,"abstract",$22
db $AF;code
db #0D
EndLine1:


db #80;for autorun
db #AA,10,0
basic_e:

scl_e:

savebin "test.scl",scl_b,scl_e-scl_b



правда автозапуск строки не работает:(

Alex Rider
17.06.2014, 22:46
написал от безделья сборку в ужясме .SCL
А ежели бы еще длину файлов в секторах считать...


правда автозапуск строки не работает
К телу BASIC-файла можно добавить #AA, startline_lo, startline_hi. Тока длину в секторах для BASIC'а считать с ними, а размер файла - без них.

denpopov
18.06.2014, 07:03
ага, вляпались модераторы:) Этот вопрос много куда относится, значит пора дублировать сообщения?

---------- Post added at 07:03 ---------- Previous post was at 06:07 ----------

получаю вот такую ошибку:


SjASMPlus Z80 Cross-Assembler v1.07 RC7 (build 02-04-2008)
mkscl.asm(23): error: [IF] Forward reference
mkscl.asm(29): error: [IF] Forward reference
Pass 1 complete (2 errors)
Pass 2 complete (2 errors)
Pass 3 complete
Errors: 2, warnings: 0, compiled: 145 lines, work time: 0.000 seconds


код поправил с учетом пожеланий:


device zxspectrum128

macro sectors datab,datae

IF low datae-datab=0
db high (datae-datab)
ELSE
db (1+high (datae-datab))
ENDIF

endm

org $8000-14*2-9
scl_b:
;header_b:
db "SINCLAIR"
db 2;two! filez
;-1st
; 12345678t
db "abstractC"
dw $8000;start adres of code block
dw end-begin;size of code
sectors begin,end;db 4;sectors
;-2nd
; 12345678t
db "abstractB"
dw basic_e-basic_b-4;size of basic
dw basic_e-basic_b-4;size of basic
sectors basic_b,basic_e;db 1;sectors
;header_e:
; ORG #8000
begin
ld hl,pack,de,$6100
push de
include "zx7.a80"
pack: incbin "test.bin.zx7"
end
org $8400
basic_b:
db #00,10;номер строки
DW EndLine1 - Line1
Line1:

db $FD;clear
db $B0;val
db $22,"24575",$22,":"
db $F9;randomize
db $C0;usr
db $B0;val
db $22,"15619",$22,":"
db $EA;rem
db ":"
db $F7;run
db $22,"abstract",$22
db $AF;code
db #0D
EndLine1:


db #80;for autorun
db #AA,10,0
basic_e:

scl_e:

savebin "test.scl",scl_b,scl_e-scl_b

Shadow Maker
18.06.2014, 09:43
А где контрольная сумма? Не вижу.


Последние 4 байта - контpольная сyмма (арифметическая сумма всех предыдущих байт)

denpopov
18.06.2014, 09:45
А где контрольная сумма? Не вижу.

эмуляторы игнорируют, да и убьешься щитать, разве что с помощью LUA.

мне интересно сообщение ошибки и непонятно, как выровнять Basic по адресу?.

Shadow Maker
18.06.2014, 09:49
Что значит игнорируют? Есть спецификации, надо делать по спецификациям, а не от балды. Не можешь посчитать - зачем тогда вообще такие файлы давать. Наводнят щас пол-интернета этими файлами битыми.

denpopov
18.06.2014, 09:53
Есть спецификации, надо делать по спецификациям, а не от балды.
Да ну?
http://www.zx-modules.de/fileformats/sclformat.html
контрольная сумма указана в статье speccy.info

Shadow Maker
18.06.2014, 09:58
Даешь линк на какого-то немца, который не шарит. Вот первоисточник, читай TXT файл. http://vtrdos.ru/pcutilz/AMD01.ZIP

denpopov
18.06.2014, 10:04
Даешь линк на какого-то немца, который не шарит.
не согласен, утилит у него много, хотя часть утилит просто бестолковые.

Ссылки не катят, потому что контрольную сумму игнорируют эмуляторы, Far'у тоже наплевать.

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

Shadow Maker
18.06.2014, 10:15
Короче запиливай контрольную сумму или это надо убирать, пока люди не начали использовать, иначе пол-интернета завалит битыми SCL.

То, что кому-то там наплевать, не значит, что надо игнорировать спецификации.

Forward референс потому, что на момент вызова макроса у тебя всякие там basic_e, бегин, енд не определены еще. Я лично всё собираю отдельно утилитой на php и собирать в sjasm как-то контрпродуктивно по-моему.

denpopov
18.06.2014, 13:23
чоооорд, еще один косяк - загрузчик-бейсик не пишется как сектор:(

jerri
18.06.2014, 13:26
denpopov, а вот так?

DEVICE ZXSPECTRUM128
org #6000
header_beg
db #00 ;command byte
db #00
db "l'Abbaye "
dw bas_end-bas_beg ;full lenght
dw #000a ;autostart
dw #0028 ;lenght without vars
header_end

; print usr (peek val "23627"+val "256"*peek val "23628"+val "3")
; 34b3 usr

data_beg
db #ff
bas_beg
db #00,#0a ;10
dw #0024 ;¤«Ё** бва®ЄЁp
db #f5,#c0,#28,#be ;print usr (peek
db #b0,#22,#32,#33,#36,#32,#37,#22,#2b ;val "23627"+
db #b0,#22,#32,#35,#36,#22,#2a,#be ;val "256"*peek
db #b0,#22,#32,#33,#36,#32,#38,#22,#2b ;val "23628"+
db #b0,#22,#33,#22,#29,#0d ;val "3")
;(23627)
;vars
db #4c ;L
dw screen_l ;var_len
pointer
di
ld h,b
ld l,c
ld sp,hl
ld hl,end_len
add hl,bc
ld de,#ffff
ld bc,pack_len+1
lddr
inc de
ld hl,#6000
push hl
ex de,hl
include "DEC40.a80"
org $-1
block_beg
incbin "AdM_scrn.mlz"
block_end
db #80 ;endmarker
bas_end
data_end

screen_l equ bas_end-pointer
pack_len equ block_end-block_beg
end_len equ block_end-pointer



b_title
db #ff
;48k - depack to #4000
incbin "\gfx\title.scr.rec.mlz"
incbin "\gfx\info.scr.rec.mlz"
incbin "sound.bin.mlz"
incbin "Abbaye.bin.mlz"
end
data equ end-b_title



display "header:",header_beg,",",header_end-header_beg
display "loader:",data_beg,",",data_end-data_beg
display "block :",b_title,",",end-b_title
display "Free :",$,",",#10000-$

savebin "0_Abbey_header",header_beg,header_end-header_beg
savebin "1_Abbey_loader",data_beg,data_end-data_beg
savebin "2_Abbey_block",b_title,end-b_title

Это для кассеты, но можна же и для диска сделать?

denpopov
18.06.2014, 13:41
вот это FAR все же схавал:)



device zxspectrum128

macro sectors datab,datae

IF low (datae-datab)=0
db high (datae-datab)
ELSE
db (1+high (datae-datab))
ENDIF

endm

org $8000-14*2-9
scl_b:
;header_b:
db "SINCLAIR"
db 2;two! filez
;-1st
; 12345678t
db "abstractC"
dw $8000;start adres of code block
dw end-begin;size of code
sectors begin,end;db 4;sectors
;-2nd
; 12345678t
db "abstractB"
dw basic_e-basic_b-4;size of basic
dw basic_e-basic_b-4;size of basic
sectors basic_b,basic_e;db 1;sectors
;header_e:
; ORG #8000
begin
ld hl,pack,de,$6100
push de
include "zx7.a80"
pack: incbin "test.bin.zx7"
end
org $8400
basic_b:
db #00,10;номер строки
DW EndLine1 - Line1
Line1:

db $FD;clear
db $B0;val
db $22,"24575",$22,":"
db $F9;randomize
db $C0;usr
db $B0;val
db $22,"15619",$22,":"
db $EA;rem
db ":"
db $F7;run
db $22,"abstract",$22
db $AF;code
db #0D
EndLine1:


db #80;for autorun
db #AA,10,0

org $8500

basic_e:
;?checksum
scl_e:

savebin "test.scl",scl_b,scl_e-scl_b





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

---------- Post added at 13:41 ---------- Previous post was at 13:40 ----------


Это для кассеты, но можна же и для диска сделать?
Это к интроспеку, он плодовит на сомнительные утилиты;)

denpopov
18.06.2014, 13:57
FAR проглотил и это:

org $8500
basic_e:
dw 0,0;checksum
scl_e:

jerri
18.06.2014, 14:04
Это к интроспеку, он плодовит на сомнительные утилиты;)

Это не утилита - это создание блоков для тапки средствами асма.

вот такой вот батник собирал аббатство.


.\utils\scrrec.exe .\gfx\info.scr
.\utils\scrrec.exe .\gfx\title.scr
.\utils\scrrec.exe .\gfx\loadingabbaye.scr.rec

.\utils\MegaLZ.exe .\gfx\info.scr.rec
.\utils\MegaLZ.exe .\gfx\title.scr.rec

.\utils\sjasmplus.exe main.a80

.\utils\MegaLZ.exe Abbaye.bin
.\utils\MegaLZ.exe sound.bin

.\utils\sjasmplus.exe screen.a80

.\utils\MegaLZ.exe AdM_scrn

.\utils\sjasmplus.exe loader.a80

.\utils\savetap.exe Abbaye.tap 0_Abbey_header 1_Abbey_loader 2_Abbey_block

.\utils\TAP2TZX.EXE Abbaye.tap

del AdM_scrn
del AdM_scrn.mlz
del 0_Abbey_header
del 1_Abbey_loader
del 2_Abbey_block
del Abbaye.bin
del Abbaye.bin.mlz
del sound.bin
del sound.bin.mlz
del Abbaye.tap

pause

denpopov
19.06.2014, 05:44
почти финальная:


device zxspectrum128

macro sectors datab,datae

IF low (datae-datab)=0
db high (datae-datab)
ELSE
db (1+high (datae-datab))
ENDIF

endm

org $8000-14*2-9
scl_b:
;header_b:
db "SINCLAIR"
db 2;two! filez
;-1st
; 12345678t
db "abstractC"
dw $8000;start adres of code block
dw end-begin;size of code
sectors begin,end;db 4;sectors
;-2nd
; 12345678t
db "abstractB"
dw basic_e-basic_b-4;start
dw basic_e-basic_b-4;length?
sectors basic_b,basic_e;db 1;sectors
;header_e:
; ORG #8000
begin
ld hl,pack,de,$6100
push de
include "zx7.a80"
pack: incbin "test.bin.zx7"
end
org $8400
basic_b:
db #00,10;номер строки
DW EndLine1 - Line1
Line1:

db $FD;clear
db $B0;val
db $22,"24575",$22,":"
db $F9;randomize
db $C0;usr
db $B0;val
db $22,"15619",$22,":"
db $EA;rem
db ":"
db $F7;run
db $22,"abstract",$22
db $AF;code
db #0D
EndLine1:

db #80;for autorun
db #AA,10,0
basic_e:

org $8500
dw 0,0;checksum
scl_e:

savebin "test.scl",scl_b,scl_e-scl_b



FAR понимает подобную сборку, даже если нет контрольной суммы. С доводами Vitamin и Shadow Maker я не согласен, потому что не вижу смысла хвататься з древность спецификации формата.

LUA я не осилил, был бы psb, то помог, наверное.

вот решение, хотя и не самое лучшее:
убрать контрольную сумму, только dw 0,0
запустить утилитку из приложения, в командной строке указывается имя файла.scl

autorun строки вроде бы работает.

creator
19.06.2014, 07:22
я не согласен, потому что не вижу смысла хвататься з древность спецификации формата
Сегодня по RU.ANEKDOT пришёл весьма актуальный анекдот:
Для того, чтобы быть геем нужен ещё один гей, а вот пидарасом можно быть в одиночку.

denpopov
19.06.2014, 07:52
Сегодня по RU.ANEKDOT пришёл весьма актуальный анекдот:
http://img0.joyreactor.cc/pics/comment/picture-14619.jpeg

Vitamin
19.06.2014, 07:57
С доводами Vitamin и Shadow Maker я не согласен, потому что не вижу смысла хвататься з древность спецификации формата.
Тогда вот тебе еще поле где развернуться- zip архивы. Там много контрольных сумм, есть куда положить большой и толстый.

denpopov
19.06.2014, 08:01
Тогда вот тебе еще поле где развернуться- zip архивы. Там много контрольных сумм, есть куда положить большой и толстый.

Две программы почему-то хавают .SCL, но ни один архиватор контрольные суммы .zip'a не игнорируют.

короче, решение я предложил, если кого-то не устраивает, пусть сообщают, шутники типа creator'a тут ненужны.

Vitamin
19.06.2014, 08:07
Две программы почему-то хавают .SCL
Ну чтоб воздух зря не греть, проверь еще эмуляторы. Как минимум, мои программы твои SCL как таковые не поймут.

denpopov
19.06.2014, 08:11
проверь еще эмуляторы.
Спектакулятор 8 понимает, походу он все .scl не проверяет.


Как минимум, мои программы твои SCL как таковые не поймут.
какие? всегда мечтал стать бета-тестером:)

creator
19.06.2014, 08:26
короче, решение я предложил, если кого-то не устраивает, пусть сообщают
Всех не устраивает. Да, вот так, имею наглость говорить за всех.

шутники типа creator'a тут ненужны
Я серьёзен как надгробие.

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

scl^mc
19.06.2014, 10:27
zxmak при открытии scl-файла с ошибкой контрольной суммы матерится, но в половине случаев открывает.
старый спекулятор вроде не открывал, насчет нового не в курсе, не проверял.
за унрил тоже пока не скажу, проверять надо.
если формат подразумевает использование контрольной суммы, ее надо использовать. ваш к.о.

elf/2
19.06.2014, 14:37
фарские плагины при открытии scl файлов проверяют только сигнатуру и длину файла. Поскольку в 2000 году попадались файлы с неправильной контрольной суммой.

Alex Rider
19.06.2014, 18:19
короче, решение я предложил, если кого-то не устраивает, пусть сообщают, шутники типа creator'a тут ненужны.
Так и представляю себе тред:

- Скачал XXX.scl. Не работает в yyy. Помогите!
- А, это собрано *****кодером в *****сборке от denpopov без контрольной суммы!

В общем, out (#fd),a и еще 100500 примеров ничему никого не учат. Без шаманства никак.

denpopov
19.06.2014, 18:21
- А, это собрано *****кодером в *****сборке от denpopov без контрольной суммы!

в говне-то все вы понимаете..

у кого руки кривые, как у creator'a - ВОН ИЗ ПРОФЕССИИ!

elf/2
19.06.2014, 19:46
как то вот так можно контрольную сумму посчитать... от MAIN и до конца


DEVICE ZXSPECTRUM128

org #8000
MAIN db 0, 1, 2, 4

LUA
sum = 0
for i=sj.get_label("MAIN"),_c("$")
do
sum = sum + sj.get_byte(i)
end
sj.add_word(sum/65535)
sj.add_word(sum%65535)
ENDLUA

Vitamin
19.06.2014, 19:50
sj.add_word(sum/65535)
sj.add_word(sum%65535)

А не наоборот?

Shadow Maker
19.06.2014, 20:09
Мне тут с мест подсказывают, что надо 65536, не?

elf/2
19.06.2014, 20:10
А не наоборот?
или наоброт :)

Shadow Maker
19.06.2014, 20:11
как то вот так можно контрольную сумму посчитать... от MAIN и до конца

И да, запили чтоли в ФАР чтобы матерился при проблемах с контрольной, а то так и будут же плодить.

denpopov
19.06.2014, 20:43
епрст, я уж до записи в файл дошел...

ща байты осилю:)

---------- Post added at 20:43 ---------- Previous post was at 20:42 ----------


И да, запили чтоли в ФАР чтобы матерился при проблемах с контрольной, а то так и будут же плодить.

Лучше чтоб сообщал. не люблю мат:)

creator
19.06.2014, 21:18
у кого руки кривые, как у creator'a - ВОН ИЗ ПРОФЕССИИ!
Аргументируй, в чём кривые? Что за профессия?

И это заявляет "профессионал", который нагло игнорирует элементарную спецификацию файла. Это не профессионализм, это — ламерство.

denpopov
19.06.2014, 21:27
любуйтесь на *****код:)
все строчки, начиная с LUA начинаются с табуляции


savebin "test.scl",scl_b,scl_e-scl_b

LUA

local fp
local checksum

fp = assert(io.open("test.scl", "rb"))
checksum=0
while true do
local byte = fp:read(1)
if byte==nil then
break
end
checksum=checksum+string.byte(byte)
end
assert(fp:close())
print("writing",string.format("%08X",checksum))
fp = assert(io.open("test.scl", "a"))

for i=1,4 do
fp:write(string.char(checksum%256))
checksum=math.floor(checksum/256)
end

-- assert(fp:flush())
assert(fp:close())
ENDLUA

elf/2
20.06.2014, 12:42
И да, запили чтоли в ФАР чтобы матерился при проблемах с контрольной, а то так и будут же плодить.
тут как минимум две проблемы:
1. компилятора нет, исходники открыты
2. неправильно это при проверке файла на принадлежность к формату его в полном объёме зачитывать. вдруг его с хреновой дискеты пытаются прочитать :)

denpopov
20.06.2014, 12:46
вдруг его с хреновой дискеты пытаются прочитать

прям с дискеты в SCL? oO

elf/2
20.06.2014, 13:03
прям с дискеты в SCL? oO
а кто-то запрещает прям на дискету SCL записать?

denpopov
20.06.2014, 13:06
а кто-то запрещает прям на дискету SCL записать?
а что за манера отвечать вопросом на вопрос?

на самом деле, я себе моск вынес, пытаясь пофиксить и посчитать контрольную сумму .scl

лучше, как идеал - подсчет плугином ФАРа контрольной суммы и выдача сообщения, что "что-то пошло не так" и тд.

elf/2
20.06.2014, 13:13
а что за манера отвечать вопросом на вопрос?

а что в этом плохого? :)


на самом деле, я себе моск вынес, пытаясь пофиксить и посчитать контрольную сумму .scl

странно, в чем сложность посчитать сумму всех байт?



лучше, как идеал - подсчет плугином ФАРа контрольной суммы и выдача сообщения, что "что-то пошло не так" и тд.
согласен, кто сделает?

Rindex
20.06.2014, 13:16
Помню задавал я этот вопрос насчёт - нафиг нужен этот SCL, когда есть TRD? На меня куча критики помнится обрушалась, что оно места меньше занимает, и вообще раньше так было принято. Я лишь говорил, что вы ещё намучаетесь с этим SCL, а тем у кого TRD место много занимает, посоветовал пользоваться упаковщиками. Да и раньше они, упаковщики, тоже были.

Ну и, что мы видим? Опять пошли танцы с бубном вокруг этих SCL.

denpopov
20.06.2014, 13:18
согласен, кто сделает?
думаю, что не потяну, хотя бы и попробовал.


странно, в чем сложность посчитать сумму всех байт?
я запутался в том:
есть .scl, в котором хранится один моноблок, поэтому данные для подсчета можно интерпретировать по-разному.


Сообщение от denpopov
а что за манера отвечать вопросом на вопрос?
а что в этом плохого?
АПВС?:)

---------- Post added at 13:18 ---------- Previous post was at 13:16 ----------


Помню задавал я этот вопрос насчёт - нафиг нужен этот SCL, когда есть TRD?
ну то промеж строк псты читаешь же:)
.scl - просто компактный, формат эмуляторы поддерживают.

Rindex
20.06.2014, 13:25
.scl - просто компактный, формат эмуляторы поддерживают.

Гы. А когда задумаешь играть в игру, которая записывает новый файл на диск, ты чего с этим SCL делать будешь нажав на запись после пару часов игры. Материться, наверное... :)

denpopov
20.06.2014, 13:28
Гы. А когда задумаешь играть в игру, которая записывает новый файл на диск, ты чего с этим SCL делать будешь нажав на запись после пару часов игры. Материться, наверное..

не знал и не играл в подобные игры. а с другой стороны - у ААА появилось 200 с гаком крэктр, и сколько они займут в формате .TRD?

все равно, противники формата пускай идут по холодку, как говорит мой сосед:)

Rindex
20.06.2014, 13:37
не знал и не играл в подобные игры. а с другой стороны - у ААА появилось 200 с гаком крэктр, и сколько они займут в формате .TRD?

А ты сыграй. И, вроде, кто-то говорил, что пользуется эмуляторами? Так открою страшную тайну, файл в SCL и TRD в запакованном ZIP'e, занимает одинаковое количества места.

Ну да ладно. Для этого есть эта тема (http://zx-pk.ru/showthread.php?t=22658&highlight=trd+scl).

denpopov
20.06.2014, 13:42
Так открою страшную тайну, файл в SCL и TRD в запакованном ZIP'e, занимает одинаковое количества места.

вообще говоря, я сообщение создл не ради холивара. Просто я утомился собирать 1К и 256б в один файл, вот и занялся вопросом. Думаю, что ради подобной цели, а не только ради 1К, финальное решение устроит и других.

creator
20.06.2014, 14:04
А ты сыграй. И, вроде, кто-то говорил, что пользуется эмуляторами?
Да никаких проблем. Spectacullator нормально дописывает в SCL. Только что WHAM+ из SCL запустил и сохранил из него мелодию. Вышел из эмуля, проверил SCL — новый файл появился.

Так открою страшную тайну, файл в SCL и TRD в запакованном ZIP'e, занимает одинаковое количества места.
Не всегда. Очень часто бывает вот так (http://zx-pk.ru/showpost.php?p=644896&postcount=270). Нафиг такое счастье.
И вообще я не хочу из архивов запускать. У меня Speccy 2010 есть, я чего, буду в огромном дереве папок копаться (каждая игра в папке с именем игры в разных форматах) и в них всё распаковывать чтобы на него скопировать? Тут никаких флешек не хватит.

denpopov
20.06.2014, 14:15
Заодно, у Спектакулятора с версии 7 до 8 по дефолту диски залочены на запись, поэтому приходится ручками в Disk Drives отключать защиту на запись. Может, в этом и дело?:)

creator
20.06.2014, 14:22
Заодно, у Спектакулятора с версии 7 до 8 по дефолту диски залочены на запись, поэтому приходится ручками в Disk Drives отключать защиту на запись. Может, в этом и дело?:)
Дык, если не отключить защиту записи, тут и TRD не поможет. :)

Резюме: SCL рулит.

Rindex
20.06.2014, 14:28
Заодно, у Спектакулятора с версии 7 до 8 по дефолту диски залочены на запись, поэтому приходится ручками в Disk Drives отключать защиту на запись. Может, в этом и дело?:)

Неа.


Резюме: SCL рулит.

Это видно, по уже написанным постам. ;)

denpopov
20.06.2014, 14:29
тарищи модераторы, ваше резюме - последний вариант покатит для сборки, или нет?

creator
20.06.2014, 14:33
Это видно, по уже написанным постам. ;)
Уточню — я против неправильных SCL.

denpopov
20.06.2014, 14:43
взаимоISKLючающие параграфы детект:

Уточню — я против неправильных SCL.


Резюме: SCL рулит.

---------- Post added at 14:43 ---------- Previous post was at 14:42 ----------


Неа.

тады ой:)

creator
20.06.2014, 14:52
взаимоISKLючающие параграфы детект:
Нет тут никаких взаимоисключений. "Неправильные" это неправильно сформированнные — без контрольной суммы.
Именно из-за моей приверженности к этому формату, я повёл себя так непримиримо к тому, кто попытался его (формат SCL) скомпрометировать. ;)

denpopov
20.06.2014, 14:56
Именно из-за моей приверженности к этому формату, я повёл себя так непримиримо к тому, кто попытался его (формат SCL) скомпрометировать.

по последнему и сделанному тебе нечего сказать?

Shadow Maker
20.06.2014, 17:16
согласен, кто сделает?
Как бы на тебя расчитывали... :v2_blink: Кто, если не ты?

elf/2
20.06.2014, 17:58
Как бы на тебя расчитывали... Кто, если не ты?
я уже не настоящий сварщик :( после питона на c/c++ смотреть не могу

Может Саша Медведев этот тред прочитает и сделает всем хорошо...

Shadow Maker
23.06.2014, 23:34
тарищи модераторы, ваше резюме - последний вариант покатит для сборки, или нет?
Лично у меня все те же проблемы с твоим макросом. Луа тоже пишет не туда по-моему, или же где-то что еще пропадает последний байт последнего файла... Короче не собирает в итоге работающую SCL. Фикси.

denpopov
24.06.2014, 06:57
Лично у меня все те же проблемы с твоим макросом.
какая у тебя версия?

Shadow Maker
24.06.2014, 08:58
1.07 RC7, видимо.

denpopov
24.06.2014, 09:05
Ну а исходник?

я подготовил работу в .SCL, потом FAR'ом вытащил в другой .SCL, размер файлов и контрольных сумм совпал, если не трудно, то покажи свою работу.

Shadow Maker
24.06.2014, 09:11
Что исходник? Взял твой исходник.


device zxspectrum128

macro sectors datab,datae

IF low (datae-datab)=0
db high (datae-datab)
ELSE
db (1+high (datae-datab))
ENDIF

endm

org $8000-14*2-9

scl_b:
;header_b:
db "SINCLAIR"
db 2;two! filez
;-1st
; 12345678t
db "abstractC"
dw $8000;start adres of code block
dw end-begin;size of code
sectors begin,end;db 4;sectors
;-2nd
; 12345678t
db "abstractB"
dw basic_e-basic_b-4;size of basic
dw basic_e-basic_b-4;size of basic
sectors basic_b,basic_e;db 1;sectors
;header_e:
; ORG #8000

begin
ld hl,pack,de,$6100
push de

include "zx7.a80"

pack: incbin "test.bin.zx7"
end

org $8400

basic_b:

db #00,10;номер строки
DW EndLine1 - Line1
Line1:

db $FD;clear
db $B0;val
db $22,"24575",$22,":"
db $F9;randomize
db $C0;usr
db $B0;val
db $22,"15619",$22,":"
db $EA;rem
db ":"
db $F7;run
db $22,"abstract",$22
db $AF;code
db #0D
EndLine1:

db #80;for autorun
db #AA,10,0
basic_e:

org $8500
dw 0,0;checksum
scl_e:

savebin "test.scl",scl_b,scl_e-scl_b

LUA

local fp
local checksum

fp = assert(io.open("test.scl", "rb"))
checksum=0
while true do
local byte = fp:read(1)
if byte==nil then
break
end
checksum=checksum+string.byte(byte)
end
assert(fp:close())
print("writing",string.format("%08X",checksum))
fp = assert(io.open("test.scl", "a"))

for i=1,4 do
fp:write(string.char(checksum%256))
checksum=math.floor(checksum/256)
end

assert(fp:flush())
assert(fp:close())
ENDLUA


Проблемы такие вот:


SjASMPlus Z80 Cross-Assembler v1.07 RC7 (build 02-04-2008)
scl.a80(24): error: [IF] Forward reference
scl.a80(30): error: [IF] Forward reference
Pass 1 complete (2 errors)
Pass 2 complete (2 errors)
writing 000258F4
Pass 3 complete
Errors: 2, warnings: 0, compiled: 180 lines, work time: 0.016 seconds

denpopov
24.06.2014, 09:33
Да, косяк с расположением файлов. Буду думать.

denpopov
24.06.2014, 09:58
Вот такой вариант.

Sergey
26.06.2014, 01:20
Тоже задумал make_scl написать - не спрашивайте на чем, - не скажу.
Никак не могу понять, каким образом вы выравниваете файлы внутри scl по границе сектора. Или это не требуется?

denpopov
26.06.2014, 06:14
Никак не могу понять, каким образом вы выравниваете файлы внутри scl по границе сектора. Или это не требуется?
Да не образом, а свечкой.
Требуется из-за спецификации формата.


не спрашивайте на чем, - не скажу.
на Rexx'е:)

denpopov
26.06.2014, 08:15
кстати, кто шарит, подскажите, пройдет ли align 256?
никак не врублюсь в описание(

Shadow Maker
26.06.2014, 10:25
Тоже задумал make_scl написать - не спрашивайте на чем, - не скажу.
Никак не могу понять, каким образом вы выравниваете файлы внутри scl по границе сектора. Или это не требуется?
Ну считаешь количество, делишь на 256, смотришь остаток от деления, если 0, то всё ок, иначе добиваешь нулями до конца. Как попов выравнивает я не смотрел.

denpopov
26.06.2014, 11:03
Как попов выравнивает я не смотрел.
тупо ORG'ами:)

Sergey
26.06.2014, 13:37
кстати, кто шарит, подскажите, пройдет ли align 256?
никак не врублюсь в описание(
Шо, свечки больше не помогают? :)

---------- Post added at 13:37 ---------- Previous post was at 13:31 ----------


Ну считаешь количество, делишь на 256, смотришь остаток от деления, если 0, то всё ок, иначе добиваешь нулями до конца. Как попов выравнивает я не смотрел.
я так понял, он так и делает: после INCBIN макрос sectors юзается.
Можно иcпользовать align 256. Только будет один минус - случайные данные хуже пакуются, чем нули. Но я считаю, что на это целесообразно "забить". На реале, ведь, тоже неиспользуемая часть сектора хз чем забита.

denpopov
26.06.2014, 17:57
я так понял, он так и делает: после INCBIN макрос sectors юзается.


Шо, свечки больше не помогают?
нутыпонел:)

Shiny
24.05.2017, 09:56
Апну тему. В исходниках осталась одна логическая ошибка с выравниванием данных, поэтому вот два варианта сборки - моноблок и бейсик-загрузчик с отдельными файлами.

zebest
24.03.2019, 22:56
не знаю, на что эта ошибка влияет, у мну так компилиЦЦа, кстати в крайнем компиляторе, надо бы на предыдущих проверить.

---------- Capture Output ----------> "K:\Program Files\Crimson Editor SVN286M\sjasmplus-win32-1.07-rc7\sjasmplus.exe" scl.asm
SjASMPlus Z80 Cross-Assembler v.20190304.3
scl.asm(24): error: [IF] Forward reference
scl.asm(31): error: [IF] Forward reference
Pass 1 complete (2 errors)
Pass 2 complete (2 errors)
writing 00258657
Pass 3 complete
Errors: 2, warnings: 0, compiled: 118 lines


> Terminated with exit code 1.

Но при этом скомпиленное работает, и в эмуле, и в virtual TR-DOS, что главное.

Shiny
25.03.2019, 10:39
Вроде бы мелькало решение таких ошибок. У меня тоже выскакивают сообщения, но файлы работают.

mastermind
25.03.2019, 17:02
не знаю, на что эта ошибка влияет, у мну так компилиЦЦа, кстати в крайнем компиляторе, надо бы на предыдущих проверить.

---------- Capture Output ----------> "K:\Program Files\Crimson Editor SVN286M\sjasmplus-win32-1.07-rc7\sjasmplus.exe" scl.asm
SjASMPlus Z80 Cross-Assembler v.20190304.3
scl.asm(24): error: [IF] Forward reference
scl.asm(31): error: [IF] Forward reference
Pass 1 complete (2 errors)
Pass 2 complete (2 errors)
writing 00258657
Pass 3 complete
Errors: 2, warnings: 0, compiled: 118 lines


> Terminated with exit code 1.

Но при этом скомпиленное работает, и в эмуле, и в virtual TR-DOS, что главное.

Работает потому что размер кода внутри блоков IF и ELSE одинаков. (+ в данном случае в IF используется разница адресов, на которую длина кода внутри IF/ELSE все равно не влияет) Иначе в общем случае могут быть проблемы. Разрулить в sjasmplus это по-нормальному по идее можно (не для всех случаев), но нетривиально.

Shiny
25.03.2019, 18:36
Если причина в секторах для моноблока


macro sectors datab,datae

IF low (datae-datab)=0
db high (datae-datab)
ELSE
db (1+high (datae-datab))
ENDIF

endm


то проще так



db high($FE+datae-datab)

zebest
25.03.2019, 20:33
Если причина в секторах для моноблока
нет, как раз basic версию компилил. Нуу значит повезло.