;*************************************** ;ORG #2000,$ ;------- DEFREQ EQU %00000010 SYC EQU #20AF PW1 EQU #11AF PW2 EQU #12AF PW3 EQU #13AF ;-------REG----------------------- PG0 EQU #F7 ;-------VAR BUFZZ EQU #8000 PWA EQU BUFZZ+#4000 ;0xC000 - STACK ;-------#8000-#2000--------------------- GENBU EQU BUFZZ+#0000 GENBE EQU BUFZZ+#1000 SECBU EQU GENBE SECBE EQU SECBU+512 LOBU EQU SECBE LOBE EQU LOBU+512 LoCALL EQU LOBE+512 INTC EQU BUFZZ+#1F00-1 VALS EQU BUFZZ+#2000 ;-------- > #A000 ---------------------- STST EQU VALS; Stream Status (0-notR) NSDC EQU STST+1;\ Sec num in Cluster EOC EQU NSDC+1;/ Flag (EndOfChain) ABT EQU EOC+1 BZN EQU ABT+1;Blocks NR0 EQU BZN+1 CAHL EQU NR0+2 CADE EQU CAHL+2 LSTSE EQU CADE+2 REZDE EQU LSTSE+4 PR EQU REZDE+2 CLHL EQU PR+4 CLDE EQU CLHL+2 LLHL EQU CLDE+2 LTHL EQU LLHL+4;LAST LTDE EQU LTHL+2 ;------------Entry Pattern:------------- ENTRY EQU LTDE+2;DS 11 EFLG EQU ENTRY+11 CLSDE EQU ENTRY+20 CLSHL EQU ENTRY+26 SIZIK EQU ENTRY+28 ;--------------------------------------- ;------------FAT PARAMETERS:------------ BREZS EQU ENTRY+33; [+14(2)] FSINF EQU BREZS+2; [+48(2)]+[ADDTOP] BFATS EQU FSINF+4 BFTSZ EQU BFATS+1 BSECPC EQU BFTSZ+4 BROOTC EQU BSECPC+2 FSTFRC EQU BROOTC+4 ADDTOP EQU FSTFRC+4 SFAT EQU ADDTOP+4 SDFAT EQU SFAT+2 CUHL EQU SDFAT+4 CUDE EQU CUHL+2 NXDE EQU CUDE+2 NXHL EQU NXDE+2 LDHL EQU NXHL+2;ADDRESS COPY COUNT EQU LDHL+2 DUHL EQU COUNT+1 DUDE EQU DUHL+2 DUBA EQU DUDE+2 UUHL EQU DUBA+1 BUHL EQU UUHL+2 CLCNT EQU BUHL+2; COUNTER USED in MKSG FCTS EQU CLCNT+4; FirstClusTS BUTS EQU FCTS+4; BUferTS LSTCAT EQU BUTS+4; Active DIR RECCAT EQU LSTCAT+4;RECYCLED BIN DIR ;------- BLKNUM EQU RECCAT+4 DRVRE EQU BLKNUM+4 STRMED EQU DRVRE+1 ;--------------------------------------- INCLUDE "tsfat/STREAM.ASM" ;---------------------------------------------------------------------------- ;============================================================================ GENTRYX ;i:HL - Text String ; o:ENTRY(11) 8NAME + '.' + 3EXT LD DE,ENTRY ;ENTRY = LTDE+2;DS 11 до этого загрузил LD B,8:CALL DOTZ, RYX CALL Z, NOPIDE LD A,(HL):CP ".":JR NZ,$+3:INC HL LD B,3:CALL RYX,Z,NOPIDE RET ;=================== (HL), (DE) ====================== ; Ищу RYX LD A,(HL):OR A:RET Z ; если '0' - возврат CP ".":INC HL:RET Z ; если '.' то HL+ и возврат LD (DE),A:INC DE:DJNZ RYX ; (DE) если не '0' то повтор LD A,1:OR A ; A <-1 RET ;====================================================== DOTZ LD A,(HL):CP ".":RET NZ ; ищу разделитель, если не ".",то возврат LD (DE),A:INC HL,DE:DEC B ; LD A,(HL):CP ".":RET NZ LD (DE),A:INC HL,DE:DEC B RET ;--------------------------------------- ;GIVE Active DIR: GLSTCAT ;i:HL(4) - CLUS num LD DE,LSTCAT,BC,4:LDIR RET ;--------------------------------------- ;LOAD DATA to FAT32 (STREAM): ;i DE - ADDR in WIN ; BC - PAGE LOAD512 LD (PGO),BC : EX DE,HL ; PG0-BC SAVE PAGE; HL<-DE LD A,H:AND #3F:LD H,A ; HL - ADDR in Win CALL LOAD ; (LDMD)<-1, LD BC,(PGO):EX DE,HL ; DE -ADDRESS RET ; A -EOC ;------- ;Load512 LD A,1,(LDMD),A:JP LOAD ; (LDMD)<-1 :READ ;----------------------------------------------------- ;READ DATA from FAT32 (STREAM): LOAD ;i:HL - Address + (PGO) ; B - lenght (512b blocks/sectors) ; CUHL(4) - CLUSnum (if EOC+NSDC=0) ; o:HL - New value + (PGO) ; A - EndOfChain XOR A:LD (ABT),A ; (ABT) <- 0x0 CALL LPREX:JR NZ,RH ; if Z - READ Sector LD A,B:CALL NEWCLA ; DEHL - new Claster POS ? RH LD HL,(LDHL) ; -ADDRESS LD A,(EOC) ; -EOC RET ;Positioning to Cluster, if needed: ======================================== ;i: HL - MEM Address LPREX LD (LDHL),HL LD A,(EOC):OR A:RET NZ ;if EOC=1, end of file RETURN no READ LD A,(NSDC):OR A:JR NZ,RX ;if NSDC > 0 - НЕ ПЕРВЫЙ СЕКТОР В КЛАСТЕРЕ ; Первый сектор в кластере, надо позиционировать PUSH BC:LD HL,CUHL:CALL GIPAG ;NSDC =0; CALL XSPOZ ; CALL XPOZI READ POP BC RET ;--> RX XOR A RET ;--> ;=======NEW CLASTER ======================================================== ;i: A-Lenght NEWCLA LD (BZN),A ; (BZN) <- A ; PROZ: SET Sector position NXTC ;i: DEHL - new sector position LD HL,(LTHL),DE,(LTDE):CALL PROZ ;LD (BLKNUM),HL,(BLKNUM+2),DE LD HL,BZN ; LD A,(BSECPC),BC,(NSDC); (BSECPC)-fix (NSDC) SUB C : LD B,A ;B = SectorinClaster - CurrSectNuminCluster LD A,(HL):OR A:RET Z ;Lenght=0? => RETURN ;==========================================EXIT =================>>> SUB B:JR NC,KN ;Lenght - (SecinClast - CurrSectNuminCluster) ;Если считать могу больше чем (требуется) Lenght, то Lenght=0, ADD A,B:LD B,A:XOR A ;Если не могу считать все в пределах одного Кластера, то KN ;B-Number of sectors for READ LD (HL),A ; сохраняю остаток в (BZN), за раз выбираю все что можно LD A,B,(NR0),A ; A<-B Number of sectors for READ (NR0) LD HL,(LDHL);HL-Dest MEMORY, A-Nof Sector CALL RDDXX ;READ Sector(s) =========== !!!!!!!!!!! ;----------- After READING SECTORs LD (LDHL),HL;updating MEM Address (LDHL)<-HL+512*NofSector LD HL,LTHL,DE,LLHL,BC,4 ;(LLHL)<-(LTHL) LDIR ; (DE)<-(HL); HL++, DE++, 4 times ;--(LTDE)(LTHL) + (NR0) -- приращиваю счетчик байт? LD HL,(LTHL),DE,(LTDE) LD BC,(NR0) ADD HL,BC ; (LTHL)+(NR0)Nof Readed Sector JR NC,$+3 ; INC DE ; if C, then DE++ LD (LTHL),HL,(LTDE),DE ;(LTDE)(LTHL) - счетчик байт ;---------------------------------------------------- ;--(NSDC) + (NR0)Nof Readed Sector LD HL,NSDC,A,C:ADD A,(HL) LD (HL),A ; в (NSDC) количесвто прочитанных секторов в кластере ;----------------------------------------------------- ; Сравниваю количесвто прочитанных, с максимально возможным LD BC,(BSECPC); Sector per Claster CP C:JP C,NXTC; End OF Cluster? NO ;== LOOP==> NXTC ; YES! LD HL,(CUHL),DE,(CUDE) CALL CURIT ; READ SECTOR FROM FAT CALL GIPAG ; SET NEW POSITION JP Z,NXTC ;== LOOP==> NXTC RET ;================================================================== ;RDDXX EQU RDDSE ; ;================================================================== ;------Read Sector from FAT:------------ CURIT ;i:[DE,HL]-Cluster number ; o:SECBU(512) ; HL-poz in SECBU where Cluster CALL DEL128 SLA C:RL B SLA C:RL B PUSH BC LD (LSTSE+2),DE,(LSTSE),HL LD BC,(BFTSZ+2) LD A,D:CP B:JR C,JK LD A,E:CP C:JR C,JK LD BC,(BFTSZ) LD A,H:CP B:JR C,JK LD A,L:CP C:JR NC,FATEND JK LD BC,(SFAT) CALL ADD4B CALL XSPOZ CALL XPOZI LD HL,SECBU,A,1:CALL RDDSE POP BC LD HL,SECBU:ADD HL,BC XOR A RET ;------- FATEND POP BC SCF RET ;=======Pos. to First Sector of Cluster:========================================================== GIPAG ;i:HL(4) - Cluster number CALL TOS ;(NSDC) <-0; (EOC)<-0 LD E,(HL):INC HL ;E<-(HL+0) LD D,(HL):INC HL ;D<-(HL+1) LD A,(HL):INC HL ;L<-(HL+2) LD H,(HL),L,A ;H<-(HL+3) OR H,E,D:JR Z,RDIR LD A,H:AND #0F:CP #0F:JR Z,MDC EX DE,HL POM LD (CUHL),HL,(CUDE),DE LD BC,2:OR A:SBC HL,BC:JR NC,$+3:DEC DE LD A,(BSECPC):CALL UMNOX2 ; [DE,HL] x (BSECPC -Secotr per Cluster ) = NUmber of Sector LD BC,(SDFAT):CALL ADD4B ; [2FAT+зарезервированные сетора] + Sector Number -ABSOLUTE ADDR EX DE,HL ; LD BC,(SDFAT+2):ADD HL,BC ; EX DE,HL CALL XSPOZ ; Устанавливаем абсолютный адрес в секторах CALL XPOZI XOR A RET ;-------------------------------------- RDIR LD HL,(BROOTC),DE,(BROOTC+2) JR POM MDC LD (EOC),A OR A RET ;---Getting Absolute Position of SEC:--- XSPOZ LD BC,(ADDTOP),(CLHL),BC LD BC,(ADDTOP+2),(CLDE),BC JP ADD4BF ;========================================================================ENTRY======== ;-----Searching ENTRY in Active DIR:---- ;BY NAME: SRHDRN ;i:LSTCAT(4) - Active DIR ; HL - Buffer with Name ; [flag(1)+name(1-12)+#00] ; o: Z: NOT FOUNT ; NZ: ENTRY(32) ; [DE,HL] - Cluster Number ; BC - Address in LOBU ;--------Переписываем имя файла в область ENTRY-------------------------------- LD A,(HL):INC HL ; загружаю первый символ с буфера <-A это флаг LD (ENTRY+11),A:CALL GENTRYX ; TSFAT.ASM ENTRY=LTDE+2;DS 11 // <-A ;------------------------------------------------------ LD HL,LSTCAT ;LSTCAT Active DIR LD DE,CUHL,BC,4:LDIR ;(CUHL)4Byte <- (LSTCAT)4Byte CALL TOS ;Clear (NSDC) <-0; (EOC)<-0 HDR LD A,(EOC):CP #0F:RET Z LD HL,LOBU,B,1 ;-Load512-------------------- CALL LOAD ; (LDMD)<-1 :READ ;------------------------------------------ LD (HL),0 LD HL,LOBU-32:CALL VEGA:RET NZ JR HDR ;------- VEGA LD BC,32:ADD HL,BC ; LOBU -Таблица FAT32 LD A,(HL):OR A:RET Z ; HL = LOBU ,если первый символ 0x0 -то выход => CALL CHEB:JR NZ,VEGA LD A,1:OR A RET ;-------сравение 11 байт ENTRY c (HL)---- CHEB PUSH HL LD DE,ENTRY,B,11:CALL CHEE,Z,CHF POP HL:RET NZ PUSH HL:LD DE,ENTRY,BC,32:LDIR POP BC LD HL,(CLSHL) LD DE,(CLSDE) XOR A RET ;------- CHF LD A,(DE),C,A LD A,(HL):AND #10:CP C RET ;-------сравение n байт (DE) c (HL)---- CHEE LD A,(DE):CP (HL):RET NZ INC HL,DE DJNZ CHEE ; IF OK 11 times ---- RET ;--------------------------------------- ;CHAIN->SECTORS: CHTOSE ;i:HL(4) - First Cluster number ; DE - BUFFER Address ; BC - End Of BUFFER LD (DABC),BC LD (DADE),DE ;- Buffer Address CKAGO LD (DAHL),HL CALL GIPP:RET Z CALL CLUSSEC LD DE,(DABC) OR A:SBC HL,DE:RET NC LD HL,(DAHL) LD E,(HL):INC HL LD D,(HL):INC HL LD A,(HL):INC HL LD H,(HL),L,A:EX DE,HL CALL CURIT JR CKAGO ;------- CLUSSEC ;i: (DADE) - Buffer Address ; (BSECPC) - Sectors per CLUS ; [DE,HL] - Sector number ; ; o: (DADE) - New Value LD BC,HL LD A,(BSECPC) ;-Sector per Claster LD HL,(DADE) USS LD (HL),C:INC HL ;(DADE+0)<-L LD (HL),B:INC HL ;(DADE+1)<-H LD (HL),E:INC HL ;(DADE+2)<-E LD (HL),D:INC HL ;(DADE+3)<-D LD (DADE),HL:DEC A:RET Z INC BC EXA:LD A,B:OR C:JR NZ,$+3:INC DE EXA JR USS ;------- GIPP ;i: HL(4) - Cluster number ; o:[DE,HL] - Sector number ; Z - EndOfChain LD E,(HL):INC HL LD D,(HL):INC HL LD A,(HL):INC HL LD H,(HL),L,A:OR H,E,D:RET Z LD A,H:CP #0F:RET Z EX DE,HL LD BC,2:OR A:SBC HL,BC:JR NC,$+3:DEC DE LD A,(BSECPC):CALL UMNOX2 LD BC,(SDFAT):CALL ADD4B EX DE,HL LD BC,(SDFAT+2):ADD HL,BC EX DE,HL CALL XSPOZ LD A,1:OR A RET ;==================================================================HDD ;SEARCH PARTITION: HDD ;i:none ; o:NZ - FAT32 not found ; Z - all FAT32 vars are ; initialized ;========UART=================== ;LD A, 0x11 ;CALL COM_TX ;=============================== LD HL,0,DE,HL LD (CUHL),HL,(CUDE),HL LD (DAHL),HL,(DADE),HL LD (DUHL),HL,(DUDE),HL CALL XPOZI LD HL,LOBU,A,1:CALL RDDSE ;LOBU - Start Dest Adress LD A,3,(COUNT),A,(ZES),A ;LOBU+446 - Patition Table ================================= LD HL,LOBU+446+4,DE,16,B,4 ;446+4 - Код типа раздела ;========UART=================== ;LD A, H : CALL COM_TX ;0x93 ;LD A, L : CALL COM_TX ;0xC2 ;=============================================== KKO LD A,(HL) ; A <- (446+4) 0x93C2 ;CALL COM_TX ; DEBUG CP #05:JR Z,OKK ; 0x05 - Extended MS-DOS Partition CP #0B:JR Z,OKK ; 0x0B - 32-bit FAT (Partition Up to2048GB) //2GB SD CP #0C:JR Z,OKK ; 0x0C - Same as 0BH, but uses LBA1 13h Extensions CP #0F:JR Z,OKK ; 0x0F - Same as 05H, but uses LBA1 13h Extensions ADD HL,DE DJNZ KKO ;======== IF NOT FOUND -> FAILED ======================================================== FHDD LD A,(ZES):OR A:JP Z,Nhdd ;A<-3(ZES) //ZES EQU LOBE+512+10; // LOBE EQU LOBU+512 LD DE,(DADE),HL,(DAHL) CALL XPOZI LD HL,LOBU:LD A,1:CALL RDDSE LD HL,COUNT:DEC (HL):JP Z,NHDD LD HL,LOBU+446+16,B,16 XOR A:OR (HL):INC HL:DJNZ $-2 JP NZ,NHDD LD HL,(LOBU+446+16+8) LD DE,(LOBU+446+16+8+2) LD (CLHL),HL,(CLDE),DE LD HL,(DAHL),DE,(DADE) CALL ADD4BF LD (DADE),DE,(DAHL),HL CALL XPOZI LD HL,LOBU,A,1:CALL RDDSE LD HL,(LOBU+446+8) LD DE,(LOBU+446+8+2) CALL ADD4BF JR LDBPB ;======= Если код типа раздела 05/0B/0C/0F, то читаем Заголовок файловой системы FAT ====== OKK INC HL,HL,HL,HL ;HL+4 // HL(код типа раздела)+4 = Смещение первого сектора (4byte) LD E,(HL):INC HL ; ED; LD D,(HL):INC HL ; LD A,(HL):INC HL ; LD H,(HL),L,A ; LH; EX DE,HL ; LH;ED - Смещение первого сектора (4byte) ;====== Читаем BIOS Parameter Block // Заголовок файловой системы FAT ================= ;LOAD BIOS Parameter Block LDBPB LD (ADDTOP),HL,(ADDTOP+2),DE ; CALL XPOZI ; XPOZI: LD (LTHL),HL,(LTDE),DE // LD (BLKNUM),HL,(BLKNUM+2),DE LD HL,LOBU;LOAD BPB SECTOR LD A,1:CALL RDDSE; Читаем BIOS Parameter Block ;RDDSE ============READ SECTOR ============= ;i ; HL - destination ADDR ; A - Nof Sector for Read ; (BLKNUM), (BLKNUM+2) - Sector Adress ;=========================================================================== ;LD HL,LOBU+3,B,6,A,#1D ;FIVE CP (HL):INC HL:JP NC,FHDD ;DJNZ FIVE LD HL,(LOBU+11) ;Количество байт в секторе (всегда 512) LD A,H:DEC A,A:OR L:JP NZ,FHDD ;если не 512 то -> go FHDD == FAILED LD A,(LOBU+13):OR A:JP Z,FHDD ;Секторов на кластер всегда кратно степени двух LD A,(LOBU+14):OR A:JP Z,FHDD ;Количество зарезервированных секторов перед первой FAT LD A,(LOBU+16):OR A:JP Z,FHDD ;Количество таблиц FAT (всегда 2) LD HL,(LOBU+17),A,H:OR L ;Количество элементов в корневом каталоге (максимальный предел) ;LD HL,(LOBU+19):OR H,L LD HL,(LOBU+22):OR H,L ;Количество секторов на элемент таблицы FAT JP NZ,FHDD LD HL,(LOBU+36):OR H,L LD HL,(LOBU+36+2):OR H,L JP Z,FHDD ;LD HL,ADDTOP,DE,DUHL,BC,4:LDIR ;LD HL,DNU,A,(HL):DEC (HL) ;OR A:JP NZ,FHDD ;LD (HL),0 ;=======Заполняем поля ==================================================================================== LD A,(LOBU+13),(BSECPC),A ;(BSECPC)1byte <-Секторов на кластер всегда кратно степени двух LD B,8:SRL A:JR C,NER:DJNZ $-4:LD A,1 NER OR A:JP NZ,FHDD LD HL,(LOBU+14),(BREZS),HL ;(BREZS) 2byte <-Количество зарезервированных секторов перед первой FAT LD HL,(LOBU+48),DE,0 ; CALL XSPOZ LD (FSINF),HL,(FSINF+2),DE LD A,(LOBU+16),(BFATS),A ;(BFATS) 1Byte <-Количество таблиц FAT (всегда 2) LD HL,(LOBU+36),(BFTSZ),HL ;(BFTSZ) 4Byte <-Number of Sectors Per FAT LD HL,(LOBU+36+2),(BFTSZ+2),HL ; LD HL,(LOBU+44),(BROOTC),HL ;(BROOTC)4Byte <-Cluster Number of the Startof the Root Directory LD HL,(LOBU+44+2),(BROOTC+2),HL ; LD HL,(BFTSZ),DE,(BFTSZ+2) ;Number of Sectors Per FAT * 2 = 2 Таблицы LD BC,(BFATS),B,0 CALL UMN4B ;[DE,HL]*BC - умножение 4Byte на 2Byte PUSH HL,DE ;В стек LD HL,(BREZS) ;(SFAT) <- LD (SFAT),HL ;(SFAT) <- (BREZS) зарезервированные сектора POP DE,BC ; DE,HL + (BREZS) = 2 Таблицы + зарезервированные сетора CALL ADD4B ; LD (SDFAT),HL,(SDFAT+2),DE ; (SDFAT) <- 2 Таблицы + зарезервированные сетора LD HL,0 LD (CUHL),HL LD (CUDE),HL LD (LSTCAT),HL LD (LSTCAT+2),HL ;LD HL,(FSINF),DE,(FSINF+2) ;CALL XPOZI ;LD HL,LOBU ;LD A,1:CALL RDDSE ;LD HL,LOBU+492,DE,FSTFRC ;LD BC,4:LDIR LD HL,FSTFRC,B,4 ;NOPING ----------------------- XOR A:LD (HL),A:INC HL:DJNZ $-2 ;------------------------------ CALL TOS XOR A RET ;============NHDD======================== NHDD LD HL,(DUHL),DE,(DUDE) XOR A:LD (ZES),A JP LDBPB Nhdd LD A,1:OR A RET ;--------------------------------------- ;ARITHMETICS BLOCK: DEL128 ;i:[DE,HL]/128 ; o:[DE,HL] ; BC - Remainder LD A,L:EXA LD A,L,L,H,H,E,E,D,D,0 RLA RL L,H,E,D EXA AND 127 LD B,0,C,A RET ;------- DEL512 ;i:[DE,HL]/512 LD A,L,L,H,H,E,E,D,D,0 LD BC,1:OR A:CALL NZ,ADD4B LD A,2 ;------- DELITX2 ;i:[DE,HL]/A ; A - Power of Two ; o:[DE,HL] CP 2:RET C LD C,0 SRL A L33T SRL D:RR E,H,L,C SRL A:JR NC,L33T LD A,C:OR A:RET Z LD BC,1:CALL ADD4B RET ;------- UMNOX2 ;i:[DE,HL]*A ; A - Power of Two ; o:[DE,HL] CP 2:RET C SRL A L33t SLA L:RL H,E,D SRL A:JR NC,L33t RET ;------- ;UMNOG ;HL*BC=HL DEdest ;LD DE,HL ;LD A,B,B,C,C,A:INC C ;XOR A:DEC B:JR Z,ODN ;BSR ADD HL,DE ;DJNZ BSR ;ODN LD B,A ;DEC C ;JR NZ,BSR ;RET INC4b LD B,4 EkE INC (HL):RET NZ:INC HL:DJNZ EkE RET ADD4B ADD HL,BC:RET NC:INC DE RET ADD4BF ;i:[DE,HL]+[CLDE,CLHL] ; o:[DE,HL] EX DE,HL LD BC,(CLDE) ADD HL,BC EX DE,HL LD BC,(CLHL) ADD HL,BC:JR NC,KNH INC DE KNH LD (CLHL),HL LD (CLDE),DE RET ;==============UMN4B================= UMN4B ;i: ; [DE,HL]*BC ; o: ; [DE,HL] LD A,B,B,C,C,A:INC C OR A:JR NZ,TEKNO DEC B:JR Z,UMN1 INC B TEKNO XOR A CP B:JR NZ,TYS DEC C TYS DEC B PUSH HL,BC LD HL,DE CP B:JR Z,NEGRY EFRO ADD HL,DE DJNZ EFRO LD B,A NEGRY DEC C:JR NZ,EFRO LD (REZDE),HL POP BC,HL LD DE,HL CP B:JR Z,NEGRA OFER ADD HL,DE JR C,INCDE ENJO DJNZ OFER LD B,A NEGRA DEC C:JR NZ,OFER LD DE,(REZDE) UMN1 RET INCDE EXX LD HL,(REZDE) INC HL LD (REZDE),HL EXX JR ENJO ;=================TOS=================== ; (NSDC) <-0; (EOC)<-0 TOS XOR A:LD (NSDC),A,(EOC),A:RET ;=================XPOZI================= ;i ;DE HL - Cluster Number XPOZI LD (LTHL),HL,(LTDE),DE PROZ LD (BLKNUM),HL,(BLKNUM+2),DE RET ;======================================= ;NOPING XOR A:LD (HL),A:INC HL:DJNZ $-2 ; RET NOPIDE LD A,32,(DE),A:INC DE:DJNZ $-2 RET ;------------------------------------------------------------ INCLUDE "tsfat/DSDTS.ASM" ;INCLUDE "DSDTS_DMA.ASM" ;-----------LoCALL EQU LOBE+512 ---------------------------- LDMD EQU LoCALL;2 GARY EQU LDMD+2;2;see MKSG DABC EQU GARY+2;2;see CHTOSE DAHL EQU DABC+2;2;see HDD proc. DADE EQU DAHL+2;2; / ZES EQU DADE+2;1;/ PGO EQU ZES+1;2;Temp Page PGR EQU PGO+2;2;Restore Page CRRR EQU PGR+2;4 SPBU EQU CRRR+4;2 ;--------------------------------------- END