Важная информация

User Tag List

Показано с 1 по 4 из 4

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

  1. #1
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,566
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    395
    Спасибо Благодарностей получено 
    1,205
    Поблагодарили
    393 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

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

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

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

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Master Аватар для bugsy
    Регистрация
    17.01.2005
    Адрес
    Tyu-Men
    Сообщений
    678
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а мне лень было разбираццо и я всё ручками.
    ну для автоматизации применял модуль аласмовый savebas.h
    Сайт тюменских спектрумистов: http://hds.ncn.ru
    Архив спектрумовских исходников: http://opensourcezx.untergrund.net

  4. #3
    Activist Аватар для captain cobalt
    Регистрация
    13.03.2005
    Адрес
    Пермь
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #4
    Activist Аватар для Spectre
    Регистрация
    26.01.2005
    Адрес
    Минск
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

    Код:
     
    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
    ;СОХРАНЯЕМ СИСТЕМНЫЕ УКАЗАТЕЛИ
    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
    ;ПЕРЕИНИЦИАЛИЗИРУЕМ ИХ, ЧТОБЫ ПОСЛЕ ТОГО,
    ;КАК ТР-ДОС СОЗДАСТ БУФЕР ДЛЯ ОПЕРАЦИЙ С КАТАЛОГОМ,
    ;ОНИ УКАЗЫВАЛИ НА НАШУ ПРОГУ, КОТОРУЮ МЫ ЗАПИСЫВАЕМ.
    		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
    ;ВОССТАНОВИМ УКАЗАТЕЛИ НА СТАРУЮ ПРОГУ
    		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 ;УСТАНОВИМ ИМЯ ФАЙЛА
    		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
    (здесь выкинута basic часть, считается что она скомпилирована в #5D3B, конец обозначен меткой BASEND).

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

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

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 25
    Последнее: 21.03.2008, 07:57
  2. Тестирование программ
    от Vitamin в разделе Программирование
    Ответов: 5
    Последнее: 23.01.2005, 21:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •