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

User Tag List

Страница 4 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 31 по 40 из 48

Тема: Паскаль о котором не знали...

  1. #31
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    Можно сортировать любое "множество" (в конце концов можно эмулировать поведение реализуя нужный интерфейс)
    ой ли? а где множества реализованы, кроме в Борман Паскаль?


    Цитата Сообщение от bigral Посмотреть сообщение
    Кроме того стек реализованный в процессорах это МАССИВ с дополнительной функцией быстрого занесения\вычитывания по специальному указателю.
    упрощенная аналогия

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

  3. #32
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    Самое интересное - это применение. Например, можно ли сортировать двухсвязный список? и применима ли модель стека?

    На zx я тоже баловался с Паскалем из-за рекурсивного алгоритма. Но Hisoft беден по сравнению с Borland.

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



    чот я не понял - вроде бы должно быть A B G F
    Не, он засовывает AB спереду, а FG сзаду. В обратном порядке.

    А Множества (Sets) реализованы в CLSN Pascal

    type
    dir_type = (up,down,left,right)
    dir_list = set of dir_type;

    Тут меня другое поразило:
    Вот эта строчка означает, что минимально программируя можно считывать джойстики!
    isEmpty := (deq.front=nil);
    В строчке проверяется булево значение поля front в Деке. То есть в скобках - Вопрос: Равно ли значение deq.front = nil?

    Точно также можно проверять джойстики!!!
    В CLSN как и в PL65 они заданы массивом системных адресов.

    Но никто не сказал, действует ли системная логика Атари в CLSN! (могла быть перепрограммирована...)

    Теперь знаю - действует.

    Вот вариант для Бейсика:
    20 S = STICK(S)
    30 DX = (S = 5 OR S = 6 OR S = 7) - (S = 9 OR S = 10 OR S = 11)
    40 DY = (S = 5 OR S = 9 OR S = 13) - (S = 6 OR S = 10 OR S = 14)
    50 RETURN

    Для CLSN напишу позже...
    zen
    Последний раз редактировалось ezswift; 27.07.2018 в 15:16.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  4. #33
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а, миль пардон, название смутило.

  5. #34
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я не проверял, так как нуня писать программку, но про джойстики, приблизительно так:

    Код:
    (* Globals *)
    type
      stk = record
                dx,dy: byte; (* to be returned to main program *)
              end;
    var
      s: byte;
    
    procedure rdStick();
      var i: integer; s: byte;
    begin
      for i := 0 to 1 do begin
        s := stick[i];
        stk.dx := (s=5 or s=6 or s=7) - (s=9 or s=10 or s=11);
        stk.dy := (s=5 or s=9 or s=13) - (s=6 or s=10 or s=14);
      end;
    end;
    Это - О-о-очень быстро.

    И поправил быстро. stick[] - это системная переменная Паскаля.
    zen
    Последний раз редактировалось ezswift; 27.07.2018 в 16:03.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  6. #35
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    на бейсике это выглядело так:

    REPEAT
    UNTIL STICK(0)<>15
    S=STICK(0)

    205 V=(S=13)-(S=14);14-вверх,13-вниз
    NY=PY+V
    V=(S=7)-(S=11);7-вправо,11-влево
    NX=PX+V

  7. #36
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    И ещё.
    Если в модели Deque не применять подпрограммы для "Сзаду", то это будет Кошерный Стэк, так как все остальные подпрограммы работают и с ним.

    Мне бы хотелось написать библиотеку для Двусвязного списка, но пока - в поиске.
    Он, бедолага, вообще "За всё - про всё..." . Не могу определить НЕОБХОДИМЫЕ!

    А применение Стэка - это линейное меню.
    То есть, как хранилище всёх подменю...
    Высвечено последнее (на вершине стэка)
    Если не нужно, Esc. Стирается.
    Предыдуще-Вызванное-Подменю высвечивается.

    Собственно для ЭТОГО был создан Компьютер.
    Автоматизация, майт-ли...
    zen

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

    А ТАМ учтены ещё и диагональные движения.
    Я соглашусь, что это - не везде обязательно.
    Последний раз редактировалось ezswift; 27.07.2018 в 16:21.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  8. #37
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Моя Борьба.

    Здравствуйте, мои дорогие и уважаемые восьми-БИТНИКИ и восьми-ХИППИ!

    Снова с Вами я, Евгений Золотарёв и сегогдня меня торкнуло в философию.

    Ну, скажем, в философию языков программирования. За исключением Бейсика!!!
    Так вышло, что я его сразу отрыгнул...

    Как ни странно, но здесь на форуме, я почти НИЧЕГО не писал о ПЕРВОЙ моей любви в программировании. Языке Си.

    Это была ПЕРВАЯ любовь! Значит, смелая, трудная и сумбурная.

    Я искал Си, но это не был КАКОЙ-ТО из РАЗНЫХ диалектов.
    Мне нужен был ЕДИНСТВЕННЫЙ!

    Им стал диалект CC8.

    Начинал я с доступного, с Deep Blue C, прошел через разные (были весьма кручёные!) ... и НАКОНЕЦ!.. Вот ОНА - ЛЮБОВЬ!!!

    Что я для неё сделал?
    Родил библиотеку непосредственного доступа к видеопамяти и библиотеку доступа к куче, в смысле к оставшейся, после компиляции ОЗУ. (Ищите НЮАНС!!!)

    Устал!!!

    Далее, не стал возиться и стал искать новые смыслы в языках.

    Нашёл в Лиспе.

    Так как никто, кроме меня с ним и не возился, пришлось БУРАВИТЬ ПОРОДУ!
    Написал приличные (разумеется, никому не нужные...) библиотеки, макросы и пр.

    Просто, язык, - к этому моменту, уже 30 лет не мог предложить НИЧЕГО из области ПРОГРАММИРОВАНИЯ!
    Лисп требует память, а ЭТОТ Лисп не использовал даже память 130XE.

    Устал!!!

    Тем не менее, я познакомился с новой ЭКЗИСТЕНЦИЕЙ!

    Она меня кинула в озёра Вам уже знакомые.

    Я перенёсся к PL65.
    Жутко красиво и интересно!

    Написал пару-тройку библиотек и несколько присущих языку конструкций.
    Проникся и въехал.
    Круто!

    Устал!!!

    Занялся Ассемблером МАЕ!
    Раньше я программировал на разных, но относился к Ассемблерам, как к вспомогательным средствам.

    Устал!!!

    Занялся Паскалем.
    В принцыпе и раньше пытался, но не вышло.
    Уж чересчур убогие они... для Атари. Нет ЛЮБВИ... Трах один...

    Теперь CLSN - моя любовь.
    ПРОНИКСЯ! Понял идеологию. Новые ЗНАНИЯ!

    А сейчас, увидев одну программку на BASIC, снова вернулся ... к Си!!!
    Идея родилась, майтли...

    Маркс говорил, что история идёт по кругу...
    Я с бородачами не спорю! - Защекочет!!!

    Дело в том, что CLSN, как и МАЕ Ассемблер, сам сидит в расширенной памяти!
    То есть, предлагая её как Кучу, он в момент компиляции с ней ИНТЕРФЕРИРУЕТ!
    То есть, однозначно дать прогноз о памяти НЕЛЬЗЯ.

    А вот милый мне Си, сидит в основной памяти и НЕ ЗАБОТИТСЯ о Куче!!!
    А по функционалу - почти соответствует!..

    То есть, если я напишу нормальную программку обработки кучи, я и впрямь стану прогармонистом!!! ИГРАЙ МОЙ ГАРМОН!

    Я это к тому, что следующий пост будет о баньках памяти Атари!
    О том как их программировать.

    zen

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

    Здравствуйте, Дорогие Атаристы Восьмибитники!

    Воодушевлённый великолепной работой CLSN Паскаля с Кучей, я было попытался сорганизовать демку, объясняющую работу с банками памяти, но так как CLSN сам сидит в расширенной памяти и рассматривает почти ВСЮ 48KiB расширенную память Атари как Кучу, это вышло проблематичным, а тема меня заинтересовала...

    Ну, у Атари много языков и я стал искать подходящий. Не только, для демки, а и для функционала тоже.

    Взялся за CC8 Си-Компилятор. В нём есть масса вкусностей. Хотел на нём создать обработку Кучи.
    В своё время я создал на нём стэк для проверки работы его списков, однако не на Куче.
    Обломилось. Его рантаймы вылазают в окно доступа к Банкам, то-есть интерференция будет.

    И вдруг вспомнил про PL65.
    Там указатели ровно такие же как в Паскале!
    А распределение памяти о-о-очень удобное.

    Итак, теория...
    В 130XE наличествует 4 банка памяти по 16KiB каждый.
    Подключаются они в окно доступа с адреса $4000 и за управлением банками следит регистр PORTB $D301.

    PORTB: По умолчанию можно считать все биты установленными в 1!

    Бит 7 - Включает программу СелфТеста 1=ON
    Бит 6 - НЕ ИСПОЛЬЗУЕТСЯ =1
    Бит 5 - Доступ АNTIC к расширенной памяти 1=OFF
    Бит 4 - Доступ 6502 к расширенной памяти 1=Основная 0-Расширенная
    Бит 3 - Выбор подключаемого банка...
    Бит 2 - Выбор подключаемого банка ИТОГО: 2 бита (банки нумеруются от 0 до 3)
    Бит 1 - Включает Бейсик. (Выключить, если программируете не на Бейсике!!!) 1=OFF
    Бит 0 - Включает OS-ROM (ПЗУ Системы) 0=OFF
    Это необходимо для использования переписанного ПЗУ. Так работают все Трансляторы...

    - Система следующая Вы копируете старое ПЗУ системы в ОЗУ, затем устанавливаете здесь заветный нолик
    (вместо ПЗУ подставляется ОЗУ!) и снова копируете ПЗУ на прежнее место и ПЗУ становится ОЗУ, а затем можно и Русский язык вставлять...
    Я думаю, с Бейсиком та же история, то есть можно всё-таки вместо READY вставить ГОТОВ...

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

    У меня расширение по схеме RAM574XE - 32 банка по 16KiB.
    Фактически оно повторяет 8 раз схему 130XE.

    Очевидно, что надо от каких то управляющих возможностей отказываться ради адресации банков.
    Это делается именно трансляцией ПЗУ.

    Отказываются обычно от СелфТеста, и Доступа Антика. Так как есть неиспользуемый бит, его тоже используют.
    Итого получаем 5 битов Адресации. Это число=31(Дес), то есть адресуются банки (от 0 до 31). Вуаля.

    А вот рабочая программа для PL65.
    Она тестирует стандартные 4 банка Atari 130XE.

    Код:
    !====================================!
    ! BANKS.PRG                          !
    !   Using 130XE Extended Banks in    !
    !     PL65 Programming Language      !
    !------------------------------------!
    ! Evgeny Zolotarev,(aka 576XE), 2018 !
    !====================================!
    
    INCLUDE TERMINAL.LIB
    
    POINTER BP BYTE BV BASED BP
    CONST PORTB=$D301
    CONST BKFRM=$4000
    
    !- Some kind of String Array --------!
    STRING S0$[30] DATA "Tiffany was HERE";
    STRING S1$[30] DATA "Beauford was HERE";
    STRING S2$[30] DATA "Ron was HERE";
    STRING S3$[30] DATA "Nuke was HERE";
    STRING S4$[30] DATA "Sam was HERE";
    
    !- Wait for Any Key Pressed ---------!
    PROC anyKey()
      CONST none=255
      BYTE CH=764
    BEGIN
      WHILE CH=none DO ENDWHILE
      CH=none
    END
    !- Clear Screen Procedure -----------!
    PROC cls()
      CONST clr=255
    BEGIN WRTSTR(CHR$(125)) END
    
    MAIN()
    !- Local Variables ------------------!
      INT I,J STRING S$[30]
    BEGIN
      cls() WRTLN("Press <Return> to Continue") CR() anyKey()
    
      FOR I=0 TO 4 DO
        IF I=0 THEN WRTLN("Writing to NORMAL Memory") ENDIF
        IF I<>0 THEN WRTSTR("Writing to BANK #") WRITE(I) CR() ENDIF
    !- Some kind of BASIC's 'Read A$' ---!
        CASE I
          OF 0 DO S$=S0$ ENDOF
          OF 1 DO S$=S1$ ENDOF
          OF 2 DO S$=S2$ ENDOF
          OF 3 DO S$=S3$ ENDOF
          OF 4 DO S$=S4$ ENDOF
        ENDCASE
    !- For BASIC use 221 instead of 223 -!
        BP=.PORTB BV=223+I*4
        FOR J=0 TO LEN(S$)-1 DO
          BP=.BKFRM+J BV=ASC(S$[J,J]) WRTLN(S$[J,J])
        NEXT
        CR() CR()
      NEXT
    
      WRTLN("Press <Return> to Continue") CR() anyKey() cls()
    
      FOR I=0 TO 4 DO
        IF I=0 THEN WRTLN("Reading from NORMAL Memory") ENDIF
        IF I<>0 THEN WRTSTR("Reading from BANK #") WRITE(I) CR() ENDIF
        CASE I
          OF 0 DO S$=S0$ ENDOF
          OF 1 DO S$=S1$ ENDOF
          OF 2 DO S$=S2$ ENDOF
          OF 3 DO S$=S3$ ENDOF
          OF 4 DO S$=S4$ ENDOF
        ENDCASE
        BP=.PORTB BV=223+I*4
        FOR J=0 TO LEN(S$)-1 DO
          BP=.BKFRM+J WRTSTR(CHR$(BV))
        NEXT
        CR() CR()
      NEXT
    END
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  9. #38
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Здравствуйте, ДРУЗЬЯ!

    Недавно произошел большой ПРОРЫВ в Паскальском деле.
    Я, будучи СОВСЕМ не программистом, но знатоком многих нужных языков высокого уровня, всё же решился пообщаться с Корифеями Атари!

    Проблема была в том, что ДВА этих ХитроМырдина, а именно Атари и Паскаль на протяжении ГОДА мешали мне создать программу инвертирования экранных символов!

    1. Что есть в Атари?
    В Атари есть Атари Бейсик, написанный на Ассемблере и прекрасно работающий на 1,79 МГц.
    ПОЧТИ ВСЕ творцы и творцыцы языков программирования так или иначе используют ВНУТРЕННИЕ процедуры Атари Бейсика для своих целей!!!
    Однако известно, что в Атари Бейсике ВСЕ переменные - ЦЕЛЫЕ!!!

    2. Что есть в Паскале?
    А вот точного, как в PL65 указания, КАК Паскаль воспримет данные НЕТУТИ!

    Сплошной обман, длиною в ГОД!

    Тем не менее, связавшись с Отцами Нации, я извлёл из них ПОЛЬЗУ!
    (* Славься Кей, Славься Кей!!! *)

    Кароче...
    Сначала я поблагодарю Карстена и Роланда из AtariAge!!!

    И вот - код инверсии строки экранных байтов символов для GR.0 Атари.
    Можно рисовать курсор меню как инверсную строку!!!

    Код:
    program cas;
    const
      Esc=#27;
    var
      sMem : word absolute $58;
    
    
    procedure invLine(x,y,len : byte);
    var
      sAdr : integer absolute $f2;
      _l    : byte absolute $f0;
    begin
      _l := len;
      sAdr := sMem + y*40 + x-1;
      inline($ac/_l/    (* ldy #_l     *)
             $b1/$f2/  (* lda($f2),y *)
             $49/$80/  (* eor #$80   *)
             $91/$f2/  (* sta($f2),y *)
             $88/      (* dey        *)
             $d0/$f5); (* bne -9     *)
    end;
    
    
    (*= Main Procedure =================*)
    (*- Locals -------------------------*)
    var
      _X,_Y,_L: byte; _C: char; 
    begin
      writeln; writeln; writeln;
      _X := 0; _Y := 0; _L := 40;
      repeat
        _C := readkey;
        while _C='' do ; (* Wait... *)
        invLine(_X,_Y,_L);
      until _C=Esc;
    end.
    ПРОСТО ПРЕДСТАВЬТЕ - ГОД!!!

    Всё возможно для того, кто верит!
    zen
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  10. #39
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,121
    Записей в дневнике
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    10 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ezswift Посмотреть сообщение
    В Атари есть Атари Бейсик, написанный на Ассемблере и прекрасно работающий на 1,79 МГц.
    меня больше устраивает TurboBasic XL - пошустрее и нв 65ХЕ работает.

    Цитата Сообщение от ezswift Посмотреть сообщение
    И вот - код инверсии строки экранных байтов символов для GR.0 Атари.
    Можно рисовать курсор меню как инверсную строку!!!
    Знакомство пошло на пользу (:

  11. #40
    Activist Аватар для ezswift
    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Привет Всем!

    Опубликовал два видео, паскальского программирования для Атари.
    Может, кто "чтотановаго" узнает.

    Смотрите по ссылкам...
    https://youtu.be/Bv3dwfXWW1M
    https://youtu.be/HIjRv_I6eWI

    zen
    Последний раз редактировалось ezswift; 07.04.2019 в 19:34.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

Страница 4 из 5 ПерваяПервая 12345 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Компилятор языка Паскаль - планы на будущее
    от Bolt в разделе Программирование
    Ответов: 212
    Последнее: 13.10.2019, 17:12

Ваши права

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