Важная информация
RSS лента

Shiny

MSX-C: мое разочарование

Оценить эту запись
Убил на установку примерно 5 часов. Помогло это описание. Как водится., пример компилируется шустро и работает:



А вот с экранным режимом не так просто, компилятор давится на screen(4);

оказывается, нужно проще:
Код:
screen( (TINY)4 );
а дальше печальнее: вызов pset() приводит компилятор к истерике. Печально, блин, что столько времени убито на это дерьмо.
Метки: Нет Добавить / редактировать метки
Категории
Без категории

Комментарии

  1. Аватар для axe_chita
    Можно задать несколько вопросов?
    Первый: насколько вы плотно работали с Си? В случае с ASCII MSX-C мы работаем с стандартом K&R C, а он имеет сильные отличия от стандарта ANSI C.
    Второе: можно ли увидеть листинг программы которую вы компилируете, так же ключи компилятора, а так же какие библиотеки вы используете?
    Третье: можноли увидеть текст "истерики" которую выдал компилятор.
    И маленькое замечание: приведение типов нормальная практика при программировании на Си, она уменьшает количество шансов столкнуться на не предсказуемое/неопределенное поведение как и компилятора, так и на исполнении программы.
  2. Аватар для Shiny
    Цитата Сообщение от axe_chita
    Можно задать несколько вопросов?
    Первый: насколько вы плотно работали с Си? В случае с ASCII MSX-C мы работаем с стандартом K&R C, а он имеет сильные отличия от стандарта ANSI C.
    Второе: можно ли увидеть листинг программы которую вы компилируете, так же ключи компилятора, а так же какие библиотеки вы используете?
    Третье: можноли увидеть текст "истерики" которую выдал компилятор.
    И маленькое замечание: приведение типов нормальная практика при программировании на Си, она уменьшает количество шансов столкнуться на не предсказуемое/неопределенное поведение как и компилятора, так и на исполнении программы.
    программа была такая:
    Код:
    #include <stdio.h>
    #include <glib.h>
    
    
    int main()
    {
    
    unsigned int i;
    screen((TINY)4);
    ginit();
    
    pset (0,0,4,0);
    for (i = 0; i < 212; i++) {
    /*pset(i,i,(uchar)i,(char)0);*/
    }
    
    getchar();
    screen((TINY)0);
    }
  3. Аватар для axe_chita
    Здравствуйте, извините за задержку с ответом
    Постараемся пройтись по коду и хотябы визуально отметить подозрительные места
    (к сожалению я не развернул Ascii C в эмуляторе)

    #include <stdio.h>
    #include <msxbios.h> /* msxbios.h надо обязательно подключать т.к. функция screen() описана в нем а не в glib.h*/
    #include <glib.h>


    int main()
    {

    unsigned int i;
    screen((TINY)4);
    ginit();

    pset (0,0,4,0);
    for (i = 0; i < 212; i++) {
    /* pset(i,i,(uchar)i,(char)0); uchar не определен в stdio.h Там определен тип TINY соответствующий знаковому char, соответственно логичнее использовать его. Далее, желательно отслеживать чтоб координаты и номер цвета не выходили за ограничения режима экрана 4 (256х192 16 цветов)*/
    pset(i % 256,i % 192,(TINY)i % 16,(TINY)0);/* используя остаток от целочисленного деления координаты X,Y добиваемся того чтобы точка всегда выводилась на экран, а цвет точек соответственного менялся от 0 до 15 */
    }

    getchar();
    screen((TINY)0);
    }
    и линковать программу нужно и с графической библиотекой glib.rel так и с библиотекой msxbios.rel
    Вроде бы все, постараюсь развернуть компилятор С и проверить исходник на работоспособность.
    http://www.fvue.nl/wiki/MSX-C_manual...ry_System_Disk
    Обновлено 30.06.2017 в 19:22 axe_chita
  4. Аватар для Shiny
    спасиьо за помощь, попробую.
  5. Аватар для Shiny
    Теперь ругается на
    [b:\INCLUDE\msxbios.h] line 0 column 17: redeclaration of 'NAT'
    [b:\INCLUDE\msxbios.h] line 2 column 21: duplicate tag '_regs'
    [b:\INCLUDE\msxbios.h] line 8 column 2: redeclaration of 'REGS'
  6. Аватар для axe_chita
    Цитата Сообщение от Шынни
    Теперь ругается на
    [b:\INCLUDE\msxbios.h] line 0 column 17: redeclaration of 'NAT'
    [b:\INCLUDE\msxbios.h] line 2 column 21: duplicate tag '_regs'
    [b:\INCLUDE\msxbios.h] line 8 column 2: redeclaration of 'REGS'
    на самом деле первое и третье сообщение является предупреждением, а не ошибкой в которой компилятор предупреждает нас о переопределении типjd NAT и REGS
    Второе сообщение чуть серьезнее "повторная метка _regs"
    Вообще возникает впечатление что вы пользуетесь модифицированными хидерами .
    Вы сможете привести содержимое ваших хидеров stdio.h, msxbios.h, glib.h ?
  7. Аватар для Shiny
    .h взяты из описания:

    http://www.lavandeira.net/2014/12/re...onment-part-1/

    Если есть, варианты, то предложите, попробую заменить.
  8. Аватар для axe_chita
    Извиняюсь что надолго пропал, очень долго пытался подружить BlueMSX и MSXDOS2 но к сожалению безуспешно.
    Потом был аврал на работе, и все было поставлено на паузу.
    Но неделю назад, совесть меня всетаки замучала, и я решил добить чтоза чудеса творятся при компиляции исходного кода
    Во-первых средой разработки был выбран ASCII C 1.10 и соответственно MSX DOS1 (Танцы с DOS2 я оставил нак потом)
    Во-вторых код который компилятор переваривает до стадии исполняемого файла стал выглядит так
    #include <stdio.h>
    #include <glib.h>

    int main()
    {

    unsigned int i,x,y;
    TINY color,op;
    screen((TINY)4);
    ginit();

    cls();

    pset (0,0,(TINY)4,(TINY)0);
    for (i = 0; i < 212; i++) {
    /* pset(i,i,(uchar)i,(char)0); uchar не определен в stdio.h Там определен тип TINY соответствующий знаковому char, соответственно логичнее использовать его. Далее, желательно отслеживать чтоб координаты и номер цвета не выходили за ограничения режима экрана 4 (256х192 16 цветов)*/
    x=(i % 256);
    y=(i % 192);
    color=i % 16;

    pset(x,y,color,PSET);/* используя остаток от целочисленного деления координаты X,Y добиваемся того чтобы точка всегда выводилась на экран, а цвет точек соответственного менялся от 0 до 15 */
    }

    getchar();
    screen((TINY)0);
    }


    В третих код пакетного файла которым компилируется Си шный файл выглядит так
    cf %1
    rem в командной строке fpc обязательно должна быть mlib в ней содержаться описания функций CURSES, GLIB, MSXBIOS, MATH
    fpc lib mlib %1
    cg -k %1
    m80 =%1
    rem del %1.mac
    rem соответственно линковщику указываем библиотеку mlib
    l80 ck,%1,clib/s,mlib/s,crun/s,cend,%1/n/e:xmain


    результат компиляции COM файл https://cloud.mail.ru/public/Gs54/fbap1dUTH

    соответственно результат исполнения
    https://cloud.mail.ru/public/JHVa/nBdLVS4Qz
    Обновлено 05.10.2017 в 19:08 axe_chita (не смог вставить скриншоты)

Трекбэков