Что ругаешься? Может он так задумывал.
Код ведь не соответствует add hl,bc
Что ругаешься? Может он так задумывал.
Код ведь не соответствует add hl,bc
Я всё писал в мнемонике Z80, но для совместимости с ВМ80 (эмулятор всё равно расширенные команды не пропускает - заточен под ВМ80). А приведённая подпрограмма учитывает перенос в старший разряд. Если и adc пойдёт, то напишите. Чуть подзабыл ассемблер, лет 7 со времен писания программ под Скорпион прошло...
Если по условию нужно сложить именно [HL] и [BC] как 16ти битную арифметику, то:
1. Не нужно сбрасывать 'C', т.к. первая команда сложения не учитывает этот флаг.
2. Корректировать старший байт нужно ДО второго сложения.
3. А значит, подпрограмма будет выглядить так:
4. Но если вспомнить таблицу команд ВМ80, то можно просто сделать DAD B и всего делов...Код:PUSH PSW MOV A,L ADD C MOV L,A MOV A,H ADC B MOV H,A POP PSW RET
PS Я предлагаю использовать TASM и в родных мнемониках ВМ80.
Последний раз редактировалось HardWareMan; 16.10.2011 в 19:04.
А вот коды этой подпрограммы и некоторых других я взял то с сайта Shoorickа (если автор не против), конкретнее с архива.
Я уже выкладывал этот док на соседнем форуме, но думаю, что он понадобиться и тут. Это реплика удобной таблички команд 580ВМ80 из журнала Радио, статья про Радио-86РК. Думаю, что в соседней ветке про Радио и Орион она тоже будет полезна.
(๑•̀ㅂ•́)و✧ Doors UI → https://t.me/doorsui | https://t.me/atari_xl_xe ← Atari XL/XE (●´ω`●)ゞ
Я, пожалуй, начну с BIOSа. И так понятно, что это ответственная часть. В самом BIOSе всего несколько ключевых подпрограмм. И начну я с вывода символа.
Вывод символа будет стандартный для Спеца (для поддержки совместимости): 64х25, даже координатная сетка будет та же. Только реализация будет быстрой и с поддержкой цвета. Задумок много, пока только оформлю хотелки. Для начала все будет писаться для именно для стандарт режима, потом допилится и до МХа.
1. Полная совместимость со старыми программами, которые печатают старый текст в режиме КОИ7. А значит будет управляющий код, переключающий КОИ7 и ... (нет, не КОИ8р, я его с линупсов не люблю. :3) ср866. Почему? FAT. Этим все сказано.
2. Полная поддержка цвета. 5/8 для стандарта и 16 для МХа. Символы будут выводиться без проверки на перекрытие байтом атрибутов двух символов. Так что эстетическая сторона полностью на совести программистов. :3
3. Поддержка ESC кодов. Вообще, весь сервис планируется именно через ESC последовательности. Во первых, они стандартны (вроде как), а во вторых - можно придумать много своих, не теряя в совместимости со старыми программами.
Пошерстил журнальчики про Орион, 86РК и Спец и нарыл следующие управляющие коды, которые будет поддерживаться моим выводом символа:
Эта таблица не полная, поэтому призываю к активному обсуждению и дополнению ее. Так же, будет введен код управления направления автосмещения. По умолчанию, это курсор вправо. Но можно будет задавать вверх, вниз, влево и даже отменять автоматическое перемещение. Это позволит быстро рисовать всяческие рамки. Так же, хочется повторить много управляющих кодов из МХа, но там они однобайтовые, что в нашем случае не подходит: у нас полная кодовая страница ср866, за исключением кодом менее 20Н. Давайте обсудим это и я примусь за реализацию.Код:07H - Гудок 08H - Влево, с переходом на строку выше на границе экрана 0AH - Перевод строки со скроллингом 0CH - Домой 0DH - Возврат каретки 18H - Вправо с переходом на следующую строку на границе экрана 19H - Вверх со скроллингом 1AH - Вниз со скроллингом 1FH - Очистка экрана 7FH - Инверсия вывода (выключается повтором кода) 1BH - ESC: 1BH, 41H - Вверх 1BH, 42H - Вниз 1BH, 43H - Вправо 1BH, 44H - Влево 1BH, 45H - Стирание экрана 1BH, 48H - Домой 1BH, 4AH - Стирание ниже курсора 1BH, 4BH - Стирание правее курсора 1BH, 59H, (XXH+20H), (YYH+20H) - Позиция курсора 1BH, 61H - Гашение курсора 1BH, 62H - Восстановление курсора
Ах да, сам вывод символа будет запускаться из ПЗУ и сам фонт так же будет находиться в ПЗУ. Как в стандарте, так и в МХе.
Будет ли Монитор иметь константы в ОЗУ, описывающие геометрию экрана (как в Орионе) - на Орионе это позволяло уменьшать "область экрана драйвера" (вводить служебные строки, не попадающие под искейп-обработку)?
Я правильно понял, будешь идти по возможности близко к стандартам VT-52?
Вот результат моих исследований:
Коды помеченные "+" должны быть реализованы обязательно в минимальном наборе (т.е. вместе с другими, возможно не только они).Код:VT52 compliant codes ==================== Orion Monitor-2 Orion CPM (ACPM) MYZ80 CPM.EXE --------------- ---------------- ------------- 01h ------------ ------------ HOME 04h ------------ ------------ CLS+HOME 07h BELL BELL BELL + 08h cursor LEFT cursor LEFT BACKSPACE + 09h TAB TAB TAB + 0Ah LF LF LF 0Bh ------------ ------------ cursor UP 0Ch HOME ------------ CLS + 0Dh CR CR CR 18h cursor RIGHT cursor RIGHT CLREOLN 19h cursor UP cursor UP ----------- 1Ah cursor DOWN cursor DOWN CLS+HOME 1Eh ------------ ------------ HOME + 1Fh CLS+HOME CLS+HOME CR+LF + 7Fh INVERSE ------------ ----------- + 1Bh+34h='4' ------------ LineWrap ON ----------- + 1Bh+35h='5' ------------ LineWrap OFF ----------- + 1Bh+36h='6' ------------ Inverse ON ----------- + 1Bh+37h='7' ------------ Inverse OFF ----------- 1Bh+3Ah=':' ------------ cursor ON CLS 1Bh+3Bh=';' ------------ cursor OFF CLS + 1Bh+41h='A' cursor UP cursor UP cursor UP + 1Bh+42h='B' cursor DOWN cursor DOWN cursor DOWN + 1Bh+43h='C' cursor RIGHT cursor RIGHT cursor RIGHT + 1Bh+44h='D' cursor LEFT cursor LEFT cursor LEFT + 1Bh+45h='E' CLS CLS CLS+HOME + 1Bh+48h='H' HOME HOME HOME 1Bh+49h='I' ------------ set/get ActiveScreen reverse LineFeed + 1Bh+4Ah='J' CLRREOSCR CLRREOSCR CLRREOSCR + 1Bh+4Bh='K' CLREOLN CLREOLN CLREOLN 1Bh+4Ah='L' ------------ INSROW INSROW 1Bh+4Bh='M' ------------ DELROW DELROW 1Bh+52h='R' ------------ set cursor height DELROW + 1Bh+59h='Y'+X+Y cursor position cursor position cursor position 1Bh+64h='d' ------------ ----------- CLRBOSCR 1Bh+65h='e' [ ------------ ----------- cursor ON 1Bh+66h='f' ------------ ----------- cursor OFF 1Bh+6Ah='j' ------------ ----------- save cursor 1Bh+6Bh='k' ------------ ----------- restore cursor position 1Bh+6Ch='l' ------------ ----------- clear line 1Bh+6Fh='o' ------------ ----------- CLRBOLN 1Bh+70h='p' ------------ ----------- Inverse ON 1Bh+71h='q' ------------ ----------- Inverse OFF 1Bh+76h='v' ------------ ----------- line wrap on 1Bh+77h='w' ------------ ----------- line wrap off
Использование только "+"-помеченных кодов позволило мне написать коммандер (исходники на сайте) работающий не только как в "классическом" MS-DOS эмуляторе CP/M, так и на всех VT-52 версиях CP/M Ориона. Кроме того, этот коммандер корректно отображается в RS-232 терминальных клиентах, понимающих VT52 (например стандартном виндовозном HyperTerm). Этот результат на Орионе больше не одним псевдографическим коммандером не достигнут - все прочие рисуют по RS-232 кашу даже при включенной эмуляции VT52.
Файл во вложении - описание Esc-последовательностей драйвера ACPM Ориона. Оконные функции реализовывались через коды расширенного драйвера VT-52 Ориона - последовательностью Esc+W (и не только: стандартные ESC,'L' , ESC,'M' внутри окна дают вертикальный скроллинг содержимого окна вверх/вниз). Esc-W в Орионе реализовано не совместимо с "оконными" искейпами эмулятора MyZ80, но оконные Esc-расширения стандарта VT-52 и не прижились в "стандартных" CP/M приложениях - не используются почти нигде, и как бы это помягче сказать - вообще "недостандартизованы" (неполны, неудобны, не совпадают от мануала к мануалу).
Будут ли векторизированы в ОЗУ подпрограммы Монитора, адрес фонта в некоторой ячейке и т.д.? Это даст подключать пользовательские драйвера и фонты... Например для CР/M, 64х25 - это мало, неудобно. Иногда надо 64х24, и почти всегда надо 80х25, т.е. по любому в CP/М придется подгружаемый драйвер иметь.
Последний раз редактировалось Error404; 17.10.2011 в 15:46.
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)