С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Не, он засовывает 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|
а, миль пардон, название смутило.
Я не проверял, так как нуня писать программку, но про джойстики, приблизительно так:
Это - О-о-очень быстро.Код:(* 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|
на бейсике это выглядело так:
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
И ещё.
Если в модели 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|
Моя Борьба.
Здравствуйте, мои дорогие и уважаемые восьми-БИТНИКИ и восьми-ХИППИ!
Снова с Вами я, Евгений Золотарёв и сегогдня меня торкнуло в философию.
Ну, скажем, в философию языков программирования. За исключением Бейсика!!!
Так вышло, что я его сразу отрыгнул...
Как ни странно, но здесь на форуме, я почти НИЧЕГО не писал о ПЕРВОЙ моей любви в программировании. Языке Си.
Это была ПЕРВАЯ любовь! Значит, смелая, трудная и сумбурная.
Я искал Си, но это не был КАКОЙ-ТО из РАЗНЫХ диалектов.
Мне нужен был ЕДИНСТВЕННЫЙ!
Им стал диалект 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|
Здравствуйте, ДРУЗЬЯ!
Недавно произошел большой ПРОРЫВ в Паскальском деле.
Я, будучи СОВСЕМ не программистом, но знатоком многих нужных языков высокого уровня, всё же решился пообщаться с Корифеями Атари!
Проблема была в том, что ДВА этих ХитроМырдина, а именно Атари и Паскаль на протяжении ГОДА мешали мне создать программу инвертирования экранных символов!
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|
Привет Всем!
Опубликовал два видео, паскальского программирования для Атари.
Может, кто "чтотановаго" узнает.
Смотрите по ссылкам...
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|
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)