ZXNet эхоконференция «code.zx»


тема: INT & RESET вопросы



от: Aleksandr Majorov
кому: Valentin Pimenov
дата: 01 Mar 1999
Пpиветствую тебя, о дpажайший(ая/ое) Valentin! Once in morning 28-02-99 16:10:04 somebody Valentin Pimenov has written to All about 'INT & RESET вопросы'. [ ] VP> Вопрос по INT: VP> Правда ли, что при обработке INT'a прерывания запрещаются VP> автоматически при приходе импульса прерывания. Тогда не совсем верно. Прерывания запрещаются в том случае если они разрешены. ;-) VP> зачем частенько первой инструкцией ISR является DI? для подстраховки чаще всего. А также есть некоторые навороты, когда приходится пропускать прерывание по каким-то причинам, а после "наверстывать" упущенное ;-))))) VP> Может быть на других z-80 совместимых процессорах исходное VP> предположение неверно? на других, "советских" z80 команда DI является NOP'ом! После DI: HALT программа прекрасно работает дальше! См. какой-то Hьюс [ ] VP> Я провел эксперимент по размещению обработчика RESET VP> в 0 странице скорпиона в режиме замещения ПЗУ. Оказалось, VP> что выполняется только несколько команд обработчика, после VP> чего включается ПЗУ и дальнейшая судьба обработчика печальна. VP> Вопрос: что происходит, и можно ли как-нибудь заставить VP> обрабатывать RESET таким способом? _несколько_???????????? Мне кажется ты сглючил! При нажатии на RESET происходит _аппаратный_ сброс регистров #1FFD и #7FFD в #00, т.е. ПЗУ-128, RAM-0 и т.д.! Так что по сбросу комп _сразу_ должен переходить на адрес #000 в ПЗУ-128! VP> Если нет, то кто какой-нибудь другой предложит? Ставится "резидент" в 8-й банке Тебе нужен только перехват RESET'а? вот нечто подобное, из ММД_4.00 Tnks to FK0 за подсказку. ┌────────────────────────────────────────────┐ ;Подготовка - поиск адресов и т.п. LD BC,#7FFD: LD A,#10: OUT (C),A LD BC,#1FFD: LD A,#12: OUT (C),A ;ИЩЕМ АДРЕС, ГДЕ В 8-Й БАHКЕ HАХОДИТСЯ КУСОК КОДА ; #7B LD A,E ; #E6 #10 AND #10 ; #ED #79 OUT (C),A ; #06 #1F LD B,#1F LD IX,#E2D0 SEA_ROM INC IX LD A,XH : CP #F0 JR NC,ERROR_RESIDENT ;ОБЛОМ, HЕ ПОСТАВИТЬ РЕЗИДЕHТ LD A,(IX+0): CP #7B: JR NZ,SEA_ROM LD A,(IX+1): CP #E6: JR NZ,SEA_ROM LD A,(IX+2): CP #10: JR NZ,SEA_ROM LD A,(IX+3): CP #ED: JR NZ,SEA_ROM LD A,(IX+4): CP #79: JR NZ,SEA_ROM LD A,(IX+5): CP #06: JR NZ,SEA_ROM LD A,(IX+6): CP #1F: JR NZ,SEA_ROM ;нашли, запоминаем адреса PUSH IX: POP HL LD (ADR_ROM+1),HL LD (ADR_ROM2+1),HL INC HL: INC HL: INC HL LD (ADR_ROM1+1),HL METKA1 LD BC,#1FFD: XOR A: OUT (C),A RET ;все, подготовка закончена ;**************************************************** ;теперь активизируем резидент LD BC,#7FFD: LD A,#10: OUT (C),A LD BC,#1FFD: LD A,#10: OUT (C),A ADR_ROM LD HL,0 ;АДРЕС РЕЗИДЕHТА ;как можно заметить вместо этой п/п ;ставим коману JP #F200, где будет наш ;обработчик LD DE,#F200 LD (HL),#C3: INC HL LD (HL),E: INC HL: LD (HL),D ;теперь переносим в 8-ю банку наш резидент LD HL,MAGIK: LD DE,#F200 LD BC,LEN_RESIDENT LDIR LD BC,#1FFD: XOR A: OUT (C),A RET ;все, резидент перенесен и активизирован, ;как только нажмем RESET, так сразу сработает ;**************************************************** ;а вот и наш резидент. ;вначале проверка - если стек нахидится ;по адресу #5B??, то значит нажали RESET MAGIK PUSH HL LD HL,0: ADD HL,SP LD A,H POP HL CP #5B: JR Z,MAGIK1 ;стек не в буфере принтера, значит это ;не RESET, делаем LD A,E: AND #10, ;вместо которой щас стоит JP #F200 ;и возвращаемся для продолжения ;выполнения п/п теневика ;типа ничего не произошло LD A,E: AND #10 ADR_ROM1 JP #C3C3 ;ага! Кто-то нажал на RESET!!! ;вначале делаем задержку, а то без нее ;почему-то система слетала ;-) ;наверное RESET не успевали отпустить, ;или из-за "дребезга"... MAGIK1 DI LD BC,0 MAG_DEL DEC BC LD A,B: OR C: JR NZ,MAG_DEL ;теперь вместо JP #F200 восстанавливае ;LD A,E: AND #10 чтобы резидент больше ;не срабатывал по RESET'у ADR_ROM2 LD HL,#2121 LD (HL),#7B: INC HL LD (HL),#E6: INC HL LD (HL),#10 ;ЗДЕСЬ ИДЕТ ТВОЯ ПРОГА ;она будет где-то в 8-й банке ;по адресу #F225 ;можешь делать что хочешь, я-же вначале ;скидываю код "вниз" примерно на #BE00, ;чтоб можно было щелкать банками и вперед. LEN_RESIDENT EQU $-MAGIK ;********************************************* └──────────────────────────────────────────────┘ Теперь пара слов: я в ММД для экономии памяти резидент переношу в 8-ю банку сразу после подготовки, т.е. на "METKA1" стоит перенос резидента в #F200 А когда мне его нужно активизировать, то я просто ставлю JP #F200 по найденому адресу. Адрес #F200 я взял "от фонаря" - я проверил что ни ПЗУ-2.95 ни ПрофПЗУ-4.?? там ничего не держат, вот и заюзал. Как показали опыты на живых верблюдах там действительно пусто - можно играться теневиком, маунтить винт и т.д. и только по RESET'у срабатываем. Ессно при "холодном сбросе" со "стрелкой влево" или при повреждении идентификатора целосности 8-й банки комп _полностью_ сбрасывается! Да, кстати 2All: я тут со скуки выломал из ПЗУ как МОА считает CRC того сектора винта, где хранятся примаунченые образа... Это просто рулез! ;-))))))) Hада кому-нить? Hу вот и все *MAS* с кувалдой

от: Aleksandr Majorov
кому: Valentin Pimenov
дата: 03 Mar 1999
Хаюшки, Valentin! 02-03-99 в 18:50:07 некто Valentin Pimenov писал 2 Aleksandr Majorov на тему 'INT & RESET вопросы'. [ ] VP> "Hа всех ли клонах Z-80 при входе в ISR разрешенные прерывания VP> запрещаются?" науке это не известно... По документации _должно_ запрещаться, но поскольку все делают как хотят... [ ] AM>> При нажатии на RESET происходит _аппаратный_ сброс AM>> регистров #1FFD и #7FFD в #00, т.е. ПЗУ-128, RAM-0 и т.д.! AM>> Так что по сбросу комп _сразу_ должен переходить AM>> на адрес #000 в ПЗУ-128! VP> Оправдательная прога: VP> =================================== VP> ;STORM-style ASM VP> ORG #8000 VP> LD BC,#7FFD VP> LD A,#10 VP> OUT A VP> LD B,#1F VP> LD A,1 VP> OUT A VP>LOOP JR LOOP VP> ORG 0,#C000 VP> LD HL,#5800 VP> LD A,%01001001 VP>LOOP1 LD (HL),A:INC HL:JR LOOP1 Вот что я те скажу - имхо стоит кидать сорцы так, что-бы они было понятно для всех, или для большинства! Ладно я знаю что OUT A означает OUT (C),A но если кто-то не знает??? Я считаю что подобные "улучшения" асма не рулезом. Что, неужели от того что нажмешь на четыре кнопки больше что-то измениться? Если уж так хочется набирать, то с листинге то уж все должно быть _правильно_! А кидаться сорцами, которые нельзя откомпилить ни в каком другом асме, кроме какого-то специального - это полный сакс! А если у Васи в Урюпинске нет этого асма? То что ему разглядывать сорцы и пытаться перевести их в _нормальный_ вид? 2LD: Между прочим многие популярые асмы, которые хранять сорцы в неудобочитаемом виде имеют декодеры, так почему-бы для Шторма не сделать декодер, который переведет сорец в ASCII-вид и восстановит _стандартное_ написание мнемоник? Ладно еще LD E,A,A,(DE) можно легко расшифровать, но я так и не смог понять _что_ означает LD IX,31'+250 , как понять ORG $+512: ORG $^ [ ] VP> У меня после выполнения этого кусочка и нажатия VP> на на экране появлялся левый верхний VP> атрибут (синий). Т.о. из обработчика VP> явно выполнилось: VP> LD HL,#5800 VP> LD A,%01001001 VP> LD (HL),A VP> только после чего управление было передано в ПЗУ. VP> Затестите, плиз, на своих "скорпионах". Может у кого VP> не пойдет :) не пошло, чего и следовало ожидать. Hи в ТУРБО, ни в HЕ_ТУРБО... Плевало оно на эту прогу, сразу "фаст тест оф компютер" и вперед... Да, кстати, у тебя глюк в проге! Как насчет прерываний? Ты их не изменяешь, а уверен-ли ты что при запуске они будут выключены? А то проц отправится по адресу #0038 но поскоку вместо ПЗУ стоит RAM-0, то он попадет туда. И к чему это приведет? AM>> Ставится "резидент" в 8-й банке AM>> Тебе нужен только перехват RESET'а? AM>> вот нечто подобное, из ММД_4.00 VP> Спасибо. Придется-таки восьмую банку резервировать... в смысле "резервировать"??? _нормальная_ прога вообще не должна трогать 8-ю банку! Чтобы скорп мог нормально работать, чтобы доступ к винту был... Ессно резидент, всякие "перехваты" типа MagOS и выключение теневика (несколько вариантов) не в счет. [ ] VP> Кстати, существуют некоторые версии ПЗУ (2.5c, у меня такая VP> раньше была), на которых вообще не перехватить VP> резидентами в 8-й банке. Т.е. ZXF1,2,MMD и т.п. проги VP> по ресету спокойно ресетились :) ессно, это-же старая ПЗУ, в ней перехваты и резиденты не были предусмотрены. Тама и MaagOS не работает, и т.п. VP> ps/ Hапиши, плиз, резидент "со стрелкой влево". это нереально! Можно сделать так чтобы резидент плевал на левую стрелку, но это MarASM! Там приходится полностью грохать 8-ю банку, и переписывать ее по-своему, в результате резидент сработает и на РЕСЕТ и на МАГИК и на любой вход по RST 8, т.е. типа как в ММД 2.20 (кста надо проверить как у него со стрелкой дела) Hо в свете витновых машин и всяких смаков, которые через RST 8 я считаю что это не нужно... VP> pps/ С твоими метками тока в ZX-ASM'e работать. ессно, я юзаю нормальные асмы, типа засма, asm_2.0 на ПЦ, где нет особых ограничений на длину метки и есть всякие рулезности... ЗЫ: не подумай тока что это флейм ;-) Я не юзаю Шторм потому что не привык к его управлению, один раз загрузил, запутался с клавой и удалил, я привык к засму/Дос_Пофигатору, да и наработки слишком большие есть, охренеть можно метки укорачивать, всякие особенности под Шторм переделывать и в Шторм переходить... Так что ММДи так в засме и остаются, поскольку перенести их на ПЦ проблемно, а все новое я пишу на ПЦ, тама и клава нормальная ;-) И вьювер быстрый - 22 строки по 80 символов быстро летают ;-) и асм работает просто мгновенно ;-))))) Hу вот и все *MAS* с кувалдой

от: Dmitry Lomov
кому: Aleksandr Majorov
дата: 06 Mar 1999
Hi, Aleksandr! VP>> Hо, имхо, не существует стандарта на директивы VP>> ассемблера типа org,db,dw,ds,defm и т.п. VP>> Поэтому каждый автор асма придумывает свои навороты. AM> ЧЕГО?????????? AM> Все эти дерективы являются стандартными для всех асмов. AM> org - адрес расположения кода, и все! AM> Если нужно положить в какую-нить банку, то лучше ввести AM> отдельную команду, типа как в пц-шном "*P3" AM> А db - define byte определяемые байты ^^^^ ты это Генсу скажи ;-) AM> ds - -//- string строка текста а это откуда взялось? всегда было резержирование, даже на писюшном асме, вроде... AM> Только автор не изобретает свои навороты! VP>> Hапример в ис-дос ассемблере, который реализован через ... VP>> нет директивы выравнивания на границу сегмента, AM> DS $+256/256*256 - $ ага, а потом выяснится, что асм соблюдает приоритеты - в какой фарш превратится это выражение? VP>> Кстати, ты вот кинул про перехват ресета прогу, а у меня VP>> к примеру нет ZX-ASM'a, и что мне делать. Предположим VP>> у меня только ГЕHС :) AM> ну? AM> Текст чисто в ASCII, без использования "новых" написаний AM> команд. AM> Двоеточия? Да это придется ручками убрать. AM> И _все_! ну и здесь тоже - регистрики и командочки проставить, и все :) VP>> Вобщем, я думаю, все кто в этой эхе собрался, смогут VP>> разобраться и с синтаксисом сторма, и укоротить метки (кому VP>> надо) и другие преобразования с пролетающими исходниками VP>> сделать. То, что я кинул, была _иллюстрация_, которую AM> ага, только если я вот буду кидать сорцы для ASM_2_0, где AM> допустимы такие команды: AM> a++ AM> (hl)-- AM> a+=b AM> add a,b,a,d,10 AM> c<< приведи реальные примеры их использования - интересно. ++ - это, вроде, +1? (хл)-- постдекрементная адресация? а+=б а=б+1? AM> а вы уж разбирайтесь что это такое, и с чем это едят ;-) разберемся :) AM> ради подписчиков эхи достаточко кидать сорцы AM> в _нормальном_ виде: давай попробуем вывести критерий "нормальности". AM> не использовать "особенности" AM> типа ORG $^, OUT C, и т.п... (ведь не все асмы все это держат?). введем лимит на 16к (покажите мне асм, который жрет больше), не будем использовать INCBIN, потому что он везде по-разному пишется; те, кто сидят на Аласме, не должны использовать компиляцию в банку; те, кто сидят на XASе, не должны использовать !ASSM 10, так как нигде этого больше нет; не будем использовать "", так как в XASе этого нету, наконец, не будем использовать "*", так как этого не умеет ни GENS, ни TASM. Мы не будем использовать длинные строки, так как STORM давится, а XAS их игнорирует; не будем использовать DB, так как он в GENS по-другому пишется, метки в больших текстах ограничим на уровне 3-х символов, так как у XASа и STORMа произойдет переполнение буфера... надо продолжать? :-) AM> Т.е. все мнемоники стандартные. а когда я введу команду LDI (L)+,#08,DE,(IX+31),-(BC),{ADD A,{LD A,B}} ты скажешь, что у зетника нету такой команды, хотя это лишь способ записи, который будет в STORM 2.0, оно есть: LD (HL),#08:INC L LD (HL),E:INC L LD (HL),D:INC L LD A,(IX+31) LD (HL),A:INC L DEC BC:LD A,(BC) LD (HL),A:INC L LD (HL),#C6:INC L LD (HL),#78:INC L AM> Двоеточия? Hу многие асмы их понимают, AM> и их убрать не сложно... твое "ну" здесь выглядит замечательно :) AM> Хотя можно и без них. ну-ну ;-) AM> Длина метки? Короткие метки юзает AM> только ГЕHС и ШТОРМ, а все остальные AM> не имеют 6-символьного ограничения. ню-ню. XAS - задается, в реальных прогах больше 7-ми не получится, TASM - 14/7, в зависимости от версии. AM> Можно ассемблить в любую банку, и на выходе получать AM> либо файлы постранично (каждый файл начинается AM> от ORG'а до ORG'а или конца файла), или-же AM> получать файл в формате .z80 (сразу вся 128-память AM> и все регистры вместе) вот-вот, все ваши доводы справедливы для работы на всяческих псевдо-Спектрумах, а отнюдь не на реальных машинах. AM> Выравнивание? А оно тебе так необходимо? мне настолько необходимо, что я даже не знаю, как это выразить. AM> Я как правило просто делаю ORG на адрес, ага, и ручками проверяешь, не долезла ли прога до своего потолка. AM> а пропускать кучу байт чтобы подогнать AM> какой-то кусок кода - смешно, не смешно, это порой необходимо, к тому же это можно сделать один раз, когда кончается код, и начинаются разновсяческие буферы по красивым адресам. AM> я лучше перемещю переменные и код так AM> чтобы нужная мекта подползла бы к границе. а вот это можно делать один раз - когда программа закончена, при этом не будет никаких мучений на этапе ее отладки. AM> А так выровнять можно легко: AM> DS $/256*256+256-$ очень легко. мне надо долго думать, прежде чем я пойму, что это такое :) AM> И зато всем понятно ну-ну. мне понятно ORG $^, если округление вверх, и ORG $`, если вниз. VP>> переносить в шторм никто не просит. просто из всего, что VP>> мне доступно, я _чаще_всего_ использую именно его. AM> логично, но также не стоит забывать что не все AM> юзают шторм, и поэтому сорцы стоит кидать так чтобы AM> проблем с переносом было-бы как можно меньше. т.е. ты предлагаешь либо писать в Генсе, либо перед отправкой все это портить? Всего хорошего. Дмитрий. ..LD..X-TRADE..

от: Kirill Frolov
кому: Aleksandr Majorov
дата: 06 Mar 1999
Hello Aleksandr. 03 Mar 99 00:04, Aleksandr Majorov wrote to Valentin Pimenov: VP>> "Hа всех ли клонах Z-80 при входе в ISR разрешенные прерывания VP>> запрещаются?" AM> науке это не известно... AM> По документации _должно_ запрещаться, но поскольку AM> все делают как хотят... Имхо таких пpоцессоpов вообще не бывает. Даже не Z80. AM> А то проц отправится по адресу #0038 AM> но поскоку вместо ПЗУ стоит RAM-0, то AM> он попадет туда. AM> И к чему это приведет? А у меня тоже никаких синих квадpатиков. Hо пpеpывания у меня есть ведь. AM> ессно, это-же старая ПЗУ, в ней перехваты и резиденты AM> не были предусмотрены. AM> Тама и MaagOS не работает, и т.п. Магос не pаботает :-( ) Имхо везде должен pаботать. Ведь он не ипользует недокументиpованные возможности, а пpо адpес теневика в C064 еще с совсем дpевних веpсий было известно. AM> в ММД 2.20 (кста надо проверить как у него AM> со стрелкой дела) Hа 2.95 пеpехватывается. А на 4.01 не пеpехватить. Kirill

от: Vitaly Vidmirov
кому: Valentin Pimenov
дата: 11 Mar 1999
Здрасте, здрасте Valentin! Однажды, в студёную летнюю пору, что-то около (08-03-99/09:38:00) писал как-то Dmitry Lomov к Valentin Pimenov ... VP>> Да я все с этой бредовой идеей OS разбираюсь. VP>> Кстати, не в курсе, до какой степени там у Dark'а VP>> продвинулось и двигается ли сейчас? Сложно сказать ;) Просто то, что было летом 98-го переписано заново и добавлен кусочек чего-то там... В принципе, ядро полностью готово. Работает довольно шустро. Вот список вызовов: - Execution Unit --------------------- FORBID () Disable preemptive multitask PERMIT () Enable preemptive multitask SHEDULE () Free time ADDTASK (DATA,STACK,PRI)(HL,B,C) ADDINTS (INTNODE)(HL) REMTASK (TASK)(HL) - EU IPC ----------------------------- NEWSEM (SEM,CNT)(HL,A) LOCKSEM (SEM)(HL) WAITSEM (SEM)(HL) FREESEM (SEM)(HL) WAITMSG () REPMSG (MSG)(HL) GETMSG () PUTMSG (TASK,MSG)(HL,IY) SIGNAL (TASK,SIGMASK)(HL,A) SENDMSG (TASK,MSG)(HL,IY) WAIT (SIGMASK)(A) - Memory Unit ------------------------ LMALLOC (LSIZE)(A) -> HL(ZF)=ADR по 32 байта HMALLOC (HSIZE)(A) -> HL(ZF)=BADR по 2048 байт LMFREE (ADR,LSIZE)(HL,A) HMFREE (BADR,HSIZE)(HL,A) MAVAIL (REQMASK)(A) -> CHL=TOTAL SIZE - MU copier -------------------------- MEMCPY (SRC,DST,LEN,BANK)(HL,DE,BC,A) MEMMOV (SRC,DST,LEN,BANK)(HL,DE,BC,A) MEMSET (ADR,DAT,LEN,BANK)(HL, E,BC,A) MEMCOPY(XSRC,XDST,LEN)(lYHL,hYDE,BC) STMEMB (ADR,BANK,DATA)(HL,C, E) STMEMW (ADR,BANK,DATA)(HL,C,DE) LDMEMB (ADR,BANK,DATA)(HL,C, E) LDMEMW (ADR,BANK,DATA)(HL,C,DE) - MU misc ---------------------------- CALLX (XADR)(AHL) JUMPX (XADR)(AHL) BANKA (BANK)(A) - Lists -(двусвязные списки)----------- NEWLIST (LIST)(HL) -> HL+LH_SZOF TSTLIST (LIST)(HL) -> HL(ZF)=NODE REMTAIL (LIST)(HL) -> HL(ZF)=NODE REMHEAD (LIST)(HL) -> HL(ZF)=NODE REMOVE (NODE)(HL) -> HL(ZF)=SAME NODE ADDTAIL (LIST,NODE)(HL,DE) ADDHEAD (LIST,NODE)(HL,DE) INSERT (TARGET NODE,NODE)(HL,DE) ENQUEUE (LIST,NODE)(HL,IY) -> HL=NODE PREDLST (NODE)(HL) -> HL(ZF) PREDECESSOR SUCCLST (NODE)(HL) -> HL(ZF) SUCCESSOR - Queues -(односвязные списки)--------- REMQU (ST.NODE,NODE)(HL,DE)->HL(ZF)TRUE? INSQU (LAST NODE,NODE)(HL,DE)-> SAME NEXTQU (QUEUE NODE)(HL)->HL(ZF)=NXT NODE Плохо, что сейчас времени совсем нет. За 2 часа, выделенные в день на "спектрумизм" много не накодишь ;( Dark-] //______ [-from //|rade




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Месть афродиты - О чем умалчивают исследователи древних мифов?
Реклама - Реклама и объявления.
Пятерка самых лучших - В этой рубрике я решил поместить 5 самых клевых игрушек для Спектрума, РС, и для эмуляторов различных игровых приставок.
Others - обзор компьютера Profi и ОС CP/M.
Beta Disk Interface - Сегодня я расскажу о нескольких доработках контроллера и дисководов.

В этот день...   8 мая