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

User Tag List

Страница 1 из 22 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 211

Тема: бейсик-помощь

  1. #1
    Veteran Аватар для ZEman
    Регистрация
    28.10.2005
    Адрес
    Омск
    Сообщений
    1,806
    Благодарностей: 286
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию бейсик-помощь

    кто может подсказать, поделиться опытом как сделать пару простейших вещей на бейсике.
    итак, для примера:
    есть некая простейшая программка на басике в которой управляешь точкой на экране.
    точка может двигаться вверх, вниз, влево, вправо с помощью клавиш Q, A, O, P.
    также есть клавиша S по нажатии на которую происходит сохранение экрана на ленту (SAVE "" SCREEN$).
    есть пара вопросов которые давно уже меня мучают.

    1. как сделать сохранение SAVE без появления стандартной надписи в служебной области экрана (start tape, then preess anu key).
    дабы не затирались надписи в служебной части экрана ?

    вообще-то я знаю один способ, изображение попиксельно заносится в указанную память (например 30000).
    затем делается сохранение save ""code 30000,6912.
    но хотелось бы именно просто сейвом сохранить экран.

    2. точка может двигаться по любым координатам x, y.
    x (0-255), y(0-175).
    а есть ли какой-то способ завести точку в служебную область экрана ?
    я могу вносить в служебную область различные символы (текст), но вот точки и линии никак не выходит.
    Вложения Вложения
    • Тип файла: zip demos.zip (1.8 Кб, Просмотров: 43)
    Последний раз редактировалось ZEman; 31.07.2016 в 05:52.

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

  3. #2
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    2,679
    Благодарностей: 2035
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZEman,

    1. ЕМНИП, без примененния кодовых процедур - никак. Либо переносите экран в буфер и сохраняетесь оттуда. Или используете процедуру: сохранение файла без заголовка из книги "...для пользователей и программистов". Вариант без кодовой процедуры: сохраняться на дискету в tr-dos.

    2. Cредствами чисто бейсика этого никак не добиться. Диалект PRO-DOS умеет рисовать в служебной части экрана, но занимает память и не имеет оператора POINT.
    Последний раз редактировалось null_device; 31.07.2016 в 07:43.
    Когда есть, но не знаеш где - это все равно, что нету.

  4. #3
    Veteran Аватар для ZEman
    Регистрация
    28.10.2005
    Адрес
    Омск
    Сообщений
    1,806
    Благодарностей: 286
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от null_device Посмотреть сообщение
    ZEman,

    Или используете процедуру: сохранение файла без заголовка из книги "...для пользователей и программистов". POINT.
    а в какой именно книге это описано, не подскажите ?

  5. #4
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    2,679
    Благодарностей: 2035
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEman Посмотреть сообщение
    в какой именно книге это описано
    Ларченко\Родионова: ZX-Spectrum (и TR-DOS) для пользователей и программистов. Глава: использование подпрограмм ПЗУ.
    Когда есть, но не знаеш где - это все равно, что нету.

  6. #5
    Activist Аватар для Kalantaj
    Регистрация
    15.04.2008
    Адрес
    г. Кривой Рог, Украина
    Сообщений
    336
    Благодарностей: 220
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEman Посмотреть сообщение
    а в какой именно книге это описано, не подскажите ?
    Имеем следующее:

    Скрытый текст


    Загрузка и запись файлов на магнитофон

    Как правило, файл, записанный на магнитной ленте, состоит из двух блоков, первый из которых называется заголовком и содержит информацию о файле (тип, длина и т. п.), второй — собственно данные. Подпрограмма ПЗУ загружает и обрабатывает заголовок и на основе полученной информации загружает данные.
    Длина заголовка составляет 17 байт:

    байт 0 — тип файла:
    0 — бейсик-программа;
    1 —числовой массив;
    2 — символьный массив ;
    3 — двоичный (кодовый) файл.
    байты 1...10 — имя файла;
    байты 11, 12 —длина блока данных;
    байты 13, 14 — для типа 0: номер строки автозапуска;
    — для типа 3: начальный адрес загрузки;
    байт 14 — для типов 1 и 2 — имя и тип массива в
    следующей форме:
    биты 0...4 — имя массива (А...Z);
    бит 5 — 0, если массив числовой;
    бит 6 — 1, если массив символьный;
    бит 7 — всегда установлен;
    байты 15,16 — длина бейсик-программы.


    Загрузка файла без заголовка: CALL 1366 (#0556)

    Процедура предназначена для загрузки с ленты блока кодов и проверки записи. Она используется следующим образом:

    LD IХ,<начальный адрес>
    LD DЕ,<длина блока>
    LD А,<флаг>
    SCF
    CALL 1366 ;вызов процедуры загрузки
    RET

    В индексный регистр IX загружается адрес ячейки памяти, начиная с которой будет производиться проверка или загрузка блока кодов. В регистровую пару DE помещается длина загружаемого файла в байтах, а в регистр А — так называемый флаговый байт. Он равен нулю, если ожидается заголовок, и 255 — если тело файла (возможны и другие значения флагового байта). Загрузка кодового блока будет производиться, если перед выполнением процедуры был установлен флаг CY, проверка блока — если CY сброшен.
    По возврату из процедуры, если загрузка (проверка) произведена успешно, флаг CY устанавливается, в противном случае — сбрасывается.
    Прервать загрузку (проверку) блока можно, нажав клавишу Break, при этом на экран выдается сообщение BREAK — CONT repeats. Для запрещения прерывания загрузки нужно несколько изменить программу вызова процедуры:

    LD IХ,<начальный адрес>
    LD DE,<длина блока>
    LD А,<флаг>
    SCF
    INC D
    ЕХ AF,AF'
    DEC D
    DI
    LD A,15 ;номер начального цвета бордюра + 8
    OUT (254),A
    CALL 1378
    LD А,7 ;восстановление цвета бордюра
    OUT (254),А
    EI
    RET
    Если при возврате из этой подпрограммы флаг переноса равен нулю,
    то это означает, что либо загрузка (проверка) произведена с ошибкой, либо во время загрузки была нажата клавиша Break. Более точно установить причину ошибочного завершения операции можно, опросив клавиатуру.

    Запись файла без заголовка; CALL 1218 (#04С2)

    Подпрограмма служит для записи данных на магнитофон и вызывается аналогично процедуре загрузки:

    LD IХ,<начальный адрес>
    LD DЕ,<длина блока в байтах>
    LD А,<флаг>
    CALL 1218
    RET

    При нажатии клавиши Break выполнение процедуры будет прервано и выдано сообщение BREAK — CONT repeats, чего можно избежать, запустив процедуру не с адреса 1218, а с 1222.


    [свернуть]


    Таким образом, чтобы записать картинку, которую потом можно будет загрузить командой LOAD "" CODE или LOAD "" SCREEN$, надо записать два кодовых блока:
    1. Длиной 17 байт с флагом заголовка
    2. Длиной в 6912 байт с флагом кодового блока.
    Последний раз редактировалось Kalantaj; 31.07.2016 в 08:01.

  7. #6
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,426
    Благодарностей: 643
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    1. Есть выход делая POKE на переключение каналов вывода (ну допустим на принтер кинуть их, один фиг zx-принтера ни у кого нету, заголовки печататся не будут).
    2. Выводить точку в служебную область бейсик не даст, но это легко обходится СВОЕЙ процедурой печати точки (т.е. вместо PLOT x,y - вызывать что-то вроде FN x,y или тупо GOSUB с переменными).
    Можно RANDOMIZE USR, но это уже асм

  8. #7
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    2,679
    Благодарностей: 2035
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    на принтер кинуть их, один фиг zx-принтера ни у кого нету, заголовки печататся не будут
    И работать на некоторых моделях спектрумах тоже. Имел "удовольствие" столкнуться с зависающими программами, если интерфейс принтера был "своеобразно" реализован.
    Когда есть, но не знаеш где - это все равно, что нету.

  9. #8
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,426
    Благодарностей: 643
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от null_device Посмотреть сообщение
    И работать на некоторых моделях спектрумах тоже. Имел "удовольствие" столкнуться с зависающими программами, если интерфейс принтера был "своеобразно" реализован.
    Да, есть такое дело.
    Но ведь человек просит чисто для собственного юзанья, значит если прокатит - то и пущай себе пользует на здоровье...
    (не будет ведь он писать коммерческий граф-редактор на бейсике, да с распостранением по всему миру, учитывая что zx-мир остался фиг да нифига...)

  10. #9
    Activist Аватар для Kalantaj
    Регистрация
    15.04.2008
    Адрес
    г. Кривой Рог, Украина
    Сообщений
    336
    Благодарностей: 220
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEman Посмотреть сообщение
    как сделать сохранение SAVE без появления стандартной надписи в служебной области экрана (start tape, then preess anu key).
    дабы не затирались надписи в служебной части экрана ?
    Программа будет выглядеть примерно так:

    LD IХ,zagolovok ; указываем где лежат 17 байт заголовочных данных
    XOR A; указываем что тип - заголовок
    LD DЕ,17; указывем длину - 17 байт
    CALL 1218 ; вызываем процедуру записи в ПЗУ
    LD IХ,16384 ; начало экранной области
    LD DЕ,6912 ; длина картинки
    LD А,255; указываем что запишем кодовый блок
    CALL 1218 ; производим запись
    JP 56 ; переход на опрос клавиатуры с последующим возвратом в бейсик.
    zagolovok db #03, "screen ", #00, #1b, #00, #40, #0, #0

    Чтоб не ломал голову как это реализовать, в приведенной тобой программе я добавил 0 строку с REM, где разместил код записи блока, а в 600 строке сделал вызов этого блока. Единственный "косяк" такого способа - плохо просматривать листинг программы.
    В аттаче - измененная твоя программа.

    - - - Добавлено - - -

    Чтоб не кохаться с плохопросматриваемым листингом программы во время редактирования, можно сделать так - записать одну программу, в которой будет только строка
    0 REM CODEBLOCK (кодовый блок для записи картинки)

    и вторую программу - основную. После редактирования второй программы (основной) сделать MERGE "" - слить программу и кодовый блок для записи, а затем записать всё вместе на ленту.

    - - - Добавлено - - -

    Я сам когда-то ну ОЧЕНЬ давно делал похожую программу на бейсике. Только управление было от Кемпстон-джойстика. При нажатии на FIRE ставило точку. Плюс была кнопка включающая INVERSE и другая - OVER. Плюс ещё одна - постоянное рисование/отображение точки как курсора позиции.
    Вот как-то так.
    Потом ещё добавлял опрос кнопок 1-7, выбирающие цвет точки, но, как сами понимаете, из-за клешинга ничего хорошего не вышло.
    Вложения Вложения

  11. Эти 2 пользователя(ей) поблагодарили Kalantaj за это полезное сообщение:
    AzAtom (04.08.2016), ZEman (31.07.2016)

  12. #10
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,426
    Благодарностей: 643
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Немного оффтоп, но навеяло: Световой карандаш - девайс описаный в "Периферия своими руками" например. На ЖК-экранах видимо работать не будет? Или есть варианты (конечно всякий блуд с миганием брихта на знакоместе не надо даже думать).
    Помнится там тоже для теста была сверхмедленная прога на бейсике, которая тоже криво ставила точки (ну чем не QAOP, почти те-же муки)...
    P.S. Всяким инженерам-железячникам на заметку: А слабо раздербанить старый (в смысле ненужный) телефон с датчиком позиции и забабахать приблуду которая карандаш.
    Видится как стилус со своей батарейкой + некая НЁХ которая на дисплей надевается и считывает позицию стилуса относительно себя (т.е. прилепляется в левом-верхнем углу скажем) и данные гонит в комп (по любому порту, например принтеровскому. Да хоть мышкиному...)
    Ну и прога которая ловит данные и ставит точки - делов-то...
    Последний раз редактировалось Destr; 31.07.2016 в 10:39.

Страница 1 из 22 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Руссифицированный бейсик
    от Den1982 в разделе Программирование
    Ответов: 16
    Последнее: 11.04.2016, 02:20
  2. Про бейсик
    от yur в разделе Программирование
    Ответов: 23
    Последнее: 17.02.2014, 20:26
  3. напомните про бейсик
    от goblinish в разделе Программирование
    Ответов: 7
    Последнее: 22.06.2012, 04:14
  4. Ищу документацию по Бейсик С 1.10
    от Жека:) в разделе Разное
    Ответов: 0
    Последнее: 28.02.2009, 09:28

Ваши права

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