home *** CD-ROM | disk | FTP | other *** search
- .z80 ;
- public fcbbas ;
-
- fcb macro nr ; ein File-Control-Block
- db 0 ; Byte count (0-127)
- dw defdma ; Buffer
- db 0 ;
- fcb_&nr: ds 36 ; Platz f}r den FCB
- endm ;
-
- dseg ;
- fcbnr defl 1 ;
- fcbbas equ $ ;
- rept files ;
- fcb %fcbnr ;
- fcbnr defl fcbnr+1 ;
- endm ;
- db 255 ; letzter FCB
- cseg ;
-
- ;************************************************************************
- ;* *
- ;* Dateibefehle *
- ;* *
- ;************************************************************************
- ;* *
- ;* OPEN fcbnr,"dateiname" *
- ;* |ffnet Datei mit angeg. Namen *
- ;* OPEN fcbnr *
- ;* |ffnet Datei, HL zeigt auf Namen. *
- ;* returns NZ, wenn Fehler aufgetreten *
- ;* *
- ;************************************************************************
-
- open macro fcbnr,name ; \ffne Datei (name)
- local fname_addr,weiter
-
- ifnb <name> ;
- dseg ;
- fname_addr: db name,0 ;
- cseg ;
- endif ;
-
- ifnb <name> ;
- ld hl,fname_addr ;
- endif ;
- ld de,fcb_&fcbnr-1 ;
- call _setfcb## ;
- bdos open_file,fcb_&fcbnr
- cp 4 ;
- jr nc,weiter ;
- xor a ; Byte count
- ld (fcb_&fcbnr-4),a ; auf 0 setzen
- inc a ; File open
- ld (fcb_&fcbnr-1),a ;
- weiter: dec a ; jetzt Zero-Flag richtig
- endm ;
-
- ;************************************************************************
- ;* *
- ;* CREATE fcbnr,"filename" *
- ;* kreiert Datei mit angeg. Namen *
- ;* CREATE fcbnr *
- ;* kreiert Datei, HL zeigt auf Namen *
- ;* *
- ;************************************************************************
-
- create macro fcbnr,name ;
- local fname_addr,weiter
-
- ifnb <name> ;
- dseg ;
- fname_addr: db name,0 ;
- cseg ;
- endif ;
-
- ifnb <name> ;
- ld hl,fname_addr ;
- endif ;
- ld de,fcb_&fcbnr-1 ;
- call _setfcb## ;
- bdos delete_file,fcb_&fcbnr
- bdos make_file,fcb_&fcbnr
- cp 4 ;
- jr nc,weiter ;
- xor a ; Byte count
- ld (fcb_&fcbnr-4),a ; auf 0 setzen
- inc a ; File open
- ld (fcb_&fcbnr-1),a ;
- weiter: dec a ; jetzt Zero-Flag richtig
- endm ;
-
- ;************************************************************************
- ;* *
- ;* KILL fcbnr,"filename" *
- ;* l|scht Datei mit angeg. Namen *
- ;* KILL fcbnr *
- ;* l|scht Datei, HL zeigt auf Namen *
- ;* *
- ;************************************************************************
-
- kill macro fcbnr,name ;
- local fname_addr,weiter
-
- ifnb <name> ;
- dseg ;
- fname_addr: db name,0 ;
- cseg ;
- endif ;
-
- ifnb <name> ;
- ld hl,fname_addr ;
- endif ;
- ld de,fcb_&fcbnr-1 ;
- call _setfcb## ;
- bdos delete_file,fcb_&fcbnr
- cp 4 ;
- jr nc,weiter ;
- xor a ;
- weiter: or a ; jetzt Zero-Flag richtig
- endm ;
-
- ;************************************************************************
- ;* *
- ;* CLOSE fcbnr *
- ;* schlie~t Datei fcbnr, falls offen *
- ;* CLOSE *
- ;* schlie~t alle Dateien *
- ;* *
- ;************************************************************************
-
- close macro fcbnr ; schlie~e Datei oder alle
- local weiter ;
- ifnb <fcbnr> ;
- ld de,fcb_&fcbnr-1 ;
- call _close## ;
- else ;
- call _clsal## ;
- endif ;
- endm ;
-
- ;************************************************************************
- ;* *
- ;* READ fcbnr *
- ;* liest sequentiell einen *
- ;* Record ein. *
- ;* *
- ;************************************************************************
-
- read macro fcbnr ;
- ld de,fcb_&fcbnr-1 ; pointet auf Statusbyte
- call _seqrd## ;
- endm ;
-
- ;************************************************************************
- ;* *
- ;* WRITE fcbnr *
- ;* schreibt sequentiell einen *
- ;* Record auf Disk *
- ;* *
- ;************************************************************************
-
- write macro fcbnr ;
- ld de,fcb_&fcbnr-1 ; pointet auf Statusbyte
- call _seqwr## ;
- endm ;
-
- ;************************************************************************
- ;* *
- ;* READC fcbnr *
- ;* liest sequentiell ein *
- ;* Zeichen ein (wird im Akku }bergeben). *
- ;* *
- ;************************************************************************
-
- readc macro fcbnr ;
- ld de,fcb_&fcbnr-1 ; pointet auf Statusbyte
- call _chrrd## ;
- endm ;
-
- ;************************************************************************
- ;* *
- ;* WRITEC fcbnr *
- ;* schreibt sequentiell ein *
- ;* Zeichen (C) auf Disk *
- ;* *
- ;************************************************************************
-
- writec macro fcbnr ;
- ld de,fcb_&fcbnr-1 ; pointet auf Statusbyte
- call _chrwr## ;
- endm ;
-
- ;************************************************************************
- ;* *
- ;* DMA fcbnr,dmaaddress *
- ;* setzt DMA-Adresse f}r fcbnr auf *
- ;* angegebenen Wert, wenn dmaaddress nicht angegeben, *
- ;* wird sie um 80h erh|ht *
- ;* *
- ;************************************************************************
-
- dma macro fcbnr,dmaad ;
- ifnb <dmaad> ;
- ld hl,dmaad ;
- ld (fcb_&fcbnr-3),hl;
- else ;
- ld hl,(fcb_&fcbnr-3);
- ld de,80h ;
- add hl,de ;
- ld (fcb_&fcbnr-3),hl;
- endif ;
- endm ;
-
- ;************************************************************************
- ;* *
- ;* RNDREAD fcbnr,recordnr *
- ;* liest einen Randomrecord ein *
- ;* wenn recordnr nicht angegeben, *
- ;* wird Record HL gelesen *
- ;* *
- ;************************************************************************
-
- rndread macro fcbnr,recnr ;
- ifnb <recnr> ;
- ld hl,recnr ;
- endif ;
- ld de,fcb_&fcbnr-1 ;
- call _rndrd## ;
- endm ;
-
- ;************************************************************************
- ;* *
- ;* RNDWRITE fcbnr,recordnr *
- ;* schreibt einen Randomrecord *
- ;* wenn recordnr nicht angegeben, *
- ;* wird Record HL geschrieben *
- ;* *
- ;************************************************************************
-
- rndwrite macro fcbnr,recnr ;
- ifnb <recnr> ;
- ld hl,recnr ;
- endif ;
- ld de,fcb_&fcbnr-1 ;
- call _rndwr## ;
- endm ;