User Tag List

Страница 25 из 38 ПерваяПервая ... 212223242526272829 ... ПоследняяПоследняя
Показано с 241 по 250 из 377

Тема: Ищу Си для Z80

  1. #241

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    931
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Версия компилятора - 3.5.0. Функция понастоящему нужна. Иначе меню на экран даже не выведешь...

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

    Я, наверно, ошибся. Нельзя чередовать посимвольный вывод и вывод последовательности символов. Буду делать новую функцию - всё через последовательность символов.
    Я решил параметры брать не через восстановление стека, а через чтение памяти по базе указатель стека+2 (два байта занимает адрес возврата).
    ¡Un momento, señor fiscal!


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

  3. #242

    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пути SDCC неисповедимы в работе. Лишь бы у вас сил хватило, понять

    Почти свежак. 3.6.0 уже на дворе.
    От версии к версии исходники не компилируются (часто) на SDCC. Лучше тут разобраться, в чем причина. Так с на скоку тяжело понять. Я Пас. Вы исходные данные написали, может, кто поможет.
    Последний раз редактировалось OrionExt; 09.09.2016 в 01:14.
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  4. #243

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    931
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Разобрался в чём причина. Компилятор две переменных типа char сохранил в стеке как одну пару байтов, а я думал что каждую переменную сохранит в отдельной паре.
    Исправленная функция.
    void cursor(char x, char y){
    __asm
    //call 3405 - лучше сброс временных атрибутов вынести в отдельную функцию
    ld hl, #2
    add hl, sp
    ld b, (hl)
    inc hl
    ld c, (hl)
    ld a,#22
    rst 16
    ld a, c
    rst 16
    ld a, b
    rst 16
    ret
    __endasm;
    }
    ¡Un momento, señor fiscal!


  5. #244

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

    По умолчанию

    Код:
    void Basic_AT_ROM_stdcall (unsigned char x, unsigned char y) __naked {
    __asm
      ;LD   IY,#0x5C3A
      ;LD   A,#2
      ;CALL 0x1601 // IX-safe
      LD   A,#22
      RST  16
      POP  HL
      POP  BC
      PUSH BC
      LD   A,B     // x
      RST  16
      LD   A,C     // y
      RST  16
      JP   (HL)
    __endasm;
    } //Basic_AT_ROM_stdcall
    Последний раз редактировалось Oleg N. Cher; 09.09.2016 в 15:36.

  6. #245

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    931
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Написал меню на Си. Размер кодового блока 353 байта. Меню совсем простое, можно на бейсике такое сделать. Сколько в памяти будет занимать аналогичная программа на бейсике?
    Непонятно, почему при очистке экрана не закрашивается область системных сообщений? Хотя вроде нормальную функцию очистки экрана написал.

    void cls(){
    __asm
    call 3435
    ld a, #2
    call 5633
    ret
    __endasm;
    }
    Вложения Вложения
    • Тип файла: 7z Pr1.7z (447 байт, Просмотров: 84)
    ¡Un momento, señor fiscal!


  7. #246

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,295
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    203
    Спасибо Благодарностей получено 
    1,459
    Поблагодарили
    949 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Smalovsky Посмотреть сообщение
    ld a, #2
    call 5633
    почитай про каналы, для системных сообщений применяется другой номер

  8. #247

    Регистрация
    21.05.2006
    Адрес
    Canada
    Сообщений
    78
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Здравствуй,

    Код:
    void cursor(char x, char y){
    __asm
    ld hl, #2
    add hl, sp
    ld a, #2
    call 5633
    ld b, (hl)
    inc hl
    inc hl
    ld c, (hl)
    ....
    Вы уверены, что "call 5633" не изменяет HL?

    SDCC толкает символов в виде одного байта в стек. Так оно и должно быть "ld b,(hl); inc hl; ld c,(hl)"

    Еще одна проблема связана с регистром IY.

    1. Если у вас есть обработчик прерываний на 0x38 ром работает, ваша программа не может изменять IY.
    2. Если вы используете Rom подпрограммы для выполнения таких задач, как печать, IY должен быть установлен на значение, ожидаемое РОМ.

    Чтобы предотвратить SDCC от модификации IY вы должны компилировать с флагом "--reserve-regs-iy". Однако это не остановит SDCC от использования IY, если кадр стека становится большим.

    Лучший способ на гх, чтобы обойти эту проблему, чтобы отключить прерывания или заменить РОМ ISR и убедитесь, что IY устанавливается на ожидаемое значение, прежде чем сделать Rom вызовы, которые зависят от него. Если вы не сделаете это, вы будете испытывать странные сбои.




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


    Hi,

    Код:
    void cursor(char x, char y){
    __asm
    ld hl, #2
    add hl, sp
    ld a, #2
    call 5633
    ld b, (hl)
    inc hl
    inc hl
    ld c, (hl)
    ....
    You're sure "call 5633" does not modify HL?

    sdcc pushes characters as single bytes onto the stack. So it should be "ld b,(hl); inc hl; ld c,(hl)"

    Another problem has to do with the IY register.

    1. If you have the rom interrupt routine at 0x38 running, your program cannot modify IY.
    2. If you use rom subroutines to carry out tasks like printing, IY must be set to the value expected by the rom.

    To prevent sdcc from modifying IY you must compile with the "--reserve-regs-iy" flag. However this will not stop sdcc from using IY if the stack frame becomes large.

    The best way on the zx to get around this problem is to disable interrupts or replace the rom isr and make sure IY is set to the expected value before you make rom calls that depend on it. If you don't do this you will experience odd crashes.
    [свернуть]
    Последний раз редактировалось Alcoholics Anonymous; 10.09.2016 в 02:45.

  9. #248

    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    931
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    73 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Что бы экран очищался правильно, нужно атрибуты устанавливать не только для основного экрана, но и для окна системных сообщений.

    void setattr(char attrib){
    __asm
    ld hl, #2
    add hl, sp
    ld a, (hl)
    ld (23693), a
    ld (23624),a
    __endasm;
    }
    ¡Un momento, señor fiscal!


  10. #249

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

    По умолчанию

    Цитата Сообщение от Alcoholics Anonymous Посмотреть сообщение
    Вы уверены, что "call 5633" не изменяет HL?
    5633 точно изменяет hl. Координаты возьмутся из космоса.
    ZX Evolution Rev C + ZXM-SoundCard Extreme + NeoGS.

  11. #250

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Общепринятый.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

Страница 25 из 38 ПерваяПервая ... 212223242526272829 ... ПоследняяПоследняя

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

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

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

Ваши права

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