User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

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

  1. #1

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,641
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

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

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

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

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

  3. #2

    Регистрация
    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

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

    По умолчанию

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

  5. #4

    Регистрация
    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.

  6. #5

    Регистрация
    06.09.2025
    Адрес
    г. Киев, Украина
    Сообщений
    240
    Спасибо Благодарностей отдано 
    412
    Спасибо Благодарностей получено 
    29
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question

    Какими способами можно компилировать код на Sinclair Basic?

    Или, возможно, есть способ сделать автозагрузку для программы при загрузке образа кассетной ленты?
    ÷)

  7. #6

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,450
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    162
    Поблагодарили
    119 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от yevrowl Посмотреть сообщение
    Какими способами можно компилировать код на Sinclair Basic?

    Или, возможно, есть способ сделать автозагрузку для программы при загрузке образа кассетной ленты?
    bas2tap или zmakebas

    Этот пользователь поблагодарил Shiny за это полезное сообщение:

    yevrowl(25.09.2025)

  8. #7

    Регистрация
    06.09.2025
    Адрес
    г. Киев, Украина
    Сообщений
    240
    Спасибо Благодарностей отдано 
    412
    Спасибо Благодарностей получено 
    29
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Что-нибудь можно сделать, если после заставки пробел сбрасывает?

    Код:
    BREAK - CONT REPEATS
    При этом другие клавиши нормально запускают основную программу.
    ÷)

  9. #8

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,450
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    162
    Поблагодарили
    119 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    что-что?(:

  10. #9

    Регистрация
    06.09.2025
    Адрес
    г. Киев, Украина
    Сообщений
    240
    Спасибо Благодарностей отдано 
    412
    Спасибо Благодарностей получено 
    29
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post

    Цитата Сообщение от Shiny Посмотреть сообщение
    что-что?(:
    См. вложение — mastmind.7z
    ÷)

  11. #10

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,450
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    162
    Поблагодарили
    119 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как вариант
    75 IF INKEY$=" " THEN GO TO 75
    или после заставки продолжать загрузку и вывести сообщение "press any key" после завершения.

    Этот пользователь поблагодарил Shiny за это полезное сообщение:

    yevrowl(11.10.2025)

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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