Deja Vu
#06
30 сентября 1998 |
|
CODING - Драйвер чтения/записи.
Драйвер чтения/записи --------------------- Технические характеристики: 1) Длина - 166 байт. 2) TURBO чтение/запись. 3) Дисководы A-D. 4) При ошибках - не виснет, в отличие от драйверов, использующих куски MAGIC в TR-DOS. 5) Не сбрасывает комп при включенном TURBO 6) Лучше всего работает на 5.03, 5.04 и подобных им. На 5.01 может (?) формат- нуть трек... 7) Вызывается аналогично #3D13, C=5/6. 8) Может работать и при разрешенных преры- ваниях (но медленно). 9) Упрощенная обработка ошибок: если биты 0-6 регистра #1F сброшены - считается, что ошибки нет. Иначе - повтор. А) Можно изменять количесво попыток чтения и записи. Если сектор все равно не чи- тается (не пишется),то определяется но- мер дорожки под головкой и происходит ПЕРЕПОЗИЦИОНИРОВАНИЕ (ну и слово...). B) Драйверу нужен буфер для чтения иденти- фикатора сектора (6 байтов). C) Толком не тестировался... ORG #6000 ENT ;Written by Max/CBX/BD ;XAS Assembler, 06.08.98. LD A,(#5D16) AND 3 LD (DRV+1),A; Номер драйва. LD HL,#4000 LD DE,#0000 LD BC,#1805 CALL DRIVER RET DRIVER DI LD IX,#3FE5 LD A,#80 BIT 0,C JR NZ,LD_MODE LD LX,#CA LD A,#A0 LD_MODE LD (CMD+1),A LD (PROC+2),IX MAIN LD A,#2C BIT 0,D JR NZ,DRV LD A,#3C DRV OR 0 LD C,#FF CALL REG LD A,D RRA LD C,#7F CALL REG LD A,#18 CALL CMD_RDY LD C,8; Кол-во попыток. ERR PUSH HL,BC XOR A LD (#5CD6),A OUT (#FE),A LD A,E INC A LD C,#5F CALL REG CMD LD A,#80 CALL COMM PROC LD IX,#3FE5 LD C,#7F CALL TODOS LD BC,CONT PUSH BC ONE LD BC,ONE PUSH BC LD B,#01 PUSH BC LD BC,#2099 PUSH BC JR DOS; Check #1F. CONT DI POP BC,HL LD A,(#5CD6) AND A JR Z,NOERR DEC C JR NZ,ERR OUT (#FE),A PUSH HL LD HL,TRK_BF LD A,#C0 CALL CMD_RDY POP HL LD A,(TRK_BF) LD C,#3F CALL REG JR MAIN NOERR INC H INC E BIT 4,E JR Z,CNT LD E,A INC D CNT DJNZ MAIN EI RET COMM LD C,#1F REG LD IX,#2A53 TODOS PUSH IX DOS JP #3D2F CMD_RDY CALL COMM LD C,#7F READY LD IX,#3FE5 JR TODOS TRK_BF EQU #8000 P.S. В прошлом номере была моя статейка на тему загрузки бейсика.Приведенная там про- цедура рассчитана на драйвер чтения, кото- рый после своей работы в HL выдает адрес байта, находящегося сразу после последнего загруженного сектора. Если кто будет использовать мою прогу, учтите это. * * * Знаете ли вы, что работа PLAYER'а в STP зависит от содержимого регистра A ? Поясняю: ORG+6 JP PLAY; Точка входа для PLAY. ....... PLAY DI LD (XXXX),SP LD D,0; * * * EXX LD BC,XXXX LD HL,XXXX DEC (HL) JP NZ,XXXX LD (HL),5; Темп музона. INC HL DEC (HL) JP P,XXXX LD HL,XXXX OR (HL); Проверка (HL) на ноль. JP Z,XXXX; Ветвление. ....... Примечание: XXXX обозначены несущественные для данного случая значения. Как видно из приведенного фрагмента, значение аккумулятора нигде не выставля- ется. Если в регистре A не ноль - проверка OR (HL) ни в жисть не сработает... На что сей глюк (?) влияет - неизвест- но, но на слух, кажется, различий нет. Тем не менее, можно исправить (зачем ?) PLAYER, заменив помеченную '* * *' коман- ду LD D,0 на две: XOR A: LD D,A.
Другие статьи номера:
Похожие статьи:
В этот день... 13 декабря