попались на глаза описание GARNIZON, про "ленивое" чтение
решил посмотрел на RKDOS 2.95
полез смотреть
в общем, вызывает уважение сколько авторы в него впихнули, да и код местами красив
собственно весь дос я не стал копать, посмотрел только чтение/запись
то что описывал GARNIZON, там сделать можно
но в самом досе этого всего нет и близко,
просто чтение/запись секторов
т.к. сектор таки да, сами процессим, все красивости описаные GARNIZON леко сделать,
но надо серьезно дос под это писать
и есть сомнение что на рк хватит скорости на эти умности.
дос тоже местами вызвает уважение
там есть каналы вода.вывода и реализованы bat файлы, круто
из забавного
используют OUT в порты, прикольно
вот пример
напоминаю что OUT F1 = STA F1F1Код:RAM:EE1D FDC_HOME: ; CODE XREF: RAM:E094p RAM:EE1D ; FDC_HOME+Cj ... RAM:EE1D DB F1 in a, (xF001_B_STAT) RAM:EE1F E6 20 and fdc_TRK00 RAM:EE21 CA 48 EE jp z, ret_IOERROR RAM:EE24 ; RAM:EE24 3E 03 ld a, ppi_1_|ppi_b1_StepIn RAM:EE26 CD 8A ED call doSTEP ; A- setC direction RAM:EE29 C3 1D EE jp FDC_HOME RAM:EE29 ; End of function FDC_HOME RAM:ED8A ; A- setC direction RAM:ED8A RAM:ED8A doSTEP: ; CODE XREF: stepOut+6j RAM:ED8A ; FDC_HOME+9p RAM:ED8A 21 03 F0 ld hl, FDC_PPI_RUS RAM:ED8D 77 ld (hl), a RAM:ED8E 36 08 ld (hl), ppi_0_|ppi_b4_Step RAM:ED90 3E 02 ld a, 2 RAM:ED92 RAM:ED92 loc_ED92: ; CODE XREF: doSTEP+9j RAM:ED92 3D dec a RAM:ED93 C2 92 ED jp nz, loc_ED92 RAM:ED96 36 09 ld (hl), ppi_1_|ppi_b4_Step RAM:ED98 RAM:ED98 loc_ED98: ; CODE XREF: doSTEP+Fj RAM:ED98 3D dec a RAM:ED99 C2 98 ED jp nz, loc_ED98 RAM:ED9C C9 ret
что при такой дишефрации портов как в РК = STA F001
по идее это ставит крест на запуск доса на Z80 (вроде тут пробегало??)
вот еще код, кусок чтения сектора
Код:RAM:EDC6 Find_Address_Label: ; CODE XREF: FindSector+36j RAM:EDC6 ; FindSector+40j RAM:EDC6 1B dec de RAM:EDC7 7A ld a, d RAM:EDC8 B3 or e RAM:EDC9 CA 47 EE jp z, pop_RET_IOERROR RAM:EDCC RAM:EDCC loc_EDCC: ; CODE XREF: FindSector+30j RAM:EDCC 34 inc (hl) RAM:EDCD F2 CC ED jp p, loc_EDCC ; pc7 - DataREADY RAM:EDD0 ; RAM:EDD0 0A ld a, (bc) ; DATA_LOCK F004 RAM:EDD1 D6 EA sub 0EAh ; 'ъ' RAM:EDD3 C2 C6 ED jp nz, Find_Address_Label RAM:EDD6 RAM:EDD6 loc_EDD6: ; CODE XREF: FindSector+3Aj RAM:EDD6 B6 or (hl) RAM:EDD7 F2 D6 ED jp p, loc_EDD6 RAM:EDDA ; RAM:EDDA 0A ld a, (bc) RAM:EDDB D6 D3 sub 0D3h ; 'L' RAM:EDDD C2 C6 ED jp nz, Find_Address_Label RAM:EDE0 RAM:EDE0 loc_EDE0: ; CODE XREF: FindSector+44j RAM:EDE0 B6 or (hl) RAM:EDE1 F2 E0 ED jp p, loc_EDE0 RAM:EDE4 ; RAM:EDE4 0A ld a, (bc) ; Track RAM:EDE5 5F ld e, a RAM:EDE6 RAM:EDE6 loc_EDE6: ; CODE XREF: FindSector+4Aj RAM:EDE6 34 inc (hl) RAM:EDE7 F2 E6 ED jp p, loc_EDE6 RAM:EDEA ; RAM:EDEA 0A ld a, (bc) ; Sector RAM:EDEB 57 ld d, a RAM:EDEC RAM:EDEC loc_EDEC: ; CODE XREF: FindSector+50j RAM:EDEC 34 inc (hl) RAM:EDED F2 EC ED jp p, loc_EDEC RAM:EDF0 ; RAM:EDF0 0A ld a, (bc) RAM:EDF1 93 sub e RAM:EDF2 92 sub d ; calc CRC RAM:EDF3 C2 47 EE jp nz, pop_RET_IOERROR
p.s. дальше копать - врядли буду, уже малоинтересно
.ida могу желающим отдать





Ответить с цитированием