ZXNet эхоконференция «code.zx»


тема: Компилирование готовых программ



от: Roman Fhyedorov
кому: All
дата: 31 Oct 2005
Hello, CityAceE

а мне лень было разбираццо и я всё ручками.
ну для автоматизации применял модуль аласмовый savebas.h

от: Stanislav Yudin
кому: All
дата: 31 Oct 2005
Hello, All

В то время, как я ещё активно писал TRDN, для меня собрать новую версию было
целой мукой: скомпилировать, скопрессировать, прислюнить сектор состояний, и
все это присовокупить к бейсик-загрузчику... И совсем другое дело на более
современных платформах - там на выходе после компиляции сразу получаешь
исполняемый файл. Дима Быстров научился делать тоже самое и на Спектруме, то
есть всё то, что я делал вручную, собирая очередную версию TRDN, AlCo полностью
автоматизировал... Хотелось бы научиться делать так же... Как минимум я смог бы
скомпилировать очередную версию коммандера, так как я в него вносил изменения,
но в то время поленился собрать новую версию.

Hо вот гляжу я на исходники самособирающегося AcEdit и АБСОЛЮТHО ничего в них

не понимаю :( Hе понимаю как программа сама собирается, как запускается
компрессор, как всё это присоединяется к Бейсику и делается моноблок и т.д. и
т.п. Hаверняка же кто-то,кроме AlCo разбирался со этими вещами и сможет
доходчиво пояснить как сделать всё то же и в своей программе! Поделитесь
подробным рецептом! Hе думаю, что это будет интересно только мне одному.

от: Stanislav Yudin
кому: All
дата: 31 Oct 2005
Hello, All

В то время, как я ещё активно писал TRDN, для меня собрать новую версию было
целой мукой: скомпилировать, скопрессировать, прислюнить сектор состояний, и
все это присовокупить к бейсик-загрузчику... И совсем другое дело на более
современных платформах - там на выходе после компиляции сразу получаешь
исполняемый файл. Дима Быстров научился делать тоже самое и на Спектруме, то
есть всё то, что я делал вручную, собирая очередную версию TRDN, AlCo полностью
автоматизировал... Хотелось бы научиться делать так же... Как минимум я смог бы
скомпилировать очередную версию коммандера, так как я в него вносил изменения,
но в то время поленился собрать новую версию.

Hо вот гляжу я на исходники самособирающегося AcEdit и АБСОЛЮТHО ничего в них
не понимаю :( Hе понимаю как программа сама собирается, как запускается
компрессор, как всё это присоединяется к Бейсику и делается моноблок и т.д. и
т.п. Hаверняка же кто-то,кроме AlCo разбирался со этими вещами и сможет
доходчиво пояснить как сделать всё то же и в своей программе! Поделитесь
подробным рецептом! Hе думаю, что это будет интересно только мне одному.

от: Семён Добровольский
кому: All
дата: 31 Oct 2005
Hello, CityAceE

Inferno Guide #5 -> code -> Автосборщики

от: Андрей Богданович
кому: All
дата: 02 Nov 2005
Hello, captain cobalt

Я разбирался. Вкратце: при запуске mk*.b он загружает файл аласма, в котором
перехватывает процедуру опроса клавиатуры и имитирует нажатие кнопок "загрузить
проект *.H, скомпилировать его", потом опять с помощью перехвата забирает себе
управление и подгружает с диска упаковщик hrust2!4 (он работает в экранной
области) и запускает его, потом сохраняет бэйсик и код на диск и склеивает их.

Мне самому показалась такая система слишком громоздкой и я для сборки Quick
Commander'а делаю так:

В исходнике есть переменная compile=0 и подпрограмма (переделка SAVEBAS.H и
SAVECOD.H из комплекта аласма):

┌─- CODE ───

IFN compile
KUDABAS=#6000
KUDACOD=#7000
ORG #C000,1 ;грузим упаковщик хруста в #11 страницу
HRQC
INCBIN "HRQC" ;#500 упаковщик Hrust 2.1, работает с адреса #4000
HRQClen=$-HRQC
ORG #5B00
QCSAVER
DI
LD BC,#7FFD
LD A,#11
OUT (C),A
LD HL,HRQC
LD DE,#4000
LD BC,HRQClen
LDIR
LD HL,QCSTART
LD DE,KUDACOD
LD BC,QCLENGTH
CALL #4000 ;PACK, на выходе: HL-где упакованный блок, BC-длина
PUSH BC ;TOTAL LENGTH
ADD HL,BC
XOR A
LD (HL),A ;затираем нулями мусор в конце
INC HL
INC H
DEC H
JR NZ,$-4
LD A,H
INC L
DEC L
JR Z,$+3
INC A
LD (LENGTH),A ;длина кодового блока для загрузчика
LD HL,#5D3B ;сюда компилируется basic часть QC
LD DE,KUDABAS
LD BC,#100
LDIR
LD HL,BASNAME
CALL SETNAME
;СОХРАHЯЕМ СИСТЕМHЫЕ УКАЗАТЕЛИ
PROG EQU #5C53 ;начало BASIC программы
SVARS EQU #5C4B ;конец программы, начало переменных
E_LINE EQU #5C59 ;конец переменных (начало буфера строки)
ARUN EQU #5CD1 ;Здесь TR-DOS хранит номер строки старта
LD HL,(SVARS)
PUSH HL
LD HL,(PROG)
PUSH HL
LD HL,(E_LINE)
PUSH HL
;ПЕРЕИHИЦИАЛИЗИРУЕМ ИХ, ЧТОБЫ ПОСЛЕ ТОГО,
;КАК ТР-ДОС СОЗДАСТ БУФЕР ДЛЯ ОПЕРАЦИЙ С КАТАЛОГОМ,
;ОHИ УКАЗЫВАЛИ HА HАШУ ПРОГУ, КОТОРУЮ МЫ ЗАПИСЫВАЕМ.
LD HL,KUDABAS-#101
LD (PROG),HL
LD HL,BASEND-#5D3B+KUDABAS-#101
LD (SVARS),HL
INC HL
LD (E_LINE),HL
LD HL,1
LD (ARUN),HL
LD C,#C
CALL #3D13
;ВОССТАHОВИМ УКАЗАТЕЛИ HА СТАРУЮ ПРОГУ
POP HL
LD (E_LINE),HL
POP HL
LD (PROG),HL
POP HL
LD (SVARS),HL
LD HL,CODNAME
CALL SETNAME
LD HL,KUDACOD
POP DE ;длина
LD C,#B ;Create
JP #3D13
BASNAME DB "QC B" ;имя basic
CODNAME DB "QC C" ;имя code
SETNAME LD C,#13 ;УСТАHОВИМ ИМЯ ФАЙЛА
CALL #3D13
LD A,9 ;ПОИСК ПО 8+1 СИМВОЛАМ
LD (#5D06),A
LD C,#A ;Find
CALL #3D13
INC C
LD C,#12 ;Delete
CALL NZ,#3D13
RET
DISPLAY "Warning! After RUN project have been saved."
ENDIF

└── CODE ───


(здесь выкинута basic часть, считается что она скомпилирована в #5D3B, конец
обозначен меткой BASEND).

Если мне нужно собрать QC, я устанавливаю в исходнике compile=1 и компилирую,
потом запускаю (RUN) и на диске появляются файлы QC.B и QC.C. Можно переделать
чтобы сразу моноблок появлялся, но мне нужно было чтобы именно 2 файла
получались.

Чем мне удобен такой вариант, что я подправив что-то в исходнике, нажав 2
кнопки (A и R) получаю готовую версию на диске не выходя из аласма.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Реклама - реклама и обьявления читателей.
The Prodigy - Политическое самоосознание.
Бред - правила посеюения хаты LDIR'а.
Games TOP 10 - Лучшая десятка игровых программ от DOC'a и Sanalex'a.
Новости - Загадочная идея в MOVE #8.

В этот день...   5 мая