;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; DEFINICNI SOUBOR PRO PROLOG-80 ;;;;; ;;;;;;;;; verze pro CP/M Plus 3.1 ;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .XLIST .Z80 ; MA-LI NEKDO STARY M80 version equ 4 REVISION EQU 0 EXT $PRINT,$WINK ; CPMIO EXT $TSTBREAK,$INKEY ; DEFINICE POTREBNE PRO CP/M BDOS EQU 5 REBOOT EQU 0 GLINEF EQU 10 OPENF EQU 15 MAKEF EQU 22 DELETEF EQU 19 CLSEF EQU 16 READF EQU 20 WRITEF EQU 21 SETDMAF EQU 26 CONINF EQU 1 CONDIRF EQU 6 CONOUTF EQU 2 CONSTF EQU 11 RREADF EQU 33 RSDISK EQU 13 ; DEFINICE POTREBNE PRO I/O PROLOGU FSLENGTH EQU 172 ; POCET BYTU NA CELOU STRUKTURU BUFLENGTH EQU 128 ; DELKA BLOKU SOUBORU NAMEL EQU 8 ; DELKA JMENA SOUBORU EXTL EQU 3 ; DELKA EXTENZE SOUBORU IOPACKL EQU 166 ; DELKA FCB+BUF+ZAVISLE INFO LLENGTH EQU 128 ; DELKA VSTUPNI RADKY TAB0 EQU 5 ; KDE ZACIT CIL V LISTING BSTEP EQU 80 ; PO KOLIKA PRIDAVAT V EDITORU HSTEP EQU 8 ; PO KOLIKA CUKAT <-> VSTEP EQU 8 ; PO KOLIKA CUKAT VERT. ; OFFSETY APTOAR EQU -42 ; OD AKTUALNIHO POINTERU NA ATOMREP ARTOLNK EQU 4 ; OD ATOMREP NA NEXT-LINK APTOLNK EQU -38 ; OD AKTUALNIHO POINTERU NA LINK APTOFCB EQU -36 ; OD AKTUALNIHO POINTERU NA FCB ?PBLBYT EQU 1 ; CHCEME RUTINU BLOKOVANI VYSTUPU ?GOING EQU 0 ; NECHCEME UKLADAT TR. INFO. NOCR EQU 0 ; NECHCEME POTLACOVAT CR NOLF EQU 0 ; NECHCEME POTLACOVAT LF EDITOR EQU 1 ; CHCEME LIBOVICKYHO EDITOR Z80 EQU 1 ; mame Z80 ERROR MACRO KOD CALL XXERROR DB KOD ENDM GETMEMTOP MACRO LD HL,(BDOS+1) LD DE,-6 ADD HL,DE ENDM INITIO MACRO LD DE,ERRFCB## LD C,OPENF CALL BDOS ; OTEVRI SOUBOR S CHYB. HLASENIM INC A BR NZ,OKERRFIL LD A,1 LD (ERRFCB##),A LD DE,ERRFCB## LD C,OPENF CALL BDOS OKERRFIL: CALL $INIIO## ENDM BYEBYE MACRO RST REBOOT ENDM ?INTERRUPT MACRO CALL $TSTBREAK CALL C,INTERRUPT ENDM DISPCHAR MACRO PUSH AF CP .CR JP NZ,NOCRLF CALL $PRINT LD A,.LF NOCRLF: CALL $PRINT POP AF RET ENDM PUTACRT MACRO CALL $PRINT ENDM READCHAR MACRO JP $WINK ENDM GET1BYT MACRO LD DE,CPMRSEC CALL GBLBYT ENDM PUT1BYT MACRO LD DE,CPMWSEC CALL PBLBYT ENDM OPEN MACRO PUSH DE LD C,OPENF CALL BDOS INC A POP DE ; FCB BR NZ,OPOK LD A,1 LD (DE),A LD C,OPENF CALL BDOS INC A JP Z,NOFILE OPOK: ENDM CREATE MACRO PUSH DE LD HL,-APTOFCB ADD HL,DE LD (HL),BUFLENGTH+1 LD C,DELETEF CALL BDOS POP DE LD C,MAKEF CALL BDOS INC A JP Z,DIRFULL ENDM CLOSE MACRO EX DE,HL ; AP DO DE LD A,(WASSEE) ; ZAVIRAME VSTUPNI SOUBOR? OR A BR NZ,CLOSIN ; ANO - TO JE O.K. PUSH DE ; BUDE POTREBA EX DE,HL ; AP DO HL LD A,1AH ; CP/M EOF LD DE,CPMWSEC CALL PBLBYT POP DE CALL CPMWSEC CLOSIN: LD HL,APTOFCB ADD HL,DE EX DE,HL LD C,CLSEF CALL BDOS INC A JP Z,CLSERR ENDM FILLFCB MACRO XFILLFCB:: POP DE ; ADRESA FCB INC DE INC DE ; PRES LINK NA FCB PUSH DE ; ADRESA FCB ULOZENA PRO DALSI INC HL ; HL NA TEXT ATOMU LD A,B ; DELKA ATOMU CP 4 ; ASPON 3 ZNAKY BR C,NODRIVE ; NELZE B:XXX LD C,(HL) ; 1. ZNAK MUZE BYT DRIVE INC HL ; NA 2. ZNAK LD A,(HL) ; 2. ZNAK DEC HL ; VRAT HL NA 1. ZNAK CP ':' ; JE TAM TEDY DRIVE? BR NZ,NODRIVE LD A,C ; CISLO DRIVU AND 0DFH ; PROSIM VELKE PISMENO SUB 'A'-1 ; 'A'->1, 'B'->2, ... LD (DE),A ; ULOZ CISLO DRIVU, JINAK CURRENT INC HL INC HL ; UBRALI JSME 2 ZNAKY DEC B DEC B NODRIVE: LD C,NAMEL ; DELKA JMENA SOUBORU CALL MOVEFCB ; ULOZ TAM JMENO LD A,B CP 1 ; VYCERPALI JSME JMENO ? BR Z,EXTPLG ; ANO - DEJ EXTENZI .PLG LD A,(HL) OR A ; DALSI ZNAK FALESNY ? BR Z,EXTPLG ; ANO CP '.' ; MA-LI BYT EXTENZE, MUSI BYT TED '.' JP NZ,BADFNAME LD C,EXTL INC HL DEC B ; PRESKOC '.' CALL MOVEFCB ; ZAPIS TEDY EXTENZI LD A,(HL) OR A BR Z,FCBREADY DEC B ; SKONCIL TEDY PRESNE? JP NZ,BADFNAME ; NE - SPATNE JMENO BRA FCBREADY EXTPLG: EX DE,HL ; ADRESU V FCB DO HL INC HL LD (HL),'P' INC HL LD (HL),'L' INC HL LD (HL),'G' FCBREADY: POP DE ; VYBER JEHO ADRESU ENDM FCBRELOC MACRO JP IORELNEXT ; NIC SE NEDELA ENDM MASKCH MACRO ENDM DEMASKCH MACRO ENDM DSPERROR MACRO PUSH BC LD A,C ADD A,A ; DELKA HLASKY 256 BYTU LD HL,ERRNR LD (HL),A PUSH HL LD DE,ERRBUF LD C,SETDMAF CALL BDOS LD C,RREADF LD DE,ERRFCB CALL BDOS OR A JP NZ,ERRERR LD DE,ERRBUF+BUFLENGTH LD C,SETDMAF CALL BDOS POP HL INC (HL) ; DRUHY SEKTOR HLASKY LD C,RREADF LD DE,ERRFCB CALL BDOS OR A JP NZ,ERRERR LD HL,ERRBUF ERRLOP: LD A,(HL) OR A BR Z,ERRLE CALL DISPA INC HL BRA ERRLOP ERRLE: LD A,.CR CALL DISPA POP BC XOR A LD (ERRNR),A ENDM EDITLINE MACRO INC DE PUSH DE INC DE EX DE,HL CALL @EDIT## ; RADKOVY EDITOR POP HL LD (HL),0 DEC HL INC B LD (HL),B EX DE,HL RET ENDM ;;;; RUTINY VOLANE PREDCHOZIMI MAKRY DEPENDENT MACRO CPMRSEC: LD C,READF CALL CPMRW ; PRO IN I OUT JP NZ,EOFERR RET CPMWSEC: LD C,WRITEF CALL CPMRW BR NZ,DISKFULL RET CPMRW: EX DE,HL LD (HL),BUFLENGTH PUSH HL PUSH HL PUSH BC INC HL LD (HL),0 INC HL EX DE,HL LD C,SETDMAF CALL BDOS POP BC ; READF NEBO WRITEF POP HL LD DE,APTOFCB ADD HL,DE EX DE,HL CALL BDOS POP DE OR A RET MOVEFCB:: DEC B BR Z,PUTSP LD A,(HL) INC HL CP '.' BR Z,PUTSP OR A BR NZ,PUTCHR PUTSP: LD A,' ' DEC HL INC B ; ZNAK ZRAT ZNOVU PUTCHR: INC DE CP 'a' BR C,PTC1 AND 0DFH ; MALE PISMENO -> VELKE PISMENO PTC1: LD (DE),A DEC C BR NZ,MOVEFCB RET ;;;; CHYBOVA HLASENI DIRFULL:: ERROR 15 DISKFULL: ERROR 56 CLSERR: ERROR 58 NOFILE: ERROR 55 SELERR:: ERROR 48 BDSERR:: LD A,(ERRNR) OR A BR NZ,ERRERR ERROR 47 ERRERR: CALL TTYPRINT DB .CR,.CR,XXLBR,'Error ????? - cannot read ERRORS.PLG',XXRBR,0 JP ERRLE EOFERR:: ERROR 38 ;;; DATOVE STRUKTURY ERRFCB:: DB 0,'ERRORS PLG',0,0,0,0 DS 16 ECR: DB 0 ERRNR: DB 0 ERRHGH: DW 0 ERRBUF: DS 256 ENDM ; TO JE VSE