org 0100h bdos equ 5 fcb equ 005ch ; Standardadr FCB dma equ 0080h ; Standardadr. DMA LF equ 10 ; LineFeed CR equ 13 ; CarriageReturn conout equ 2 ; CONSOLE OUTPUT strout equ 9 ; PRINT STRING sfirst equ 17 ; SEARCH FOR FIRST snext equ 18 ; SERACH FOR HEXT getus equ 32 ; SET/GET USER CODE ; start: ld (ostack),sp ; alter Stack ld sp,stktop ; neuer Stack xor a ld (fcb+32),a ld (anz),a ; Fileanz. auf Null ld hl,fcb+1 ; falls kein ld a," " ; Parameter, cp (hl) ; dann jr nz,weiter ld b,11 ; *.* wild: ld (hl),"?" ; als Name inc hl ; in FCB djnz wild ; eintragen weiter: ld e,255 ld c,getus call bdos ; USER holen ld (user),a ; und merken ld hl,puff ; Zieladr. File push hl ; merken ld c,sfirst ld de,fcb call bdos ; search first cp 0ffh ; schon letzter jr z,sort ; ja, sortieren jr copy ; sonst => next1: ld c,snext call bdos ; search next cp 0ffh ; letzter ? jr z,sort ; ja, sortieren ; ; Name aus FCB in Puffer ; eintragen und formatieren copy: rrca rrca rrca ; a=a*32 ld hl,dma ; Adr. DMA ld b,0 ld c,a ; bc=Offstet add hl,bc ; tats. Adr. ld a,(user) ; USER holen cp (hl) ; korrekt ? jr nz,next1 ; nein, neuer Eintrag inc hl ; USER-Nr. nicht kopieren ex de,hl ; de=quelle pop hl ld (hl),":" ; Trennz. zwischen Namen inc hl ; Zeiger erhoehen ld (hl)," " inc hl ld (hl)," " inc hl ld b,8 ; 8 Zeichen Name nam: ld a,(de) ; Zeichen aus FCB and 127 ld (hl),a ; in den Puffer inc hl inc de djnz nam ld (hl),"." ; Trennz. Name_Ext inc hl ld b,3 ; 3 Zeichen Extension ext: ld a,(de) ; Zeichen aus FCB sla a ; Attribut rl c ; nach c ld a,(de) ; nochmal holen and 127 ld (hl),a ; in den Puffer inc hl inc de djnz ext ld (hl)," " ; Default Attributkennz. ld a,c srl a jr z,noattr ; falls kein Attribut => neg ; Attributkennz. add a,"," ; berechnen ld (hl),a ; und in den Puffer noattr: inc hl ld (hl)," " inc hl ld (hl),"$" ; Kennz. Stringende inc hl push hl ld hl,anz inc (hl) jr next1 sort: pop hl ; Adr. letzter Eintr. ld (last),hl ; merken ld hl,anz ld a,(hl) ; Gesamtanz. holen or a ; a=0? jp z,nofile ; ja, => cp 1 ; a=1? jr z,print ; ja, gleich ausgeben ld c,a ; sonst sortieren ; ; SORT ; ld hl,puff-15 dec c nexte: ld a,l ; add a,18 ; ld l,a ; ld a,h ; adc a,0 ; ld h,a ; hl=hl+18 ld b,c ld d,h ; ld e,l ; de=hl nextb: ld a,e ; add a,18 ; ld e,a ; ld a,d ; adc a,0 ; ld d,a ; de=de+18 ; ; (DE)<(HL)? ; push bc push de push hl next2: ld a,(de) ; Zeichen holen res 7,a ld c,(hl) ; Zeichen holen res 7,c cp c ; vergleichen jr c,tausch ; c>a, tauschen jr nz,exit ; c