PDA

Просмотр полной версии : Вопросы программирования на ПЭВМ "ИРИША", "ИРИША-Л" и "ИРИША-М"



Viktor2312
01.09.2011, 23:56
...

esl
02.09.2011, 10:18
Кое что уже делали ;)
вот ссылка (http://zx.pk.ru/showthread.php?p=409186#post409186)
я в ковырял там большой кусок, особенно с conout

KokaF77
14.09.2011, 23:56
Viktor2312, ты меня извини..., но это больше похоже на изучение ассемблера для ВМ80. ;)
Посмотри 2-ой пост в этой теме -не пожалеешь, там esl давал ссылку на свои изыскания, он проделал очень большую работу. Практически всё разложено по полочкам: видна структура BOOTM и CONOUT.
В таблице 9.1 есть несколько ошибок, перепутаны адреса подпрограмм: "CONIN", "CONSTAT", ".AROMR".

названия функция по красной книжке, очень похоже на правду
кроме того что в таблице входов ошибка
58: AROMR
5B: CONST
5E: CONIN

а реально

58: CONST
5B: CONIN
5E: AROMR

Посмотри аттач к этому посту (http://zx.pk.ru/showpost.php?p=350247&postcount=208). :)

KokaF77
15.09.2011, 01:16
Viktor2312, не воспринимай так близко к сердцу, помочь хочется. :)
Посмотри это http://zx.pk.ru/attachment.php?attachmentid=24044&d=1295181617, esl выкладывал. Там листинги (ИДА не нужна), правда мнемоника Z80. Если подождёшь до завтра, конвертну в формат ВМ80 (софт на другом компьютере, не сподручно). Могу выложить то что сделал esl, в таком же варианте, думаю он не будет против :).
Очень хороший вариант для изучения это эмулятор b2m.
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/files/emu.rar
В нём есть встроенный отладчик, очень хороший, можно всё смотреть как в живую. И память и регистры процессора. Попробуй. :)

---------- Post added at 01:16 ---------- Previous post was at 01:14 ----------


Вот это оно?
Да. В тех листингах о которых я упомянул это всё видно.

b2m
15.09.2011, 11:08
Очень хороший вариант для изучения это эмулятор b2m.
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/files/emu.rar
В нём есть встроенный отладчик, очень хороший, можно всё смотреть как в живую. И память и регистры процессора. Попробуй. :)
Вот именно, попробуй. А чтобы облегчить тебе задачу, расскажу, как я бы делал:
1. Запускаем эмулятор, выбираем "Иришу".
2. В меню выбираем View/Start debugger
3. Перемещаемся на адрес 0000 (нажать Ctrl+G, ввести в верхнее поле 0)
4. Ставим точку останова (нажать F9)
5. Запускаем прерванную эмуляции (нажать F5)
6. Нажать на тулбаре красную кнопку "Reset" (или нажать Ctrl+Break), снова появится отладчик, PC будет 0000, остальные регистры не изменились, но можно перейти туда клавишей Tab и установить нули. Таким образом получим ситуацию как после включения.
7. Нажимая клавишу F8 смотрим результат исполнения каждой команды.

В принципе, вместо пунктов 3-6 можно просто установить все регистры в ноль, включая и PC, получится то-же самое.

И никаких справочников не надо :)

KokaF77
15.09.2011, 17:28
небольшая подпрограмма которая начинается с адреса 006FH нет случайно чего нибуд по этой подпрограмме

В мнемонике ВМ80:


ROM:006F _LDIR:
ROM:006F
ROM:006F 7E mov a, m
ROM:0070 12 stax d
ROM:0071 23 inx h
ROM:0072 13 inx d
ROM:0073 0B dcx b
ROM:0074 78 mov a, b
ROM:0075 B1 ora c
ROM:0076 C2 6F 00 jnz _LDIR
ROM:0079 C9 ret


В мнемонике Z80:


ROM:006F _LDIR:
ROM:006F
ROM:006F 7E ld a, (hl)
ROM:0070 12 ld (de), a
ROM:0071 23 inc hl
ROM:0072 13 inc de
ROM:0073 0B dec bc
ROM:0074 78 ld a, b
ROM:0075 B1 or c
ROM:0076 C2 6F 00 jp nz, _LDIR
ROM:0079 C9 ret


Эта подпрограммка аналог команды пересылки LDIR микропроцессора Z80: загрузка с инкрементом до BC=0.



Действие команды подобно пересылке блока данных при ПДП. Как для
адресации, так и для счётчика байтов отведено по 16 бит, т.о. могут обрабатываться блоки любой
длины и в любом месте памяти. Блоки данных могут также перекрываться. При HL=DE команда
теряет смысл т.к. источник и приёмник идентичны. Следует обратить внимание, что при
обработке команды сначала пересылаются данные, только затем декрементируется ВС, и на
основании этого решается вопрос о цикличности команды, выполнять дальнейшую пересылку
данных либо прекратить команду. После выполнения команды BC=0.


У ВМ80 её нет, поэтому есть эта подпрограмма. :)


... она пишет информацию в память начиная с адреса FF74H.

Я так понял ты об этом фрагменте:


ROM:024B 21 97 00 lxi h, 0097h
ROM:024E 01 10 00 lxi b, 10h
ROM:0251 11 74 FF lxi d, FF74h
ROM:0254 CD 6F 00 call _LDIR

С адреса FF74h располагается "область сохранения текущего режима ASRAR" (16 байт) программы CONOUT. Здесь заносятся в эту область начальные значения, при инициализации системы. В HL загружаем адрес откуда переслать, в DE - куда, в BC - сколько байт.


И ещё один вопросик я так понял, что с адреса 0000H начинается программа BOOTM и почти 8 Кбайт занимает заканчивается адресом 1BFF.
Потом с адреса 2000H начинается CONOUT и заканчивается адресом 3FFF. А с адреса 4000H начинается ОЗУ?
Так и есть. Только это верно при включенной нулевой карте памяти.
По поводу BOOTM: для неё отведён диапазон адресов в ПЗУ 0000-1FFFh.


И все программы грузятся в ОЗУ с адреса 4000H, так как адреса ниже просто не доступны для записи, так как это ПЗУ?
Опять же это верно для нулевой карты памяти. Она включается при старте компьютера, а так же когда необходимо обратиться к подпрограммам находящимся в ПЗУ модуля процессора. При включении других карт памяти, в этой области располагается ОЗУ. При выборе программы "МОНИТОР" в стартовом меню, включается первая карта. А в ней по адресам ниже 4000h располагается ОЗУ.

Ниже пара карт распределения памяти из МПСиС.

Эта попроще.

PC2,3
00 - ROM,RAM1,RAM2,VRAM
01 - RAM3,RAM1,RAM2,VRAM
10 - RAM3,RAM1,RAM2,RAMx
11 - VRAM,RAM1,RAM2,RAM3

RAMx - 3 страница (P0=1, P1=1), адреса 0000h-3FFFh
Её достаточно для запуска ПЭВМ в минимальной конфигурации. А так же для работы с МСИ.

Эта посложнее.


PC2,3
00 - ROM,RAM1,RAM2,VRAM
01 - RAM3,RAM1,RAM2,VRAM
10 - RAM3,RAM4,RAM2,RAM5
11 - RAM3,RAM6,RAM2,RAM7

Именно эта карта необходима для взаимодействия МП с КНГМД.

b2m
26.09.2011, 10:35
И правильно ли я понял, что если стоит "-" тире, то это означает, что бит сброшен (равен лог.0), а если он обозначен, значет установлен (равен лог.1). Тогда если все биты регистра признаков будут установлены в состояние лог.0 будет так отображаться: ----- , а если они установлены то так: SZ(AC)PC . Бит вспомогательного переноса АС обозначил в скобочках, так как не знаю как он будет отображаться, так как на него выделено одно знакоместо, но думаю скорее всего просто "А"???
Всё правильно. Менять значение флагов можно пробелом.

b2m
06.11.2011, 14:34
А какими командами (или Esc-последовательностями) задаётся режим экрана для CONOUT? Через порты переключить несложно, но драйвер вывода об этом ведь не узнает.

b2m
07.11.2011, 00:10
В двух словах, можешь объяснить что значит Esc-последовательности.
В двух словах: это такая последовательность символов, начинается кодом 1Bh (код клавиши Esc), затем буква, означающая для драйвера консоли определённую функцию, ну и параметры могут быть, заканчивающиеся иногда символом ]. Есть стандарты, VT52, VT100, но могут быть и расширения, например для управления режимом экрана.

b2m
13.11.2011, 14:40
И в итоге при записи хоть 98H, ноть 9AH у нас происходит вот такой казус
Казус может быть и не показался бы казусом, если изменить палитру командой O1,D9. Обрати внимание на ширину пикселей случайных данных в верхней части экрана (после O98,D8).


Так что получается эмулятор бесполезен в плане написания программ, если требуется переключение между режимами, он всегда нам отображает содержимое как в режиме 2 (Цветной среднего разрешения, 320 х 200 точек), а содержимое регистра управления не соответствует действительности. Жалко...
Бесполезен для людей, которые не пытались что-либо написать :)

b2m
13.11.2011, 14:46
Судя по твоим скриншотам, ты уменьшил окно эмулятора. Выбери в меню 1:1, иначе изображение будет размыто, и разницы действительно не заметно.

KokaF77
13.11.2011, 20:32
Вот тут лично мне немного не понятно насчёт второй страницы, а где первая и откуда появилась вторая страница. У нас на модуле имеется 8 микросхем ОЗУ К565РУ5 что даёт нам один полноценный банк памяти объёмом 64 Кбайт с адресами естественно 0000H по FFFFH. А вот второй банк начинается с адреса 20000H по 2FFFFH . Но у нас в минимальной конфигурации имеется только 8 микросхем, не понятно пока...
Вся память адаптера дисплея физически находится во второй странице (P0=0, P1=1). Первая страница используется для доступа к ОЗУ КНГМД. Процессор же видит "своё адресноё пространство", через призму 155РЕ3. Об этом уже не раз говорилось. Причём для ЦП видео-ОЗУ находится по адресам C000h-FFFFh. :)

и считаем содержимое регистров, чтобы было понятно, что в них записано после старта
Ты на живой машине попробуй прочитать, это только в эмуляторе возможно. См. схему. ;)

Монохромный значит чёрно-белый, ну в крайнем случае градации серого, но никак не Синий, Зелёный и т. д.
Монохромный - это одноцветный: моно - один, хрома - цвет.

Прямым воздействием на контроллер дисплея через его регистры переключать режимы не совсем корректно. О текущем режиме должна ещё знать и программа, которая с ним работает. Это видно наглядно когда переключили в 3-ий режим и получили кракозябры на экране. Кстати, если обратили внимание, то работа фактически происходит с областью памяти 1-ой страници видео-ОЗУ режима 1. Это касаемо приведённых выше картинок.

b2m не зря говорил про ESC-последовательности.
Достаточно ручками включить 2-ой или 3-ий режим. Результат не заставит себя долго ждать. :)

P.S. Вопрос к b2m: мне кажется, или на самом деле с 3-им режимом не всё гладко? :)

KokaF77
13.11.2011, 22:16
А какими командами (или Esc-последовательностями) задаётся режим экрана для CONOUT?
Похоже, что таких нет, или я не разобрался. Скорее всего всё делается манипуляциями с "файлом управления программы CONOUT" (стр.92, последние два абзаца).
Хотя..., на стр.94 упоминаются некоторые эскейп-последовательности.
"esc"+"N" - запомнить содержимое активной части файла управления в области ASRAR.
"esc"+"O" - восстановить содержимое активной части файла управления по содержимому области ASRAR.
"esc"+"P"+(1 байт парам.) - управление цветом индикации.
"esc"+"Q"+(1 байт парам.) - управление режимом работы программы.


А как правильно? Всё всёравно делается темиже командами. И какая именно программа должна знать CONOUT ? И что нам мешает напрямую обратиться к регистру, задать режим, потом сообщить программе о том, что мы произвели изменение его и сообщить ей необходимые параметры.
Та программа, которая работает с экраном. Она же не может работать с экраном параметры которого ей не известны.

И где про эти ESC-последовательности читать которые идеально работают на ирише
Стр. 93 - там описаны эти самые последовательности.

Издеваешься
Ни в коей мере, просто шутка. :) И кстати, можно оценить плюсы эмулятора. ;)

---------- Post added at 21:52 ---------- Previous post was at 21:45 ----------

Проверил, кое-что работает.:)

Нажимаем на клавиатуре "ESC"+"P"+"(любая клавиша)"

и меняем цвет фона и символов НА ХОДУ! ;)

---------- Post added at 22:16 ---------- Previous post was at 21:52 ----------

Последовательность "ESC"+"P"+... тоже отрабатывает.
Всё-таки, как мне кажется, мои подозрения про 3-ий режим оправдываются. :(

b2m
13.11.2011, 23:11
По поводу цветов: когда цвет букв чёрный, фон действительно должен быть белый, так что в книге опечаток нет. Про это я знаю, но пока никто не жаловался :) В остальном, я надеюсь, палитра соответствует описанию.


P.S. Вопрос к b2m: мне кажется, или на самом деле с 3-им режимом не всё гладко? :)
А что именно не нравится? Цвета, или смещение букв? То, что буквы после переключения в 3-тий режим не выровнены по левому краю связано с тем, что в этом режиме нет "дырки" между частями видеопамяти, соответствующей первой и второй страницам режима низкого разрешения.

Пока нет программ, которые используют все возможности видеоадаптера, и нет реального компьютера, с которым можно было бы сравнить картинку, рано говорить о каких-либо несоответствиях в эмуляторе. На мой взгляд, сейчас всё совпадает с описанием (кроме случая с чёрным цветом букв).

---------- Post added at 23:47 ---------- Previous post was at 23:42 ----------

Кстати, да, ESC+Q+N включает третий режим, подобрал методом тыка. Только почему-то снизу экран обрезан. И экран не очищается.

---------- Post added at 23:49 ---------- Previous post was at 23:47 ----------

ESC+Q+G - второй режим (4х цветный).

---------- Post added at 23:50 ---------- Previous post was at 23:49 ----------

ESC+Q+E - первый режим (стандарт)

---------- Post added at 23:55 ---------- Previous post was at 23:50 ----------

На разные буквы реагирует, в чём разница - пока не понятно.

---------- Post added at 23:58 ---------- Previous post was at 23:55 ----------

ESC+Q+D и ESC+Q+E выбирают разные страницы.

---------- Post added 14.11.2011 at 00:05 ---------- Previous post was 13.11.2011 at 23:58 ----------

Я понял, почему снизу обрезано - межстрочное расстояние меньше, а количество строк осталось то же (видимо, задаётся другими командами).

---------- Post added at 00:11 ---------- Previous post was at 00:05 ----------

Сведём воедино:
ESC+Q+A 320x200 страница 1 (E000-FFFF)
ESC+Q+B 640x200
ESC+Q+C 320x200 4 цвета (второй режим)
ESC+Q+D 320x200 страница 0 (C000-DFFF)
дальше повторяется до буквы P
ESC+Q+P выключить экран (вроде бы)
дальше то же

KokaF77
13.11.2011, 23:21
А что именно не нравится?
Уже разобрался. :) Заявка снимается. ;)

После этих последовательностей курсор странно мутирует. :)


Я понял, почему снизу обрезано - межстрочное расстояние меньше, а количество строк осталось то же (видимо, задаётся другими командами).

По поводу подрезки экрана. Если после ESC+Q+N перейти в стандартный (первый режим), экран остаётся подрезанным. Чую есть ещё о чём подумать.

---------- Post added at 23:15 ---------- Previous post was at 23:11 ----------


Сведём воедино:
Я когда экспериментировал поглядывал на соответствие между рисунками 9.13 (структура байта управления режимом вывода) и 9.12 (коды изображения символов знакогенератора).

---------- Post added at 23:21 ---------- Previous post was at 23:15 ----------

Т.е. получается, что

байта управления режимом вывода
не при делах? :v2_conf2:

b2m
13.11.2011, 23:28
Короче, всё это описано в красной книжке, начиная со стр. 92.
ESC-последовательности там называются BSO-последовательностями (стр. 94)

---------- Post added at 00:28 ---------- Previous post was at 00:23 ----------


не при делах? :v2_conf2:
Всё там при делах, можно даже его менять командой SFF45. Вот только ESC+Q как-то странно его меняет. Я рассчитывал, что параметр просто пишется по адресу FF45, но похоже это не так.

KokaF77
13.11.2011, 23:40
Вот только ESC+Q как-то странно его меняет.
Вот этот момент и интересен. Пишется об одном, а на самом деле - не так.

Кстати, судя по рис. 9.13 - выключить экран этой последовательностью нельзя.
Вопросы похоже остались, надо вскрывать суть, ломать CONOUT. ;)

b2m
13.11.2011, 23:47
Что-то я не понял и зачем мне эти коды при работе программы, когда выполняется программа, например какая-то и вдруг мне потребовалось, чтобы систему графиков и так далее на экран прога вывела в разрешении 640 х 200. писать посередине экрана "Эй пользователь а ну нажми ESC+Q+B
Нет конечно. Не надо просить пользователя. Программа просто напечатает эти коды через CONOUT. Например в бейсике: PRINT CHR$(27);"QB"

dk_spb
13.11.2011, 23:55
и нет реального компьютера, с которым можно было бы сравнить картинку,
Есть, так что если что надо проверить в мониторе - пиши.
Вводо-вывод на/с ленты/диска пока не проработан, а в мониторе могу что-нибудь потестить.

KokaF77
14.11.2011, 00:03
ESC+Q+A 320x200 страница 1 (E000-FFFF)
Набрав эту комбинацию, сразу же получаем подрезку экрана.

ESC+Q+P выключить экран (вроде бы)
Очень похоже на правду, но для нулевой страницы. Если до этого мы были в первой, то попадём в нулевую. А набрав это:

ESC+Q+D
Увидим, что мы набирали "в темноте". :)

esl
14.11.2011, 01:17
Viktor2312, Сейчас объясню :)

---------- Post added at 22:35 ---------- Previous post was at 22:27 ----------

У Ириши нет текстового экрана
под текстовым я имею в виду экран в котором один байт в памяти отображает 1 байт на экране, это как текстовый режим при старте биоса на IBM
у Ириши есть ТОЛЬКО графические режимы
по этому биос должен "нарисовать" на экране символ который хочет напечатать пользователь
при этом где-то это или 40 или 80 байт в строку
или 1 или 2 бита на пиксель

чтоб не заводить кучу специальных функций для вывода в разные режимы есть только одна но универсальная
биос знает в каком режиме сейчас экран (т.к. он считает что кроме него переключить не может ни кто другой)
и в зависимости от этих знаний он и рисует символы на экране
поэтому когда Вы сменили режим экрана на другой через OUT биос уже не правильно отображает символы, т.к. он думает что все по старому а оно уже не соответсвует реальности

---------- Post added at 22:41 ---------- Previous post was at 22:35 ----------

ESC последовательности это управляющие последовательности при выводе строки
ESC это от название первого символа последовательности с кодом (ASCII decimal 27/hex 0x1B/octal 033)
вызываем функцию печати строки
и если в ней есть последовательность начинающаяся с ESC то делаем некие управляющие действия

в частности для ириши можно управлять режимом экрана
Управляющая последовательность ESC+Q+MODE
mode описан в 9.13
при переключении через последовательности биос ЗНАЕТ как надо скоректировать внутренние переменные и после такого переключения отображение символов происходит нормально

примеры

---------- Post added at 22:43 ---------- Previous post was at 22:41 ----------

эмулятор b2m -> reset
стартуем в первом режиме
можем поменять цвет
O7,D9 -> белые буквы на черном фоне

---------- Post added at 22:55 ---------- Previous post was at 22:43 ----------

заполняем экран -> D0
переключаемся в 3й режим
последовательно нажимаем ESC Q #
наблюдаем призабавную картинку
наш дамп превратился в кашу т.к. теперь старое содержимое экрана интрепретируется уже в соответсвии с другим режимом

ID8 -> 10001010 (0x8A)
заполняем экран -> D0

переключаемся в режим 2
ESC Q "
переключаем цвет на нормальный O2,D9
Id8 -> 10011010 (0x9a)
D0

после этого можно переключиться опять в режим 1
ESC Q !

и видно что в этом режиме строка занимает 40 байт а не 80 как во 2м и 3м (символы на экране через строку)

в общем все в порядке

---------- Post added at 23:17 ---------- Previous post was at 22:55 ----------

собственно вот обработчик ESQ-Q



RAM:2612 __ESC_Q_CMD: ; DATA XREF: RAM:_ESC_Qo
RAM:2612 and 10h
RAM:2614 ld a, 0
RAM:2616 jp nz, loc_2627
RAM:2619 ld a, c
RAM:261A and 3
RAM:261C ld hl, unk_2630
RAM:261F ld e, a
RAM:2620 ld d, 0
RAM:2622 add hl, de
RAM:2623 ld a, 11101100b
RAM:2625 and c
RAM:2626 or (hl)
RAM:2627
RAM:2627 loc_2627: ; CODE XREF: RAM:2616j
RAM:2627 ld (_ConOut_Mode), a
RAM:262A call __RestoreDefConout
RAM:262D jp _ConOut_FixScreenVar
RAM:262D ; ---------------------------------------------------------------------------
RAM:2630 unk_2630: db 0 ; DATA XREF: RAM:261Co
RAM:2631 db 10h
RAM:2632 db 1
RAM:2633 db 2


т.е. перекодируем 0,1 биты

вставлю в мнемонике i8080


RAM:2612 __ESC_Q_CMD: ; DATA XREF: RAM:_ESC_Q_SetMODEo
RAM:2612 ani 10h
RAM:2614 mvi a, 0
RAM:2616 jnz loc_2627
RAM:2619 mov a, c
RAM:261A ani 3
RAM:261C lxi h, unk_2630
RAM:261F mov e, a
RAM:2620 mvi d, 0
RAM:2622 dad d
RAM:2623 mvi a, 11101100b
RAM:2625 ana c
RAM:2626 ora m
RAM:2627
RAM:2627 loc_2627: ; CODE XREF: RAM:2616j
RAM:2627 sta _ConOut_Mode
RAM:262A call __RestoreDefConout
RAM:262D jmp _ConOut_FixScreenVar
RAM:262D ; ---------------------------------------------------------------------------
RAM:2630 unk_2630: .db 0 ; DATA XREF: RAM:261Co
RAM:2631 .db 10h
RAM:2632 .db 1
RAM:2633 .db 2

KokaF77
14.11.2011, 01:18
esl, поясни, пожалуйста, а как быть с соответствием рисунку 9.13 символов: #, ", !. Что-то здесь не вяжется. :v2_conf2:

esl
14.11.2011, 01:21
как это не вяжется
ну ошибка там одна точно есть

ESC Q ' ' (0x20 пробел) режим 1 0 страница
ESC Q ! (0x21 !) режим 1 1 страница
ESC Q " (0x22 ") режим 2
ESC Q # (0x23 #) режим 3

нас интересуют 2 младших бита
они и переключают режим

KokaF77
14.11.2011, 01:30
т.е.
Спасибо! Но я про биты "MODE". :)

Параметр последовательности "ESC+Q" и "MODE" не одно и то же, я об этом.

esl
14.11.2011, 01:55
точно, исправил

в коде выше видно что ESQ Q "почти" напрямую копируется в MODE (FF45)
как в табличке 9.13



ESC Q ' ' (0x20 пробел) режим 1 0 страница mode=0x20
ESC Q ! (0x21 !) режим 1 1 страница mode=0x30
ESC Q " (0x22 ") режим 2 mode=0x21
ESC Q # (0x23 #) режим 3 mode=0x22


0X20 тут как раз от кода символа и по таблице "вкл динамич сдвиг маски"
оно нам не мешает ;)

ESC Q A - 0x41 - режим 1 1 страница mode
ну и т.д.

очередной баг в книге
параметр ESC Q не просто копируется в MODE
а
если стоит бит 0x10 (page)то копируем напрямую
иначе отдельно парсим 2 первых бита и уже модифицированное значение пишем в MODE

KokaF77
14.11.2011, 02:07
ESC Q A - 0x41 - режим 1 1 страница mode
Если сделать так, интересный фокус случается: включается 20 строк, и курсор "мутирует". Если затем ввести ESC Q ! - всё возвращается на свои места. Можешь проверить. ;)

esl
14.11.2011, 02:20
бит 40 отвечает за 20/25 строк на экране

читаем стр 90

в режиме 25 строк - символ 8 строк и курср инверсный симво и
в 20 символ 10 строу и курсор 2 нижних строки

все ок

почему не используем весь экран - не знаю, надо код дальше копать

esl
14.11.2011, 02:27
сделай D0 в обеих режимах и увидишь разницу

похоже что высоту символов биос поменял а кол-во строк на экране забыл

на скриншотах подтверждение

Ctrl+L
Enter
D0

в ESQA остался хвост от ESQ! но влезло ровно столько же

KokaF77
14.11.2011, 02:32
Спасибо, пояснил. Я на промежуток между строками не обратил внимания. :)

---------- Post added at 02:32 ---------- Previous post was at 02:28 ----------

Интересно, что это за баг?

esl
14.11.2011, 02:36
скорее всего баг
т.к. в книге этот режим называется 25 строк

сколько ж там похоже "багов", во всем :( :(

KokaF77
14.11.2011, 10:29
esl, скинул в соседней теме более свежую версию CONOUT. Этого бага в нём нет. :)
http://www.zx.pk.ru/showpost.php?p=430073&postcount=29

P.S. Надо бы сверить бинарник из эмулятора b2m с дампами из МПСиС и красной книги, может быть какие-нибудь ошибочки найдутся?

esl
14.11.2011, 11:51
у меня с этим ромом не стартует эмулятор ...

KokaF77
14.11.2011, 11:58
у меня с этим ромом не стартует эмулятор ...
Это только CONOUT

Попробуй так:


bootm : Memory {
rom="Irisha\irisha.rom"
}

conout : Memory {
rom="Irisha\conout30.rom"
}


mm : MemMap {
map[0][0000-1FFF]=bootm[0000]
map[0][2000-3FFF]=conout[0000]


Должно заработать. :)

b2m
14.11.2011, 12:14
скорее всего баг
т.к. в книге этот режим называется 25 строк
Может это не баг, а фича? :)
В конце-концов, после смены режима можно делать Esc+L - окно во весь экран, отрабатывает нормально.

KokaF77
14.11.2011, 12:19
Может это не баг, а фича? :)
В конце-концов, после смены режима можно делать Esc+L - окно во весь экран, отрабатывает нормально.
Во как! Прикольно. Что-то в этом есть. :)

esl
14.11.2011, 13:29
заработало, похоже я криво ромы склеил :(

думаб что баг, таки
вот новый код


RAM:24FA
RAM:24FA __ESC_Q_SetMODE: ; DATA XREF: RAM:_ESC_Q_SetMODEo
RAM:24FA ani 10h
RAM:24FC mvi a, 0
RAM:24FE jnz _1
RAM:2501 mov a, c
RAM:2502 ani 3
RAM:2504 lxi h, _FixModeBits
RAM:2507 mov e, a
RAM:2508 mvi d, 0
RAM:250A dad d
RAM:250B mvi a, 11101100b
RAM:250D ana c
RAM:250E ora m
RAM:250F
RAM:250F _1: ; CODE XREF: RAM:24FEj
RAM:250F sta _ConOut_Mode
RAM:2512 call sub_24BE
RAM:2515
RAM:2515 loc_2515: ; DATA XREF: RAM:2115o
RAM:2515 xra a
RAM:2516 sta _ConOut_WIN_Left
RAM:2519 sta _ConOut_WIN_Up
RAM:251C call _CO_GetWidth
RAM:251F sta _ConOut_WIN_Right
RAM:2522 call _CO_GetScreenLines
RAM:2525 sta _ConOut_WIN_Down
RAM:2528 ret
RAM:2528 ; ---------------------------------------------------------------------------
RAM:2529 _FixModeBits: .db 0 ; DATA XREF: RAM:2504o
RAM:252A .db 10h
RAM:252B .db 1
RAM:252C .db 2
RAM:252D
RAM:252D ; =============== S U B R O U T I N E =======================================
RAM:252D
RAM:252D
RAM:252D _CO_GetWidth: ; CODE XREF: RAM:2254p
RAM:252D ; RAM:251Cp
RAM:252D lda _ConOut_Mode
RAM:2530 ani 1
RAM:2532 mvi a, 40
RAM:2534 rz
RAM:2535 rlc
RAM:2536 ret
RAM:2536 ; End of function _CO_GetWidth
RAM:2536
RAM:2537
RAM:2537 ; =============== S U B R O U T I N E =======================================
RAM:2537
RAM:2537
RAM:2537 _CO_GetScreenLines: ; CODE XREF: RAM:2522p
RAM:2537 lda _ConOut_Mode
RAM:253A ani 1000000b
RAM:253C mvi a, 20
RAM:253E rz
RAM:253F mvi a, 25
RAM:2541 ret
RAM:2541 ; End of function _CO_GetScreenLines
RAM:2541


тут все прямо и понятно

KokaF77
14.11.2011, 13:56
заработало, похоже я криво ромы склеил :(
Я не клеил, просто конфиг подправил. :)

esl, у тебя не будет желания и возможностей разобрать эти обе версии версии CONOUT по запчастям? ;)

СПАСИБО! :)

esl
15.11.2011, 11:58
времени и желания не хватит ...
первый я частично разобрал, и выкладывал тут.

KokaF77
15.11.2011, 20:21
времени и желания не хватит ...
Ясно... ;) Тогда, что мне думать о себе? :(

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

esl
20.11.2011, 18:51
Так же неизвестно в каком состоянии находится регистр признаков, можно ли его принудительно сбросить в самом начале программы.

это абсолютно не важно, сам по себе регистр флагов мало интересен
он нужен ТОЛЬКО после выполнения операции
т.к. в нем будет установлен соответствующий флаг стоять
который мы дальше и проверим
и обычно после этой проверки нам он уже и опять не важен

для отдельных битов есть команды установки сброса

типа STC/CMC для С
z можно сбросить ORA A

где-то так.

esl
20.11.2011, 21:31
hlt - это таки останов ;)

пишу как помню, справочника под рукой нет, но гуру поправят

если прерывания запрещены - то процессор навсегда остается на этом адресе

если разрешены, то висит до возникновения прерывания а после переходит на следующую команду после возникновения? или обработки?.

Atari
21.11.2011, 04:10
если прерывания запрещены - то процессор навсегда остается на этом адресе

если разрешены, то висит до возникновения прерывания а после переходит на следующую команду после возникновения? или обработки?.

гуру (?) поправят, только вот кто это делал практически?

теоретически тут надо вспомнить о контроллере прерываний.

ВН59 должен дергать INT и потом отдавать 3 байта - CD ХХ ХХ тобишь CALL XXXXh.

А вот выход из прерывания? Если не выполнять комманду RET а заканчиват процедуру коммандой HLT то растущий стек потрет остальное ОЗУ. А если выполнять RET ? Куда мы попадаем ?

KokaF77
21.11.2011, 11:23
Из состояния останова микропроцессор выводится следующими способами:
1. Путём подачи H-уровня на вход сброса RESET...
2. Путём подачи H-уровня на вход прерывания INT, микропроцессор реагирует на этот сигнал только в том случае, если установлен внутренний триггер разрешения прерывания (INTE=1). ...
Важно подчеркнуть, что в состоянии останова микропроцессор стандартным образом реагирует на сигнал HOLD запроса ПДП с формированием сигнала HLDA подтверждения ПДП для контроллера ПДП.

стр. 47, В.Л. Григорьев, "Программное обеспечение микропроцессорных систем".


ВН59 должен дергать INT и потом отдавать 3 байта - CD ХХ ХХ тобишь CALL XXXXh.
Контроллер прерываний может отдать и более короткую команду "RST i".
В любом случае, логикой работы команд CALL и RST предусмотрено запоминание в стек "содержимого PC как адреса возврата".

А вот выход из прерывания?


А если выполнять RET ? Куда мы попадаем ?

Вернёмся по адресу следующему за HLT.

Вроде бы так. :)

esl
21.11.2011, 12:22
угу, следующая после HLT
на Корвете (К580+ВН59) синхронизация с обратным ходом луча - известная всем
ei
hlt

только вн59 в конце обработчика надо еще послать EOI (End Of Int) - чтобы он знал что уже закончили обрабатывать прерывание.

---------- Post added at 10:22 ---------- Previous post was at 09:38 ----------



Вот например авторы пишут, что "Доступ к подпрограммам графического расширения осуществляется либо путём непосредственного обращения к соответствующим подпрограммам через таблицу входов, либо через общий вход программы CONOUT.

Это:

вообще не догнал, как понять?


таблица 9.7 там есть описание ESC+G

"передача управления на граф. вход
следующие ща коммандой коды - граф комманды


комманды описаны в 9.8

напоминают оператор DRAW в бейсике.

идея в том, что мы можем нарисовать сложную картинку как бы одним
вызовом CONOUT
печатаем специальную "строку" которая описывает что рисовать
состоит из нескольких частей
1. ESC+G (вкл граф режим)
2. коды комманд из 9.8
3. T -(выкл граф режим)

вон например кусок кода из пзу который рисует круг вокруг надписи ириша



RAM:00A7 _ShowLogo: RAM:00A7
RAM:00A7 lxi h, _LOGO?
RAM:00AA shld _ShapeFle
RAM:00AD call _SHAPE
RAM:00B0 call ?BEEP?
RAM:00B3 lxi b, __StartMusic
RAM:00B6 call _MELODY

RAM:00B9 lxi d, _Circle
RAM:00BC jmp PutString_DE
---------------------------------------------------------------------------
RAM:00BF _Circle: .db 1Bh ; DATA XREF: _Logo_and_inits-1786o
RAM:00C0 .text "G" ; GraphLangStart
RAM:00C1 .text "C1" ; Color
RAM:00C3 .text "P248,34" ; Pset
RAM:00CA .text "S0,0" ; SzhatieOcr
RAM:00CE .text "F0,0" ; Ellipse
RAM:00D2 .text "R32" ; Radius
RAM:00D5 .text "I" ; Circle
RAM:00D6 .text "TT" ; Reset ConOut
RAM:00D8 .db 0

b2m
21.11.2011, 12:36
Что-то не очень получается, что либо сделать.

Там не всё так просто :)
Когда отладчик запускает программу, или редактирует память, он считает, что ПЗУ выключено. Т.е. чтобы что-либо вызвать из ПЗУ надо его включить командами MVI A,0 / OUT 12h
Там, однако, есть ещё один подводный камень: отладчик по умолчанию оставляет в регистре SP 100h, и если включить ПЗУ, то вернёшься чёрт знает куда. Поэтому нужно назначить стек выше 4000h.
Стандартная точка входа в CONOUT: 2000h, код символа нужно поместить в регистр С.
Вот пример:

esl
21.11.2011, 12:40
4000: LXI H, 0A00 ; Заносим в регистровую пару HL значение 000AH
4003: LXI D, 0A00 ; Заносим в регистровую пару DE значение 000AH
4006: CALL 2798H ; Переходим к подпрограмме рисования точки.


тут ошибка в записи ;)

должно быть


4000: LXI H, 000A ; Заносим в регистровую пару HL значение 000AH
4003: LXI D, 000A ; Заносим в регистровую пару DE значение 000AH
4006: CALL 2798H ; Переходим к подпрограмме рисования точки.



а по делу - все правильнно, работать и не должно
в конфигурации котроая работает сейчас - нет ПЗУ ;)
и CALL уходит в пустоту (и что там проиходит - фиг известно ;)

надо сначала включить ПЗУ, а только после этого делать вызов.

b2m
21.11.2011, 12:53
Чтобы результаты были более предсказуемые, надо ввести команду O0,12
Затем надо командой XS задать указатель стека, например 4100

esl
21.11.2011, 13:01
4000: 21
4001: 0A
4002: 00

4003: 11
4004: 0A
4005: 00

Также и для CALL ADR у нас адрес 2798H соответственно:

4006: CD
4007: 98
4008: 27


21 0a 00 -> LXI H,000A а не LXI H,0A00
CD 98 27 -> CALL 2798 а не CALL 9828

по поводу остального b2m рассписал вроде.

b2m
21.11.2011, 13:05
То есть с этими проблемами, требованием переписи содержимого аккумулятора в порт В ППА мы сталкиваемся только в эмуляторе, а в железе всё будет работать как надо?
В железе будет работать точно также, как и в эмуляторе :)

esl
21.11.2011, 13:20
То есть с этими проблемами, требованием переписи содержимого аккумулятора в порт В ППА мы сталкиваемся только в эмуляторе, а в железе всё будет работать как надо?

эмулятор это программная копия реального железа.
т.е. на нем все работает как на настоящей ирише

иначе как-бы работал биос и остальной софт, он же 100% копия оригинального ;)

Atari
21.11.2011, 13:59
Контроллер прерываний может отдать и более короткую команду "RST i".
мои доки молчат о такой возможности.

KokaF77
21.11.2011, 14:01
мои доки молчат о такой возможности.

Atari, посмотрите в сторону 589ИК14. ;)

Atari
21.11.2011, 14:08
KokaF77, посмотрю, просто я писал конкретно о ВН59, так что с Вашей стороны стоилоб уточнять сразу.

KokaF77
21.11.2011, 14:23
Atari, сорри. :) Я говорил о контроллере прерываний в более общем виде.

---------- Post added at 14:17 ---------- Previous post was at 14:14 ----------

По большОму счёту, контроллер может выдать всё, что ему угодно, хоть JMP, лишь бы всё было корректно сделано.

---------- Post added at 14:23 ---------- Previous post was at 14:17 ----------

Viktor2312, вот листинг того, что сделал b2m:




RAM:4000 .org 4000h
RAM:4000 31 00 41 lxi sp, 4100h
RAM:4003 3E 00 mvi a, 0
RAM:4005 D3 12 out 12h
RAM:4007 21 20 40 lxi h, aHelloWorld ; "Hello, World !"
RAM:400A CD 10 40 call sub_4010
RAM:400D 00 nop
RAM:400E 00 nop
RAM:400F 00 nop
RAM:4010
RAM:4010 ; --------------- S U B R O U T I N E ---------------------------------------
RAM:4010
RAM:4010
RAM:4010 sub_4010: ; CODE XREF: RAM:400Ap
RAM:4010 ; sub_4010+Aj
RAM:4010 7E mov a, m
RAM:4011 23 inx h
RAM:4012 B7 ora a
RAM:4013 C8 rz
RAM:4014 4F mov c, a
RAM:4015 E5 push h
RAM:4016 CD 00 20 call 2000h
RAM:4019 E1 pop h
RAM:401A C3 10 40 jmp sub_4010
RAM:401A ; End of function sub_4010
RAM:401A
RAM:401A ; ---------------------------------------------------------------------------
RAM:401D 00 .db 0
RAM:401E 00 .db 0
RAM:401F 00 .db 0
RAM:4020 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 20 21 00 aHelloWorld: .text "Hello, World !" ; DATA XREF: RAM:4007o
RAM:4020 .db 0
RAM:402F 00 .db 0

b2m
21.11.2011, 14:27
Правильно ли я понял, что в 4012h находится команда B7 т. е. ORA A которая произведёт логическую операцию ИЛИ над содержимым аккумулятора и вторым байтом команды
Над содержимым аккумулятора и вторым байтом команды операцию ИЛИ делает команда ORI xx (где xx - число, второй байт команды).

ORA A делает ИЛИ аккумулятора с самим собой. Используется обычно, чтобы установить флаги Z,S,P в соответствии с содержимым аккумулятора. В качестве побочного эффекта устанавливает CY=0 (поэтому есть команда установки STC, но нет команды сброса).

В данном случае был необходим флаг Z, чтобы определить, кончилась ли строка (в конце которой стоит ноль). Следующая команда с кодом C8 это RZ - выход из п/п если установлен флаг Z (т.е. строка кончилась).

b2m
21.11.2011, 14:31
А с операцией ИЛИ я правильно всё подсчитал?
Нет, смотри мой предыдущий пост.

KokaF77
21.11.2011, 14:32
Viktor2312, пока ты писал, b2m уже ответил. :)


В данном случае был необходим флаг Z, чтобы определить, кончилась ли строка (в конце которой стоит ноль). Следующая команда с кодом C8 это RZ - выход из п/п если установлен флаг Z (т.е. строка кончилась).

KokaF77
21.11.2011, 14:47
чтобы что-либо вызвать из ПЗУ надо его включить командами MVI A,0 / OUT 12h
Для корректной работы "в лоб" включать нулевую страницу не совсем хорошо, надо же и назад вернуться. :)

KokaF77
21.11.2011, 15:25
А можно как-то поподробнее объяснить зачем мы заносим в порт В все нули? В таблице 3.1 указано, что порт 12h - это порт В БИС КР580ВВ55А.
В книге ошибка! 12h - это порт C.
Посмотри здесь:
http://zx.pk.ru/showpost.php?p=436023&postcount=31

b2m
21.11.2011, 15:36
В книге ошибка! 12h - это порт C.
Переставлять линии шины адреса - это у них фишка такая :)

Может вначале оно так и было (А0 и А1 к ППА возможно были переставлены), но потом решили не путать народ. А в документации так и осталось :)

KokaF77
21.11.2011, 15:43
Что это за чудеса? Везде "подрезана" первая буква. :(
Что я не так сделал? :v2_conf2:

Пример от b2m:
30991

Русские буквы, вариант Vikror2312:
30992

b2m
21.11.2011, 15:45
По адресу 4014 у меня не 4E, а 4F :)

KokaF77
21.11.2011, 15:52
b2m, спасибо! Совсем слепой стал... :( Главное листинг сбацал нормально, а тут...
Всё Ок. Всё работает и по-русски и по-английски. :)

b2m
21.11.2011, 16:11
Сохранить W4000,30
Загрузить R4000,30
Для файлов Ириши предлагаю использовать расширение .rki

b2m
21.11.2011, 18:10
Не получается сохранить, набираю, появляется чёрный экран секунд на пять потом обратно возвращается и ничего не происходит.
У тебя устаревшая версия :) В последней должно автоматом окно сохранения .rk появляться.


А если через меню Файл->сохранить->пишем имя и сохранить, то потом не открывается если расширение .rki если .rk сделать, то при попытки открыть виснет эмулятор.
Да, там корректность .rk файлов не проверяется, а то, что через меню Файл->сохранить - это внутренее состояние эмулятора, его расширение не надо менять, должно быть .emu

KokaF77
21.11.2011, 18:55
Не получается сохранить
Вот, сохранил:

b2m
21.11.2011, 19:05
Вот, сохранил:
А ты наивно думаешь, что он сможет загрузить? :)
Загрузку и сохранение я одновременно в эмулятор добавил.

KokaF77
21.11.2011, 19:22
А ты наивно думаешь, что он сможет загрузить? :)
Это чтоб не мучился набирать. ;)

Загрузку и сохранение я одновременно в эмулятор добавил.
Я в курсе. Проверил. :)

b2m, какие-либо стандартные утилиты CP/M можно портировать, например с того же Корвета? Хотелось бы попробовать копирование с диска на диск и сохранение из памяти на диск, а без инструментов - "не туды и не сюды". :(

---------- Post added at 19:22 ---------- Previous post was at 19:20 ----------

Заодно бы добавил в образ парочку имеющихся у меня.

b2m
21.11.2011, 19:39
какие-либо стандартные утилиты CP/M можно портировать, например с того же Корвета?
Стандартное должно работать везде. Если под стандартом понимать то, что программа кроме LHLD 1 (верхняя граница памяти) и CALL 5 (вызов фукций CP/M) ничего другого не использует.

KokaF77
21.11.2011, 20:41
Ура, заработало! :v2_dizzy_roll:

Потанцевав с бубном, скопировал в образ ГМД (в эмуляторе диски E и F) парочку полезных утилит: PIP и DDT.
Утилитки работают. :)

Образок прилагается:

Error404
21.11.2011, 21:31
Ура, заработало! :v2_dizzy_roll:

Потанцевав с бубном, скопировал в образ ГМД (в эмуляторе диски E и F) парочку полезных утилит: PIP и DDT.
Утилитки работают. :)

Образок прилагается:

Глянул.
Как минимум еще POWER надо добавить - вот уж точно программа века.
Какие еще драйверы экрана есть для CP/M? 40х20 для CP/M не подходит никак.

KokaF77
21.11.2011, 21:51
Какие еще драйверы экрана есть для CP/M? 40х20 для CP/M не подходит никак.
Я это тоже заметил. DDT вообще не возможно пользоваться. Победить пока не получилось, через ESC-последовательности режим переключаться не хочет. Странно. :(

Кстати, пока экспериментировал, пытался в мониторе включить 3-й режим: ESC+Q+# - не работает.

Работает, то что b2m с самого начала предложил: ESC+Q+N.
После набираем ESC+P+A и получаем 80x25, белые символы на синем фоне. :)

Как это сделать под CP/M не понятно. :v2_conf2:

---------- Post added at 21:51 ---------- Previous post was at 21:46 ----------

Ничего не понял... Сейчас это

ESC+Q+N,
ESC+P+A

ОТРАБОТАЛО! :)

http://img-fotki.yandex.ru/get/5313/40032980.1/0_6ef66_35c8cc95_M.jpg (http://fotki.yandex.ru/users/kostenn-konstantin/view/454502/)

KokaF77
21.11.2011, 22:30
b2m, объясни, пожалуйста. :) Эмулятор позволяет подключить папку как диск?
У меня это каким-то образом получилось. И как эту манипуляцию правильно делать?

---------- Post added at 22:30 ---------- Previous post was at 22:28 ----------

Viktor2312, подразумевалась более старая версия эмулятора. Ты ведь об этом писал, когда говорил о своей проблеме? :)

b2m
21.11.2011, 22:33
Потанцевав с бубном, скопировал в образ ГМД (в эмуляторе диски E и F) парочку полезных утилит: PIP и DDT.
Утилитки работают. :)
Бубен не нужен. Если выбрать вместо образа All files (*.*), то они появятся на "виртуальном" диске. Но для GMD, конечно, не работает. Это только для версии контроллера на ВГ93 (который в конфигурации Irisha).

А там уже можно и PIP запустить, и файлы на образы им копировать :)

KokaF77
21.11.2011, 22:33
Как?

Viktor2312, скачай последнюю версию с сайта b2m. На данный момент версия от 17.11.2011г.

b2m
21.11.2011, 22:34
Что подразумивается под этими словами?
То, что тебе надо скачать свежую версию эмулятора :)

KokaF77
21.11.2011, 22:37
А там уже можно и PIP запустить, и файлы на образы им копироват
Я потом так и сделал. :)

Сначала выбрал диск ВГ93, запустил PIP, а им уже дальше скопировал куда надо. ;)

Правильно? :)

b2m
21.11.2011, 22:37
b2m, объясни, пожалуйста. :) Эмулятор позволяет подключить папку как диск?
У меня это каким-то образом получилось. И как эту манипуляцию правильно делать?
При выборе файлов в качестве фильтра использовать All files (*.*). Если, конечно, эта фича поддерживается в выбранной конфигурации.

KokaF77
21.11.2011, 22:38
Ну так дайте ссылку на архив с эмулятором нормальной версии.
Ссылка в подписи b2m. :)

http://bashkiria-2m.narod.ru/download.html

b2m
21.11.2011, 22:39
Ну так дайте ссылку на архив с эмулятором нормальной версии.
http://bashkiria-2m.narod.ru/download.html
А раньше ты где брал эмулятор?

KokaF77
21.11.2011, 22:40
При выборе файлов в качестве фильтра использовать All files (*.*). Если, конечно, эта фича поддерживается в выбранной конфигурации
Вот в этом и есть вопрос! Так у меня не получилось, увы. Я выбрал левый файл, а подцепилась вся папка. Странно...

esl
21.11.2011, 22:42
B2M: КОГДА БУДЕТ ДОКУМЕНТАЦИЯ !!!!!!!!!!!!!!!!!!!!!!!!!
;) ;)

b2m
21.11.2011, 22:49
B2M: КОГДА БУДЕТ ДОКУМЕНТАЦИЯ !!!!!!!!!!!!!!!!!!!!!!!!!
;) ;)
Серёжа, ты что, форум не читаешь? :)

---------- Post added at 23:49 ---------- Previous post was at 23:44 ----------


Я выбрал левый файл, а подцепилась вся папка. Странно...
Это фича. :) Надо же было как-то оставить возможность выбрать всю папку. Не нравится вся папка - выбирай файлы, которые требуются.

Если выбран только один файл, значит пользователь не заморачивался с выбором, и будет вся папка. Для себя-же делал. Мне просто лень все файлы в папке отмечать :)

KokaF77
21.11.2011, 22:51
b2m, Спасибо! Я понял. Значит я интуитивно всё сделал правильно. И с ПИПом - тоже. :)

b2m
21.11.2011, 22:53
Теперь даже музыка при запуске играет.
Опа. :eek_std:
Это ж какая старинная версия у тебя была!!!
Немудрено, что непонятки были :)

---------- Post added at 23:53 ---------- Previous post was at 23:52 ----------


Значит я интуитивно всё сделал правильно. И с ПИПом - тоже. :)
На это и был рассчёт :)
Чтобы пользователь интуитивно делал всё правильно.
На мой взгляд - так удобнее.

А документация - для хлюпиков :)

b2m
22.11.2011, 00:40
Когда я запускаю эмулятор, выбираю монитор и там набираю команду R4000,30 я вторым пераметром задаю сколько байт считать, если я правильно понял.
Правильно.


А если я его не указываю, то команда не выполняется, пишется вопрос и приглашение.
Когда второй параметр не указывается, он считается равным нулю, а в командах R/W это не имеет смысла.


А как быть если я захочу через год считать эту программу, я уже точно не буду помнить сколько там байт?
Насколько я понял, авторы задумывали, что перед программой всегда будет стандартный загрузчик, который считывается по адресу A000h и имеет стандартный размер 100h байт. А уж в нём будет указано, куда считывать, сколько, и какая должна быть контрольная сумма.
Именно этот загрузчик и считывается, когда в загрузочном меню выбирается "магнитофон". В конце книги перед программами есть дампы этих загрузчиков.

KokaF77
22.11.2011, 01:32
Насколько я понял, авторы задумывали, что перед программой всегда будет стандартный загрузчик, который считывается по адресу A000h и имеет стандартный размер 100h байт. А уж в нём будет указано, куда считывать, сколько, и какая должна быть контрольная сумма.
Именно этот загрузчик и считывается, когда в загрузочном меню выбирается "магнитофон". В конце книги перед программами есть дампы этих загрузчиков.
Вот оно что! Теперь мне стало ясно такое хитрое расположение блоков в дампах программ. :)

P.S. Пробовал поиграться с POWER, взял из архивов esl. Эта штука затачивается под конкретное железо или она всё-таки универсальная? :)

esl
22.11.2011, 02:04
Универсальна
Его можно тюнить по экран
Были доки

Viktor2312
22.11.2011, 03:11
Вот, наконецтаки, благодаря форумчанинам b2m, KokaF77, esl и др. А точнее их бесценной помощи, получилось немного мне разобраться в программировании, хотя это громко сказано, но хоть что-то стало получаться вывести на экран, так как я до их помощи упёрся как баран в новые ворота.
Вот результат моих экспериментов:

http://img-fotki.yandex.ru/get/5313/48644933.2/0_56a9a_207c51f1_L.jpg (http://fotki.yandex.ru/users/lpiti/view/354970/)
025 (http://fotki.yandex.ru/users/lpiti/view/354970/)

Для загрузки необходимо набрать команду R4000,2F7 затем выбрать распакованный предварительно файл из прикреплённого архива и затем запустить программу на выполнение командой G4000

:)

b2m
22.11.2011, 12:29
Поздравляю! :)

b2m
22.11.2011, 13:40
Вот тут и возникает вопрос, а как выводить, например, только один или несколько символов (знакомест) в конкретную позицию на экране, так чтобы остальная картинка при этом не менялась?
Курсор можно позиционировать ESC-последовательностью. Т.е. нужно вывести текст, код которого выглядит, например, так: 1B 59 29 2A, затем можно вывести пробелы, чтобы стереть часть текста. Здесь 1В это код ESC, после него должен быть код функции, в данном случае 59 (буква Y). Данная функция изменяет позицию курсора и имеет два параметра: 29 это строка 9, 2A - это позиция в строке 0Ah (т.е. 10). Позиция увеличена на 20h, чтобы параметры были печатными символами и не совпадали с управляющими кодами, которые меньше 20h.

---------- Post added at 14:40 ---------- Previous post was at 14:36 ----------

А вообще, в красной книжке всё это есть, надо просто внимательно почитать.

esl
22.11.2011, 13:42
Серёжа, ты что, форум не читаешь? :)


я ж не могу читать ВСЕ ветки ?!? ;)

tnt23
04.09.2012, 10:57
Команда OUT выполняет неразрушающее считывание аккумулятора. (Да и с чего бы быть иначе?)

tnt23
04.09.2012, 11:22
Насколько я правильно Вас понял, аккумулятор по прежнему будет содержать число 2FH?
Да, аккумулятор по-прежнему будет содержать число 2FH.

Тогда правильно ли я знаю, что аккумулятор меняет своё значение только при выполнении логических и арифметических команд, так как результат при их выполнении помещается в аккумулятор, что естественно изменит его содержимое?

Не только. Команды MOV A, x или IN PORT тоже имеют конечным приёмником аккумулятор. И еще команды инкремента и декремента аккумулятора. И еще восстановления из стека POP PSW.

tnt23
04.09.2012, 11:41
Виктор, рекомендую:

Система команд микропроцессора КР580ИК80 (журнал «Радио» № 10, стр. 24, 1982)

SegaBoy
05.11.2012, 14:46
...Первый из них, это правильно ли я понял, что если указать, как вход в стек, ячейку FFFFh, то в неё ничего писаться не будет. То есть она никогда не будет использоваться, и просто не доступной для пользователя становится...
Да, всё верно. Если указать на ячейку FFFFh то запись будет в FFFE-FFFDh. Если в указататель стека поместить 0000h, то как раз будет использоваться FFFF-FFFEh.

tnt23
22.11.2012, 22:24
1BH (десятичное 27) - это код ESC.

Собственно, про ESC много жевалось тут: http://zx.pk.ru/showpost.php?p=435029&postcount=43