User Tag List

Показано с 1 по 10 из 27

Тема: Печать двухбайтового числа без знака и со знаком в машкоде

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,711
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Не очень я это понимаю. Потратить 524 такта в инициализации - лишнее нагроможение, а при печати каждого символа - норм.
    Ну можно конечно сделать в Basic.Init отдельную секцию, открывающую канал 2 при включенной опции ROM_OUTPUT. Сделаю.

    Кстати, а как можно реализовать CLS? Есть варианты, превосходящие LDIR по скорости? (10 кб кода на очистку экрана во фрейм не рассматриваем, код нужен по возможности компактный).

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    PS INPUT у вас реализован? Надо пример?
    Пример не помешает.

    У нас есть Console.ReadInt и ReadIntRange(min, max) для всего экрана (а не для канала 0), но он простенький.

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

  3. #2

    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    915
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    6 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Кстати, а как можно реализовать CLS? Есть варианты, превосходящие LDIR по скорости? (10 кб кода на очистку экрана во фрейм не рассматриваем, код нужен по возможности компактный).
    Вариант средний по скорости и длине:
    Код:
          ld hl,#4000
          ld de,#4001
          ld bc,#1800
          ld (hl),0
    loop1 dup 32
          ldi
          edup
          jp pe,loop1
          ld bc,#300
          ld (hl),7; байт атрибута
    loop2 dup 32
          ldi
          edup
          jp pe,loop2
          ret
    Последний раз редактировалось SaNchez; 04.01.2017 в 17:06. Причина: исправил косяк в выводе атрибутов

  4. #3

    Регистрация
    08.01.2007
    Адрес
    г. Красноярск
    Сообщений
    1,355
    Спасибо Благодарностей отдано 
    347
    Спасибо Благодарностей получено 
    1,508
    Поблагодарили
    307 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Кстати, а как можно реализовать CLS? Есть варианты, превосходящие LDIR по скорости? (10 кб кода на очистку экрана во фрейм не рассматриваем, код нужен по возможности компактный).
    Компактно и быстро:

    LD D,7;цвет атрибутов
    LD B,6
    LD HL,0
    ADD HL,SP
    LD SP,#5b00
    cls LD E,D
    PUSH DE;повторить 64 раза
    DJNZ $-64
    LD A,D
    OR A
    LD D,B
    LD B,48
    JR NZ,cls
    LD SP,HL
    RET

  5. #4

    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    915
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    6 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну это до тех пор, пока вдруг стек не укажет на ROM

  6. #5

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Пример не помешает.
    В первых версиях Sprite Graber'а имя файла (8 символов) с помощью ROM-editor'а запрашивалось вот так (в буфер по адресу Variables.input_buffer):
    Код:
    @chan_open              equ #1601
    @set_min                equ #16b0
    @editor                 equ #0f2c
    
    @flagx                  equ #5c71
    @k_cur                  equ #5c5b
    @err_sp                 equ #5c2d
    @worksp                 equ #5c61
    
    
    input_line:
            ld hl,flagx
            set 7,(hl)
            set 5,(hl)
            call set_min
    
            ld bc,#0001
            rst #30
            ld (hl),#0d
            ld (k_cur),hl
            ld hl,input_line_exit
            push hl
            ld (err_sp),sp
            call editor
            pop hl
            ld hl,(worksp)
            ld de,Variables.input_buffer
            ld b,#08
    input_line_copy:
            ld a,(hl)
            cp #0d
            jr z,input_line_exit
            ld (de),a
            inc hl
            inc de
            djnz input_line_copy
    input_line_exit:
            ld a,2
            call chan_open
            jp set_min
    - - - Добавлено - - -

    UPD: процедура нещадно портит err_sp, надо сохранять и восстанавилвать, иначе после любого rst #08 в ПЗУ случится вылет в параллельную вселенную.

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

    UPD2: Если случится переполнение буфера или всякое STOP in INPUT, буфер по адресу Variables.input_buffer не изменится. Все подобные спецэффекты можно обрабатывать в процедуре, адрес которой запоминается на стеке перед занесением sp в err_sp. set_min при любом исходе категорически рекомендуется во избежание зажора навсегда памяти в workspace Basic'а. chan_open - по вкусу
    Последний раз редактировалось Alex Rider; 07.01.2017 в 17:14.
    ZX Evolution Rev C + ZXM-SoundCard Extreme + NeoGS.

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

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

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

Похожие темы

  1. Вычисление числа Пи на ассемблере
    от perestoronin в разделе Разное
    Ответов: 330
    Последнее: 06.08.2025, 15:04
  2. ABS и SGN в машкоде
    от Oleg N. Cher в разделе Программирование
    Ответов: 19
    Последнее: 10.01.2017, 04:14
  3. Мнемокоманды и числа.
    от ALKO в разделе Программирование
    Ответов: 0
    Последнее: 15.02.2014, 03:49
  4. Определение числа сторон
    от mungo в разделе Внешние накопители
    Ответов: 1
    Последнее: 16.03.2012, 18:06
  5. Дисковод Sankyo - кому знаком?
    от nikor4 в разделе Внешние накопители
    Ответов: 3
    Последнее: 07.10.2011, 06:19

Ваши права

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