Просмотр полной версии : Вопросы программирования на ПЭВМ "ИРИША", "ИРИША-Л" и "ИРИША-М"
Viktor2312
01.09.2011, 23:56
...
Кое что уже делали ;)
вот ссылка (http://zx.pk.ru/showthread.php?p=409186#post409186)
я в ковырял там большой кусок, особенно с conout
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). :)
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.
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, получится то-же самое.
И никаких справочников не надо :)
небольшая подпрограмма которая начинается с адреса 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
Именно эта карта необходима для взаимодействия МП с КНГМД.
И правильно ли я понял, что если стоит "-" тире, то это означает, что бит сброшен (равен лог.0), а если он обозначен, значет установлен (равен лог.1). Тогда если все биты регистра признаков будут установлены в состояние лог.0 будет так отображаться: ----- , а если они установлены то так: SZ(AC)PC . Бит вспомогательного переноса АС обозначил в скобочках, так как не знаю как он будет отображаться, так как на него выделено одно знакоместо, но думаю скорее всего просто "А"???
Всё правильно. Менять значение флагов можно пробелом.
А какими командами (или Esc-последовательностями) задаётся режим экрана для CONOUT? Через порты переключить несложно, но драйвер вывода об этом ведь не узнает.
В двух словах, можешь объяснить что значит Esc-последовательности.
В двух словах: это такая последовательность символов, начинается кодом 1Bh (код клавиши Esc), затем буква, означающая для драйвера консоли определённую функцию, ну и параметры могут быть, заканчивающиеся иногда символом ]. Есть стандарты, VT52, VT100, но могут быть и расширения, например для управления режимом экрана.
И в итоге при записи хоть 98H, ноть 9AH у нас происходит вот такой казус
Казус может быть и не показался бы казусом, если изменить палитру командой O1,D9. Обрати внимание на ширину пикселей случайных данных в верхней части экрана (после O98,D8).
Так что получается эмулятор бесполезен в плане написания программ, если требуется переключение между режимами, он всегда нам отображает содержимое как в режиме 2 (Цветной среднего разрешения, 320 х 200 точек), а содержимое регистра управления не соответствует действительности. Жалко...
Бесполезен для людей, которые не пытались что-либо написать :)
Судя по твоим скриншотам, ты уменьшил окно эмулятора. Выбери в меню 1:1, иначе изображение будет размыто, и разницы действительно не заметно.
Вот тут лично мне немного не понятно насчёт второй страницы, а где первая и откуда появилась вторая страница. У нас на модуле имеется 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-им режимом не всё гладко? :)
А какими командами (или 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-ий режим оправдываются. :(
По поводу цветов: когда цвет букв чёрный, фон действительно должен быть белый, так что в книге опечаток нет. Про это я знаю, но пока никто не жаловался :) В остальном, я надеюсь, палитра соответствует описанию.
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 выключить экран (вроде бы)
дальше то же
А что именно не нравится?
Уже разобрался. :) Заявка снимается. ;)
После этих последовательностей курсор странно мутирует. :)
Я понял, почему снизу обрезано - межстрочное расстояние меньше, а количество строк осталось то же (видимо, задаётся другими командами).
По поводу подрезки экрана. Если после 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:
Короче, всё это описано в красной книжке, начиная со стр. 92.
ESC-последовательности там называются BSO-последовательностями (стр. 94)
---------- Post added at 00:28 ---------- Previous post was at 00:23 ----------
не при делах? :v2_conf2:
Всё там при делах, можно даже его менять командой SFF45. Вот только ESC+Q как-то странно его меняет. Я рассчитывал, что параметр просто пишется по адресу FF45, но похоже это не так.
Вот только ESC+Q как-то странно его меняет.
Вот этот момент и интересен. Пишется об одном, а на самом деле - не так.
Кстати, судя по рис. 9.13 - выключить экран этой последовательностью нельзя.
Вопросы похоже остались, надо вскрывать суть, ломать CONOUT. ;)
Что-то я не понял и зачем мне эти коды при работе программы, когда выполняется программа, например какая-то и вдруг мне потребовалось, чтобы систему графиков и так далее на экран прога вывела в разрешении 640 х 200. писать посередине экрана "Эй пользователь а ну нажми ESC+Q+B
Нет конечно. Не надо просить пользователя. Программа просто напечатает эти коды через CONOUT. Например в бейсике: PRINT CHR$(27);"QB"
и нет реального компьютера, с которым можно было бы сравнить картинку,
Есть, так что если что надо проверить в мониторе - пиши.
Вводо-вывод на/с ленты/диска пока не проработан, а в мониторе могу что-нибудь потестить.
ESC+Q+A 320x200 страница 1 (E000-FFFF)
Набрав эту комбинацию, сразу же получаем подрезку экрана.
ESC+Q+P выключить экран (вроде бы)
Очень похоже на правду, но для нулевой страницы. Если до этого мы были в первой, то попадём в нулевую. А набрав это:
ESC+Q+D
Увидим, что мы набирали "в темноте". :)
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
esl, поясни, пожалуйста, а как быть с соответствием рисунку 9.13 символов: #, ", !. Что-то здесь не вяжется. :v2_conf2:
как это не вяжется
ну ошибка там одна точно есть
ESC Q ' ' (0x20 пробел) режим 1 0 страница
ESC Q ! (0x21 !) режим 1 1 страница
ESC Q " (0x22 ") режим 2
ESC Q # (0x23 #) режим 3
нас интересуют 2 младших бита
они и переключают режим
т.е.
Спасибо! Но я про биты "MODE". :)
Параметр последовательности "ESC+Q" и "MODE" не одно и то же, я об этом.
точно, исправил
в коде выше видно что 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
ESC Q A - 0x41 - режим 1 1 страница mode
Если сделать так, интересный фокус случается: включается 20 строк, и курсор "мутирует". Если затем ввести ESC Q ! - всё возвращается на свои места. Можешь проверить. ;)
бит 40 отвечает за 20/25 строк на экране
читаем стр 90
в режиме 25 строк - символ 8 строк и курср инверсный симво и
в 20 символ 10 строу и курсор 2 нижних строки
все ок
почему не используем весь экран - не знаю, надо код дальше копать
сделай D0 в обеих режимах и увидишь разницу
похоже что высоту символов биос поменял а кол-во строк на экране забыл
на скриншотах подтверждение
Ctrl+L
Enter
D0
в ESQA остался хвост от ESQ! но влезло ровно столько же
Спасибо, пояснил. Я на промежуток между строками не обратил внимания. :)
---------- Post added at 02:32 ---------- Previous post was at 02:28 ----------
Интересно, что это за баг?
скорее всего баг
т.к. в книге этот режим называется 25 строк
сколько ж там похоже "багов", во всем :( :(
esl, скинул в соседней теме более свежую версию CONOUT. Этого бага в нём нет. :)
http://www.zx.pk.ru/showpost.php?p=430073&postcount=29
P.S. Надо бы сверить бинарник из эмулятора b2m с дампами из МПСиС и красной книги, может быть какие-нибудь ошибочки найдутся?
у меня с этим ромом не стартует эмулятор ...
у меня с этим ромом не стартует эмулятор ...
Это только 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]
Должно заработать. :)
скорее всего баг
т.к. в книге этот режим называется 25 строк
Может это не баг, а фича? :)
В конце-концов, после смены режима можно делать Esc+L - окно во весь экран, отрабатывает нормально.
Может это не баг, а фича? :)
В конце-концов, после смены режима можно делать Esc+L - окно во весь экран, отрабатывает нормально.
Во как! Прикольно. Что-то в этом есть. :)
заработало, похоже я криво ромы склеил :(
думаб что баг, таки
вот новый код
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
тут все прямо и понятно
заработало, похоже я криво ромы склеил :(
Я не клеил, просто конфиг подправил. :)
esl, у тебя не будет желания и возможностей разобрать эти обе версии версии CONOUT по запчастям? ;)
СПАСИБО! :)
времени и желания не хватит ...
первый я частично разобрал, и выкладывал тут.
времени и желания не хватит ...
Ясно... ;) Тогда, что мне думать о себе? :(
первый я частично разобрал, и выкладывал тут.
Я помню, и очень благодарен. :)
Так же неизвестно в каком состоянии находится регистр признаков, можно ли его принудительно сбросить в самом начале программы.
это абсолютно не важно, сам по себе регистр флагов мало интересен
он нужен ТОЛЬКО после выполнения операции
т.к. в нем будет установлен соответствующий флаг стоять
который мы дальше и проверим
и обычно после этой проверки нам он уже и опять не важен
для отдельных битов есть команды установки сброса
типа STC/CMC для С
z можно сбросить ORA A
где-то так.
hlt - это таки останов ;)
пишу как помню, справочника под рукой нет, но гуру поправят
если прерывания запрещены - то процессор навсегда остается на этом адресе
если разрешены, то висит до возникновения прерывания а после переходит на следующую команду после возникновения? или обработки?.
если прерывания запрещены - то процессор навсегда остается на этом адресе
если разрешены, то висит до возникновения прерывания а после переходит на следующую команду после возникновения? или обработки?.
гуру (?) поправят, только вот кто это делал практически?
теоретически тут надо вспомнить о контроллере прерываний.
ВН59 должен дергать INT и потом отдавать 3 байта - CD ХХ ХХ тобишь CALL XXXXh.
А вот выход из прерывания? Если не выполнять комманду RET а заканчиват процедуру коммандой HLT то растущий стек потрет остальное ОЗУ. А если выполнять RET ? Куда мы попадаем ?
Из состояния останова микропроцессор выводится следующими способами:
1. Путём подачи H-уровня на вход сброса RESET...
2. Путём подачи H-уровня на вход прерывания INT, микропроцессор реагирует на этот сигнал только в том случае, если установлен внутренний триггер разрешения прерывания (INTE=1). ...
Важно подчеркнуть, что в состоянии останова микропроцессор стандартным образом реагирует на сигнал HOLD запроса ПДП с формированием сигнала HLDA подтверждения ПДП для контроллера ПДП.
стр. 47, В.Л. Григорьев, "Программное обеспечение микропроцессорных систем".
ВН59 должен дергать INT и потом отдавать 3 байта - CD ХХ ХХ тобишь CALL XXXXh.
Контроллер прерываний может отдать и более короткую команду "RST i".
В любом случае, логикой работы команд CALL и RST предусмотрено запоминание в стек "содержимого PC как адреса возврата".
А вот выход из прерывания?
А если выполнять RET ? Куда мы попадаем ?
Вернёмся по адресу следующему за HLT.
Вроде бы так. :)
угу, следующая после 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
Что-то не очень получается, что либо сделать.
Там не всё так просто :)
Когда отладчик запускает программу, или редактирует память, он считает, что ПЗУ выключено. Т.е. чтобы что-либо вызвать из ПЗУ надо его включить командами MVI A,0 / OUT 12h
Там, однако, есть ещё один подводный камень: отладчик по умолчанию оставляет в регистре SP 100h, и если включить ПЗУ, то вернёшься чёрт знает куда. Поэтому нужно назначить стек выше 4000h.
Стандартная точка входа в CONOUT: 2000h, код символа нужно поместить в регистр С.
Вот пример:
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 уходит в пустоту (и что там проиходит - фиг известно ;)
надо сначала включить ПЗУ, а только после этого делать вызов.
Чтобы результаты были более предсказуемые, надо ввести команду O0,12
Затем надо командой XS задать указатель стека, например 4100
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 рассписал вроде.
То есть с этими проблемами, требованием переписи содержимого аккумулятора в порт В ППА мы сталкиваемся только в эмуляторе, а в железе всё будет работать как надо?
В железе будет работать точно также, как и в эмуляторе :)
То есть с этими проблемами, требованием переписи содержимого аккумулятора в порт В ППА мы сталкиваемся только в эмуляторе, а в железе всё будет работать как надо?
эмулятор это программная копия реального железа.
т.е. на нем все работает как на настоящей ирише
иначе как-бы работал биос и остальной софт, он же 100% копия оригинального ;)
Контроллер прерываний может отдать и более короткую команду "RST i".
мои доки молчат о такой возможности.
мои доки молчат о такой возможности.
Atari, посмотрите в сторону 589ИК14. ;)
KokaF77, посмотрю, просто я писал конкретно о ВН59, так что с Вашей стороны стоилоб уточнять сразу.
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
Правильно ли я понял, что в 4012h находится команда B7 т. е. ORA A которая произведёт логическую операцию ИЛИ над содержимым аккумулятора и вторым байтом команды
Над содержимым аккумулятора и вторым байтом команды операцию ИЛИ делает команда ORI xx (где xx - число, второй байт команды).
ORA A делает ИЛИ аккумулятора с самим собой. Используется обычно, чтобы установить флаги Z,S,P в соответствии с содержимым аккумулятора. В качестве побочного эффекта устанавливает CY=0 (поэтому есть команда установки STC, но нет команды сброса).
В данном случае был необходим флаг Z, чтобы определить, кончилась ли строка (в конце которой стоит ноль). Следующая команда с кодом C8 это RZ - выход из п/п если установлен флаг Z (т.е. строка кончилась).
А с операцией ИЛИ я правильно всё подсчитал?
Нет, смотри мой предыдущий пост.
Viktor2312, пока ты писал, b2m уже ответил. :)
В данном случае был необходим флаг Z, чтобы определить, кончилась ли строка (в конце которой стоит ноль). Следующая команда с кодом C8 это RZ - выход из п/п если установлен флаг Z (т.е. строка кончилась).
чтобы что-либо вызвать из ПЗУ надо его включить командами MVI A,0 / OUT 12h
Для корректной работы "в лоб" включать нулевую страницу не совсем хорошо, надо же и назад вернуться. :)
А можно как-то поподробнее объяснить зачем мы заносим в порт В все нули? В таблице 3.1 указано, что порт 12h - это порт В БИС КР580ВВ55А.
В книге ошибка! 12h - это порт C.
Посмотри здесь:
http://zx.pk.ru/showpost.php?p=436023&postcount=31
В книге ошибка! 12h - это порт C.
Переставлять линии шины адреса - это у них фишка такая :)
Может вначале оно так и было (А0 и А1 к ППА возможно были переставлены), но потом решили не путать народ. А в документации так и осталось :)
Что это за чудеса? Везде "подрезана" первая буква. :(
Что я не так сделал? :v2_conf2:
Пример от b2m:
30991
Русские буквы, вариант Vikror2312:
30992
По адресу 4014 у меня не 4E, а 4F :)
b2m, спасибо! Совсем слепой стал... :( Главное листинг сбацал нормально, а тут...
Всё Ок. Всё работает и по-русски и по-английски. :)
Сохранить W4000,30
Загрузить R4000,30
Для файлов Ириши предлагаю использовать расширение .rki
Не получается сохранить, набираю, появляется чёрный экран секунд на пять потом обратно возвращается и ничего не происходит.
У тебя устаревшая версия :) В последней должно автоматом окно сохранения .rk появляться.
А если через меню Файл->сохранить->пишем имя и сохранить, то потом не открывается если расширение .rki если .rk сделать, то при попытки открыть виснет эмулятор.
Да, там корректность .rk файлов не проверяется, а то, что через меню Файл->сохранить - это внутренее состояние эмулятора, его расширение не надо менять, должно быть .emu
Не получается сохранить
Вот, сохранил:
Вот, сохранил:
А ты наивно думаешь, что он сможет загрузить? :)
Загрузку и сохранение я одновременно в эмулятор добавил.
А ты наивно думаешь, что он сможет загрузить? :)
Это чтоб не мучился набирать. ;)
Загрузку и сохранение я одновременно в эмулятор добавил.
Я в курсе. Проверил. :)
b2m, какие-либо стандартные утилиты CP/M можно портировать, например с того же Корвета? Хотелось бы попробовать копирование с диска на диск и сохранение из памяти на диск, а без инструментов - "не туды и не сюды". :(
---------- Post added at 19:22 ---------- Previous post was at 19:20 ----------
Заодно бы добавил в образ парочку имеющихся у меня.
какие-либо стандартные утилиты CP/M можно портировать, например с того же Корвета?
Стандартное должно работать везде. Если под стандартом понимать то, что программа кроме LHLD 1 (верхняя граница памяти) и CALL 5 (вызов фукций CP/M) ничего другого не использует.
Ура, заработало! :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 не подходит никак.
Какие еще драйверы экрана есть для 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/)
b2m, объясни, пожалуйста. :) Эмулятор позволяет подключить папку как диск?
У меня это каким-то образом получилось. И как эту манипуляцию правильно делать?
---------- Post added at 22:30 ---------- Previous post was at 22:28 ----------
Viktor2312, подразумевалась более старая версия эмулятора. Ты ведь об этом писал, когда говорил о своей проблеме? :)
Потанцевав с бубном, скопировал в образ ГМД (в эмуляторе диски E и F) парочку полезных утилит: PIP и DDT.
Утилитки работают. :)
Бубен не нужен. Если выбрать вместо образа All files (*.*), то они появятся на "виртуальном" диске. Но для GMD, конечно, не работает. Это только для версии контроллера на ВГ93 (который в конфигурации Irisha).
А там уже можно и PIP запустить, и файлы на образы им копировать :)
Как?
Viktor2312, скачай последнюю версию с сайта b2m. На данный момент версия от 17.11.2011г.
Что подразумивается под этими словами?
То, что тебе надо скачать свежую версию эмулятора :)
А там уже можно и PIP запустить, и файлы на образы им копироват
Я потом так и сделал. :)
Сначала выбрал диск ВГ93, запустил PIP, а им уже дальше скопировал куда надо. ;)
Правильно? :)
b2m, объясни, пожалуйста. :) Эмулятор позволяет подключить папку как диск?
У меня это каким-то образом получилось. И как эту манипуляцию правильно делать?
При выборе файлов в качестве фильтра использовать All files (*.*). Если, конечно, эта фича поддерживается в выбранной конфигурации.
Ну так дайте ссылку на архив с эмулятором нормальной версии.
Ссылка в подписи b2m. :)
http://bashkiria-2m.narod.ru/download.html
Ну так дайте ссылку на архив с эмулятором нормальной версии.
http://bashkiria-2m.narod.ru/download.html
А раньше ты где брал эмулятор?
При выборе файлов в качестве фильтра использовать All files (*.*). Если, конечно, эта фича поддерживается в выбранной конфигурации
Вот в этом и есть вопрос! Так у меня не получилось, увы. Я выбрал левый файл, а подцепилась вся папка. Странно...
B2M: КОГДА БУДЕТ ДОКУМЕНТАЦИЯ !!!!!!!!!!!!!!!!!!!!!!!!!
;) ;)
B2M: КОГДА БУДЕТ ДОКУМЕНТАЦИЯ !!!!!!!!!!!!!!!!!!!!!!!!!
;) ;)
Серёжа, ты что, форум не читаешь? :)
---------- Post added at 23:49 ---------- Previous post was at 23:44 ----------
Я выбрал левый файл, а подцепилась вся папка. Странно...
Это фича. :) Надо же было как-то оставить возможность выбрать всю папку. Не нравится вся папка - выбирай файлы, которые требуются.
Если выбран только один файл, значит пользователь не заморачивался с выбором, и будет вся папка. Для себя-же делал. Мне просто лень все файлы в папке отмечать :)
b2m, Спасибо! Я понял. Значит я интуитивно всё сделал правильно. И с ПИПом - тоже. :)
Теперь даже музыка при запуске играет.
Опа. :eek_std:
Это ж какая старинная версия у тебя была!!!
Немудрено, что непонятки были :)
---------- Post added at 23:53 ---------- Previous post was at 23:52 ----------
Значит я интуитивно всё сделал правильно. И с ПИПом - тоже. :)
На это и был рассчёт :)
Чтобы пользователь интуитивно делал всё правильно.
На мой взгляд - так удобнее.
А документация - для хлюпиков :)
Когда я запускаю эмулятор, выбираю монитор и там набираю команду R4000,30 я вторым пераметром задаю сколько байт считать, если я правильно понял.
Правильно.
А если я его не указываю, то команда не выполняется, пишется вопрос и приглашение.
Когда второй параметр не указывается, он считается равным нулю, а в командах R/W это не имеет смысла.
А как быть если я захочу через год считать эту программу, я уже точно не буду помнить сколько там байт?
Насколько я понял, авторы задумывали, что перед программой всегда будет стандартный загрузчик, который считывается по адресу A000h и имеет стандартный размер 100h байт. А уж в нём будет указано, куда считывать, сколько, и какая должна быть контрольная сумма.
Именно этот загрузчик и считывается, когда в загрузочном меню выбирается "магнитофон". В конце книги перед программами есть дампы этих загрузчиков.
Насколько я понял, авторы задумывали, что перед программой всегда будет стандартный загрузчик, который считывается по адресу A000h и имеет стандартный размер 100h байт. А уж в нём будет указано, куда считывать, сколько, и какая должна быть контрольная сумма.
Именно этот загрузчик и считывается, когда в загрузочном меню выбирается "магнитофон". В конце книги перед программами есть дампы этих загрузчиков.
Вот оно что! Теперь мне стало ясно такое хитрое расположение блоков в дампах программ. :)
P.S. Пробовал поиграться с POWER, взял из архивов esl. Эта штука затачивается под конкретное железо или она всё-таки универсальная? :)
Универсальна
Его можно тюнить по экран
Были доки
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
:)
Вот тут и возникает вопрос, а как выводить, например, только один или несколько символов (знакомест) в конкретную позицию на экране, так чтобы остальная картинка при этом не менялась?
Курсор можно позиционировать 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 ----------
А вообще, в красной книжке всё это есть, надо просто внимательно почитать.
Серёжа, ты что, форум не читаешь? :)
я ж не могу читать ВСЕ ветки ?!? ;)
Команда OUT выполняет неразрушающее считывание аккумулятора. (Да и с чего бы быть иначе?)
Насколько я правильно Вас понял, аккумулятор по прежнему будет содержать число 2FH?
Да, аккумулятор по-прежнему будет содержать число 2FH.
Тогда правильно ли я знаю, что аккумулятор меняет своё значение только при выполнении логических и арифметических команд, так как результат при их выполнении помещается в аккумулятор, что естественно изменит его содержимое?
Не только. Команды MOV A, x или IN PORT тоже имеют конечным приёмником аккумулятор. И еще команды инкремента и декремента аккумулятора. И еще восстановления из стека POP PSW.
Виктор, рекомендую:
Система команд микропроцессора КР580ИК80 (журнал «Радио» № 10, стр. 24, 1982)
...Первый из них, это правильно ли я понял, что если указать, как вход в стек, ячейку FFFFh, то в неё ничего писаться не будет. То есть она никогда не будет использоваться, и просто не доступной для пользователя становится...
Да, всё верно. Если указать на ячейку FFFFh то запись будет в FFFE-FFFDh. Если в указататель стека поместить 0000h, то как раз будет использоваться FFFF-FFFEh.
1BH (десятичное 27) - это код ESC.
Собственно, про ESC много жевалось тут: http://zx.pk.ru/showpost.php?p=435029&postcount=43
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot