1019 lines
12 KiB
ArmAsm
1019 lines
12 KiB
ArmAsm
;*************************************************************
|
|
;
|
|
; P8000 KOPPELSOFTWARE
|
|
; MODUL: UDOS-DATEI E/A
|
|
; (angepasste REMOTE-Software)
|
|
; VERSION: 2.0
|
|
;
|
|
;*************************************************************
|
|
|
|
EXTERNAL BUF
|
|
EXTERNAL WAIT LODNET SNDNET
|
|
EXTERNAL SNDACK UEB16
|
|
GLOBAL LOAD SEND
|
|
GLOBAL ACTFLG
|
|
|
|
XFERSZ: EQU 64
|
|
BFRLEN: EQU 1000H
|
|
RL: EQU 200H ;RL=0 = DEFAULT RL
|
|
|
|
BINARY: EQU 0
|
|
QUERY: EQU 1
|
|
FILDES: EQU 2
|
|
EXEC: EQU 4
|
|
|
|
MAGIC: EQU 0D607H
|
|
S0BC EQU 27H
|
|
S0BD EQU 26H
|
|
SYSTEM: EQU 1003H
|
|
DATE: EQU 0FA2H
|
|
|
|
BTOHEX EQU 0BDFH ;AUS PROM-TEIL
|
|
|
|
SOH: EQU 01H
|
|
STX: EQU 02H
|
|
ETX: EQU 03H
|
|
EOT: EQU 04H
|
|
ACK: EQU 06H
|
|
NAK: EQU 15H ;CTRL-U
|
|
CAN: EQU 18H
|
|
ESC: EQU 1BH
|
|
|
|
|
|
;ZEITGETEILTER FLOPPY-ZUGRIFF
|
|
|
|
DISK: CALL SYSTEM
|
|
DLOOP: CALL UEB16
|
|
LD A,(IY+10)
|
|
BIT 7,A
|
|
JR Z,DLOOP
|
|
BIT 6,A
|
|
DEND: RET
|
|
|
|
;AUSGABE AUF CONSOLE
|
|
|
|
OUTAS:
|
|
LD A,(HL)
|
|
LD B,A
|
|
INC HL
|
|
SFREE IN A,(S0BC)
|
|
BIT 2,A ;SENDEPUFFER LEER
|
|
JR Z,SFREE ;NEIN
|
|
LD A,(HL) ;ZEICHEN
|
|
OUT (S0BD),A ;AUSGEBEN
|
|
INC HL
|
|
DJNZ SFREE
|
|
RET
|
|
|
|
ERROR:
|
|
LD HL,ERMSG1
|
|
CALL OUTAS
|
|
LD HL,NAMLEN
|
|
CALL OUTAS
|
|
LD A,(IY+10)
|
|
LD HL,ERNR
|
|
CALL BTOHEX
|
|
LD HL,ERMSG2
|
|
CALL OUTAS
|
|
RET
|
|
|
|
ERMSG1 DEFB 5
|
|
DEFM 'File '
|
|
|
|
ERMSG2 DEFB 11
|
|
DEFM ' Error '
|
|
ERNR: DEFW 2020H
|
|
DEFB 0DH
|
|
DEFB 0AH
|
|
|
|
NETSND: LD A,(HL)
|
|
CP 80H
|
|
RET Z
|
|
INC HL
|
|
PUSH HL
|
|
CALL SNDNET
|
|
POP HL
|
|
JR NETSND
|
|
|
|
WLODNET CALL LODNET
|
|
JR Z,WLODNET
|
|
RET
|
|
|
|
TRNBYT:
|
|
CALL LODNET
|
|
JR Z,TRNBYT
|
|
RET
|
|
|
|
|
|
MSKTRN:
|
|
CALL WLODNET
|
|
AND 7FH
|
|
RET
|
|
|
|
|
|
WAITAK:
|
|
CALL WLODNET
|
|
AND 7FH
|
|
CP ACK
|
|
RET ;ZERO IF ACK,NONZERO IF NOT
|
|
|
|
|
|
;START REQUEST
|
|
|
|
STRTRQ:
|
|
CALL SNDACK
|
|
CALL WLODNET
|
|
LD (FLGBYT),A ;WAIT FOR THE FLAGBYTE
|
|
CALL SNDACK ;ACKNOWLEDGE IF GOT
|
|
CALL FILNAM
|
|
LD IX,FLP
|
|
LD (IX),0
|
|
LD A,(FLGBYT)
|
|
BIT BINARY,A
|
|
JR Z,ASCTYP
|
|
BIT EXEC,A
|
|
JR Z,BINTYP
|
|
SET 7,(IX) ;SET PROCEDURE TYPE-FILE
|
|
RET
|
|
BINTYP:
|
|
SET 4,(IX)
|
|
RET
|
|
ASCTYP:
|
|
SET 5,(IX)
|
|
RET
|
|
|
|
;******************************************************
|
|
;LOAD REQUEST
|
|
|
|
LOAD:
|
|
RES 2,(HL)
|
|
CALL STRTRQ
|
|
|
|
BIT FILDES,A
|
|
JR Z,LOAD1
|
|
|
|
CALL CLRBUF ;DESCRIPTOR EINLESEN
|
|
LD HL,80H
|
|
LD (ABFRLEN),HL ;NEW LENGTH
|
|
LD HL,ACTFLG
|
|
SET 7,(HL)
|
|
LD DE,DARRAY
|
|
LD HL,DATE
|
|
LD BC,8
|
|
LDIR
|
|
|
|
CALL SNDACK
|
|
JR WAISTX
|
|
|
|
LOAD1:
|
|
LD (IX+01),01 ;OPEN FOR OUTPUT
|
|
LD HL,RL ;RECORD LENGTH
|
|
CALL OPNFIL
|
|
JR Z,REDTRN ;WITH NO ERROR READY FOR TRANSFER
|
|
CALL ERROR ;THERE OCCURED ANOTHER ERROR
|
|
JP CANCEL ;SEND THE CANCEL-REQUEST
|
|
|
|
REDTRN:
|
|
CALL CLRBUF
|
|
CALL SNDACK ;ACKNOWLEDGE FOR A GOOD FILE
|
|
WAISTX:
|
|
CALL MSKTRN
|
|
CP STX
|
|
JR Z,STXFON
|
|
CP CAN
|
|
JP Z,CANCIN
|
|
CP ESC
|
|
JP Z,CANCIN
|
|
JR WAISTX
|
|
|
|
|
|
STXFON:
|
|
LD HL,CHKSUM
|
|
LD (HL),0
|
|
CALL TRNBYT ;BLOCK LENGTH
|
|
LD D,A
|
|
PUSH DE
|
|
CALL TRNBYT
|
|
POP DE
|
|
LD E,A
|
|
PUSH DE ;COUNT
|
|
LD HL,CHKBFR
|
|
MORCHR:
|
|
PUSH DE
|
|
PUSH HL
|
|
CALL TRNBYT
|
|
POP HL
|
|
POP DE
|
|
LD C,A
|
|
LD A,(CHKSUM)
|
|
XOR C
|
|
LD (CHKSUM),A
|
|
LD (HL),C
|
|
INC HL
|
|
DEC DE
|
|
LD A,D
|
|
OR E
|
|
JR NZ,MORCHR
|
|
|
|
LOKETX:
|
|
CALL MSKTRN
|
|
CP ETX
|
|
JR NZ,LOKETX
|
|
CALL WLODNET
|
|
LD C,A
|
|
LD A,(CHKSUM)
|
|
CP C
|
|
LD HL,CHKBFR
|
|
POP DE ;COUNT
|
|
JR Z,PUTBUF
|
|
LD A,NAK
|
|
CALL SNDNET
|
|
JR WAISTX
|
|
|
|
PUTBUF:
|
|
LD A,(HL)
|
|
CALL PUTBFR
|
|
JP NZ,CANCEL
|
|
DEC DE
|
|
INC HL
|
|
LD A,D
|
|
OR E
|
|
JR NZ,PUTBUF
|
|
|
|
GIVACK:
|
|
CALL SNDACK
|
|
JR WAISTX
|
|
|
|
;++++++++++
|
|
;CANCEL LOAD
|
|
|
|
CANCEL:
|
|
LD A,CAN
|
|
CALL SNDNET
|
|
CALL WAITAK ;WAIT FOR THE BACK-CANCEL
|
|
JP CLOSE
|
|
|
|
CANCIN:
|
|
JP CLOSEW ;WAIT FOR THE NEXT ACTIONS
|
|
|
|
|
|
;++++++++++
|
|
;WRITE DATA BYTES TO BUFFER
|
|
;WRITE TO DISK WHEN BUFFER FULL
|
|
|
|
PUTBFR:
|
|
PUSH HL
|
|
PUSH BC
|
|
PUSH DE
|
|
LD HL,(ABUF)
|
|
LD BC,(ABFRLEN)
|
|
LD (HL),A
|
|
INC HL
|
|
DEC BC ;INCREMENT POINTER,REDUCE COUNT
|
|
LD (ABUF),HL
|
|
LD (ABFRLEN),BC
|
|
LD A,B
|
|
OR C
|
|
JR Z,PUTBFW ;IF BUFFER FULL WRITE IT TO THE FILE
|
|
XOR A
|
|
PUTB1: POP DE
|
|
POP BC
|
|
POP HL
|
|
RET
|
|
PUTBFW:
|
|
LD A,(ACTFLG)
|
|
BIT 7,A
|
|
RES 7,A
|
|
LD (ACTFLG),A
|
|
JR NZ,WRTDES
|
|
|
|
CALL WRTFIL
|
|
PUSH AF
|
|
CALL CLRBUF
|
|
; LD HL,PUNKT
|
|
; CALL OUTAS
|
|
POP AF
|
|
JR PUTB1
|
|
|
|
;++++++++++
|
|
;WRITE DESCRIPTOR RECORD
|
|
|
|
WRTDES:
|
|
LD HL,(BUF)
|
|
LD A,L
|
|
LD L,H
|
|
LD H,A
|
|
LD DE,MAGIC
|
|
OR A
|
|
SBC HL,DE
|
|
JR Z,WRTD1
|
|
|
|
LD HL,NODES ;ERROR NO DESCRIPTOR
|
|
WRTD0: CALL OUTAS
|
|
XOR A
|
|
INC A
|
|
JR PUTB1
|
|
|
|
WRTD1: LD DE,(BUF+15) ;RL
|
|
LD HL,BFRLEN
|
|
OR A
|
|
SBC HL,DE
|
|
LD HL,NORL
|
|
JR C,WRTD0 ;RL TO LARGE
|
|
|
|
LD DE,FILPRM ;MOVE
|
|
LD HL,BUF+12
|
|
LD BC,74H
|
|
LDIR
|
|
|
|
LD DE,DATE
|
|
LD HL,BUF+18H
|
|
LD BC,8
|
|
LDIR
|
|
LD A,(BUF+13H)
|
|
LD (PROP),A
|
|
|
|
POP DE
|
|
POP BC
|
|
POP HL
|
|
POP HL ;RET FROM PUTBFR
|
|
JP LOAD1
|
|
|
|
;+++++++++
|
|
;WRITE A BUFFER TO DISK
|
|
|
|
WRTFIL:
|
|
LD HL,BFRLEN
|
|
LD BC,(ABFRLEN)
|
|
AND A
|
|
SBC HL,BC
|
|
RET Z ; IF THERE IS NOTHING TO WRITE DO NOTHING
|
|
|
|
LD (FILDL),HL
|
|
|
|
LD A,(FLGBYT)
|
|
BIT FILDES,A
|
|
JR NZ,WF0
|
|
|
|
EX DE,HL
|
|
LD HL,(FILSMT+2)
|
|
ADD HL,DE
|
|
LD (FILSMT+2),HL
|
|
DEC HL
|
|
LD (HIGADR),HL
|
|
EX DE,HL
|
|
|
|
WF0: LD DE,(FILRL)
|
|
WF1: OR A
|
|
SBC HL,DE
|
|
JR Z,WF2
|
|
JR NC,WF1
|
|
WF2: ADD HL,DE
|
|
LD A,(FLP)
|
|
BIT 5,A
|
|
JR Z,WF3
|
|
DEC HL ;ASCII FILE, EOF NOT COUNT
|
|
WF3: LD (FILST1),HL ;NUMBER OF BYTES IN LAST RECORD
|
|
|
|
LD IY,FILVEC
|
|
CALL DISK
|
|
RET Z ;IF NO ERRORS RETURN
|
|
CALL ERROR ;IF THERE WAS ONE DISPLAY IT
|
|
XOR A
|
|
INC A
|
|
RET ;NONZERO RETURN SHOWS ERROR
|
|
|
|
|
|
;++++++++++
|
|
;CLEAR BUFFER
|
|
|
|
CLRBUF: LD HL,BUF
|
|
LD (ABUF),HL
|
|
LD DE,BUF+1
|
|
LD BC,BFRLEN
|
|
LD (ABFRLEN),BC
|
|
DEC BC
|
|
LD (HL),-1
|
|
LDIR
|
|
RET
|
|
|
|
|
|
;******************************************************
|
|
;CLOSE FILE
|
|
|
|
|
|
CLOSEW:
|
|
LD A,(FLP)
|
|
BIT 5,A ;ASCII ?
|
|
JR Z,CLOSE1
|
|
LD A,-1 ;EOF - MARK
|
|
CALL PUTBFR
|
|
CLOSE1: CALL WRTFIL
|
|
LD A,(FLGBYT)
|
|
BIT FILDES,A
|
|
JR Z,CLOSE
|
|
LD DE,DATE
|
|
LD HL,DARRAY
|
|
LD BC,8
|
|
LDIR
|
|
LD A,(PROP)
|
|
LD (FILPRP),A
|
|
|
|
CLOSE:
|
|
; LD HL,NEWLN
|
|
; CALL OUTAS
|
|
|
|
LD IY,FILCLS
|
|
LD (IY+4),74H
|
|
CALL SYSTEM
|
|
|
|
CALL SNDACK ;SEND THE ACKNOWLEDGE FOR READY
|
|
JP WAIT
|
|
|
|
|
|
;******************************************************
|
|
;SEND REQUEST
|
|
|
|
SEND:
|
|
RES 1,(HL)
|
|
|
|
CALL STRTRQ
|
|
LD (IX+01),0 ;OPEN FOR INPUT
|
|
LD HL,0 ;DEFAULT RL
|
|
CALL OPNFIL
|
|
PUSH AF
|
|
CALL NZ,ERROR ;NZ IST ERROR-RETURN
|
|
POP AF
|
|
JP NZ,CANCL ;CANCEL THIS FILEREQUEST
|
|
|
|
;READY FOR TRANSFER
|
|
CALL SNDACK ;FOR FILENAME IS OPEN OK
|
|
LD IY,FILRDV
|
|
LD (IY+0AH),0
|
|
LD HL,0
|
|
LD (BFCNT),HL
|
|
|
|
LD A,(FLGBYT)
|
|
BIT FILDES,A
|
|
JR Z,REDLOP
|
|
|
|
SNDDESC: ;SEND DESCRIPTOR RECORD
|
|
LD HL,BUF
|
|
LD (BUFPOI),HL
|
|
LD B,6
|
|
LD DE,MAGIC
|
|
SNDD1: LD (HL),D
|
|
INC HL
|
|
LD (HL),E
|
|
INC HL
|
|
DJNZ SNDD1
|
|
EX DE,HL
|
|
LD HL,FILPRM
|
|
LD BC,74H
|
|
LDIR
|
|
LD HL,80H
|
|
LD (BFCNT),HL
|
|
|
|
REDLOP:
|
|
LD HL,ACTFLG
|
|
BIT 5,(HL)
|
|
RES 5,(HL)
|
|
JP NZ,DONRED
|
|
LD HL,(BFCNT)
|
|
LD DE,(BUFPOI)
|
|
LD IX,CHKBFR
|
|
LD BC,XFERSZ
|
|
LD (CCOUNT),BC
|
|
LDLOP:
|
|
LD A,H
|
|
OR L
|
|
JR Z,NEWRED
|
|
PUSH HL
|
|
AND A ;RESET CARRY
|
|
SBC HL,BC ;BUFCNT-XFERSZ > 0 ?
|
|
POP HL
|
|
CALL C,CHKS ;SET ACTUAL COUNT INSTEAD OF XFERSZ
|
|
LD A,(FLP)
|
|
BIT 5,A
|
|
JR Z,OVCHK1
|
|
LD A,(DE)
|
|
CP 0FFH ;IS THERE ASCII-EOF ?
|
|
JR Z,ASCEOF
|
|
OVCHK1:
|
|
LD A,(DE)
|
|
INC DE
|
|
DEC HL
|
|
LD (BFCNT),HL
|
|
LD (BUFPOI),DE
|
|
LD (IX),A
|
|
DEC BC
|
|
INC IX
|
|
LD A,B
|
|
OR C
|
|
JP Z,SNDREC
|
|
JR LDLOP
|
|
|
|
ASCEOF:
|
|
LD HL,(CCOUNT)
|
|
AND A
|
|
SBC HL,BC ;ACTUAL COUNT FOR RECORD
|
|
LD (CCOUNT),HL
|
|
LD HL,ACTFLG
|
|
SET 5,(HL)
|
|
JP SNDREC
|
|
|
|
;++++++++++
|
|
;READ FROM DISK TO BUFFER
|
|
|
|
NEWRED:
|
|
LD A,(ACTFLG)
|
|
RES 6,A
|
|
LD (ACTFLG),A
|
|
LD IY,FILRDV
|
|
LD A,(IY+0AH)
|
|
CP 0C9H
|
|
JR Z,DONRED
|
|
|
|
LD HL,BFRLEN
|
|
LD (RDVLEN),HL
|
|
CALL DISK
|
|
LD A,(IY+0AH)
|
|
CP 0C9H
|
|
JR Z,NEWEND
|
|
BIT 6,A
|
|
PUSH AF
|
|
CALL NZ,ERROR
|
|
POP AF
|
|
JP NZ,CANCL
|
|
|
|
CALL SUBREC
|
|
JR Z,NEWEND
|
|
|
|
; LD HL,PUNKT
|
|
; CALL OUTAS
|
|
NEWR0: LD HL,(RDVLEN)
|
|
NEWR1: LD (BFCNT),HL
|
|
LD DE,BUF
|
|
LD (BUFPOI),DE
|
|
JP REDLOP
|
|
|
|
NEWEND: LD (IY+0AH),0C9H
|
|
LD HL,(FILST1)
|
|
LD A,L
|
|
OR H
|
|
JR Z,NEWR0 ;NUMBER OF BYTES IN LAST
|
|
;RECORD NOT USED
|
|
PUSH DE
|
|
LD DE,(FILRL)
|
|
LD HL,(RDVLEN)
|
|
LD A,L
|
|
AND 7FH
|
|
JR NZ,NEWR0
|
|
SBC HL,DE
|
|
LD DE,(FILST1)
|
|
ADD HL,DE
|
|
POP DE
|
|
JR NEWR1
|
|
|
|
;++++++++++
|
|
;END FILE TRANSFER
|
|
|
|
DONRED:
|
|
LD A,EOT
|
|
CALL SNDNET
|
|
JP CLOSE
|
|
|
|
;++++++++++
|
|
;SET ACTUELL TRANSFER BLOCK LENGTH TO NUMBER OF LAST CHARACTERS
|
|
|
|
CHKS:
|
|
LD A,(ACTFLG)
|
|
BIT 6,A
|
|
RET NZ
|
|
LD B,H
|
|
LD C,L
|
|
LD (CCOUNT),BC
|
|
SET 6,A
|
|
LD (ACTFLG),A
|
|
RET
|
|
|
|
;++++++++++
|
|
;DECREMENT RECORD COUNT
|
|
|
|
SUBREC: LD DE,(FILRL)
|
|
LD HL,BFRLEN
|
|
LD BC,0
|
|
SUBR1: INC BC
|
|
OR A
|
|
SBC HL,DE
|
|
JR NZ,SUBR1
|
|
LD HL,(FILPRM+1)
|
|
OR A
|
|
SBC HL,BC
|
|
LD (FILPRM+1),HL
|
|
RET
|
|
|
|
;++++++++++
|
|
;SEND A BLOCK TO NET
|
|
|
|
SNDREC:
|
|
LD HL,(CCOUNT)
|
|
LD A,H
|
|
OR L
|
|
JP Z,REDLOP
|
|
|
|
LD A,STX
|
|
CALL SNDNET
|
|
LD BC,(CCOUNT)
|
|
LD A,B
|
|
PUSH BC
|
|
CALL SNDNET
|
|
POP BC
|
|
LD A,C
|
|
CALL SNDNET
|
|
LD DE,CHKBFR
|
|
LD HL,CHKSUM
|
|
LD (HL),0
|
|
LD BC,(CCOUNT)
|
|
TRALOP:
|
|
LD A,(DE)
|
|
INC DE
|
|
DEC BC
|
|
PUSH AF
|
|
XOR (HL)
|
|
LD (HL),A
|
|
POP AF
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
CALL SNDNET
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
LD A,B
|
|
OR C
|
|
JR NZ,TRALOP
|
|
LD A,ETX
|
|
CALL SNDNET
|
|
LD A,(CHKSUM)
|
|
CALL SNDNET
|
|
CALL WAITAK
|
|
JP Z,REDLOP
|
|
CP NAK ;WAS IT A NAK
|
|
JR Z,SNDREC ;TRY IT AGAIN
|
|
JP CLOSE
|
|
|
|
;++++++++++
|
|
;CANCEL SEND
|
|
|
|
CANCL:
|
|
LD A,CAN
|
|
CALL SNDNET
|
|
CALL WAITAK
|
|
CANIN:
|
|
LD IY,FILCLS
|
|
LD (IY+4),74H
|
|
CALL DISK
|
|
CALL SNDACK
|
|
JP WAIT
|
|
|
|
|
|
;******************************************************
|
|
;GET FILENAME
|
|
|
|
FILNAM:
|
|
CALL MSKTRN
|
|
CP STX
|
|
JR NZ,FRAMER
|
|
XOR A
|
|
LD (CHKSUM),A ;INITIALIZE CHECKSUM
|
|
LD C,A ;INITIALIZE NAME-LENGTH COUNTER
|
|
LD HL,NAMBUF
|
|
MORNAM:
|
|
PUSH BC
|
|
PUSH HL
|
|
CALL MSKTRN ;ONLY ASCII-CHARACTERS FOR FILENAME
|
|
POP HL
|
|
POP BC
|
|
LD B,A
|
|
CP ETX ;HAVE WE REACHED THE END ?
|
|
JR Z,ENDNAM
|
|
INC C
|
|
LD A,32
|
|
CP C
|
|
JR C,MORN1 ;ONLY 32 CHARACTERS FOR FILENAME ALLOWED
|
|
LD (HL),B
|
|
INC HL
|
|
MORN1:
|
|
LD A,(CHKSUM)
|
|
XOR B
|
|
LD (CHKSUM),A
|
|
JR MORNAM
|
|
|
|
ENDNAM:
|
|
LD (HL),0DH
|
|
CALL WLODNET
|
|
LD B,A
|
|
LD A,(CHKSUM)
|
|
CP B
|
|
JR NZ,SUMERR ;CHECKSUMERROR IN FILENAME !
|
|
RET
|
|
|
|
|
|
;++++++++++
|
|
;FILENAME ERROR
|
|
|
|
SUMERR:
|
|
; LD HL,SUMEMS
|
|
; CALL OUTAS
|
|
LD A,NAK
|
|
CALL SNDNET ;GIVE A NONACKNOWLEDGE FOR THE WRONG FILENAME
|
|
JR FILNAM
|
|
;TRY IT AGAIN TO GET THE NAME CORRECT
|
|
|
|
SUMEMS:
|
|
DEFB 28
|
|
DEFM 'CHECKSUM ERROR IN FILENAME '
|
|
DEFB 0DH
|
|
|
|
FRAMER:
|
|
POP HL ;FROM ROUTINE FILNAM
|
|
POP HL ;FROM ROUNTINE STRTRQ
|
|
CP CAN
|
|
JP Z,CANIN
|
|
; LD HL,FRAMSG
|
|
; CALL OUTAS
|
|
JP CANCL
|
|
|
|
FRAMSG:
|
|
DEFB 36 ;LENGTH OF MSG
|
|
DEFM 'RECORD - FRAMING ERROR IN FILENAME'
|
|
DEFB 0DH
|
|
DEFB 0AH
|
|
|
|
|
|
;*****************************
|
|
;OPEN FILE
|
|
|
|
OPNFIL:
|
|
LD A,(FLGBYT)
|
|
BIT FILDES,A
|
|
JR NZ,OPNF
|
|
|
|
LD (FILRL),HL
|
|
LD (FILST1),HL
|
|
LD HL,0
|
|
LD (LOWADR),HL
|
|
LD (HIGADR),HL
|
|
LD (STKSIZ),HL
|
|
LD (FILSMT),HL
|
|
LD (FILSMT+2),HL
|
|
LD (FILSMT+4),HL
|
|
LD (FILSMT+6),HL
|
|
|
|
OPNF: XOR A
|
|
LD (FILSPV),A
|
|
LD (FILPRP),A
|
|
CALL ISNAME
|
|
RET NZ
|
|
|
|
LD A,(IX+1)
|
|
OR A
|
|
JR Z,OPN0
|
|
PUSH IX
|
|
LD IY,FILINI ;I REQUEST BEI WRITE
|
|
CALL SYSTEM
|
|
POP IX
|
|
|
|
OPN0: PUSH IX
|
|
LD IY,FILASV ;ASSIGN REQUEST
|
|
CALL SYSTEM
|
|
POP IX
|
|
RET NZ
|
|
|
|
LD A,'*'
|
|
LD (FILSPV+1),A
|
|
LD IY,FILOPN ;OPEN REQUEST
|
|
LD A,(IX+1)
|
|
LD (FILSPV),A
|
|
|
|
LD A,(FLGBYT)
|
|
BIT FILDES,A
|
|
JR Z,OPN1
|
|
|
|
BIT BINARY,A ;DESCRIPTOR TRANSFER ONLY
|
|
JR Z,OPN3 ;TYPE BINARY
|
|
JR OPN2
|
|
|
|
OPN1: LD A,(IX)
|
|
LD (FILPRM),A
|
|
OPN2: LD (IY+4),74H
|
|
CALL SYSTEM
|
|
|
|
LD A,(FLGBYT)
|
|
BIT FILDES,A
|
|
JR NZ,OPN4
|
|
|
|
LD A,(FLP)
|
|
AND 20H
|
|
LD B,A
|
|
LD A,(FILPRM)
|
|
LD (FLP),A
|
|
AND 20H
|
|
CP B
|
|
JR Z,OPN4
|
|
OPN3: LD (IY+0AH),48H ;INVALID FILE TYPE
|
|
OPN4: LD A,(IY+0AH)
|
|
BIT 6,A
|
|
JR Z,FILOKM
|
|
CP 0D0H ;DUPLICATE FILE ERROR ?
|
|
RET
|
|
|
|
;++++++++++
|
|
;FILE OK
|
|
|
|
FILOKM:
|
|
XOR A
|
|
RET
|
|
|
|
;++++++++++
|
|
;FILE NAME OK ?
|
|
ISNAME:
|
|
LD HL,NAMBUF
|
|
LD C,0 ;COUNT
|
|
LD A,(HL)
|
|
CP 0DH
|
|
JR Z,NAMERR
|
|
|
|
NAMLOP:
|
|
LD A,(HL)
|
|
CP 0DH ;CR ERREICHT
|
|
JR Z,ENDLEN
|
|
CP ';'
|
|
JR Z,NAMERR
|
|
CP ' '
|
|
JR Z,NAMERR
|
|
CP 09H
|
|
JR Z,NAMERR
|
|
INC HL
|
|
INC C
|
|
LD A,C
|
|
CP 33
|
|
JR NZ,NAMLOP
|
|
LD (HL),0DH
|
|
ENDLEN:
|
|
LD HL,NAMLEN
|
|
LD (HL),C
|
|
INC HL ;NAMBUF
|
|
XOR A
|
|
RET
|
|
|
|
NAMERR: LD A,46H ;INVALID FILE NAME
|
|
OR A
|
|
RET
|
|
|
|
FILVEC: ;FILE WRITE BIN
|
|
DEFB 05
|
|
DEFB 0FH
|
|
DEFW BUF
|
|
FILDL: DEFS 2
|
|
DEFW DEND
|
|
DEFW DEND
|
|
DEFB 0
|
|
DEFW 0
|
|
|
|
FILRDV: ;FILE READ BIN
|
|
DEFB 05
|
|
DEFB 0BH
|
|
DEFW BUF
|
|
RDVLEN: DEFS 2
|
|
DEFW DEND
|
|
DEFW DEND
|
|
DEFB 0
|
|
DEFW 0
|
|
|
|
FILCLS: ;FILE CLOSE
|
|
DEFB 05
|
|
DEFB 06
|
|
DEFW FILPRM
|
|
DEFW 74H
|
|
DEFW 0
|
|
DEFW 0
|
|
DEFB 0
|
|
DEFW 0
|
|
|
|
FILINI: ;DOS INIT
|
|
DEFB 05
|
|
DEFB 00
|
|
DEFW 0
|
|
DEFW 0
|
|
DEFW 0
|
|
DEFW 0
|
|
DEFB 0
|
|
DEFW 0
|
|
|
|
FILASV: ;FILE ASSIGN
|
|
DEFB 05
|
|
DEFB 02
|
|
DEFW NAMBUF
|
|
DEFW 0
|
|
DEFW 0
|
|
DEFW 0
|
|
DEFB 0
|
|
DEFW FILSPV
|
|
|
|
FILOPN: ;FILE OPEN
|
|
DEFB 05
|
|
DEFB 04
|
|
DEFW FILPRM
|
|
DEFW 74H
|
|
DEFW 0
|
|
DEFW 0
|
|
DEFB 0
|
|
DEFW FILSPV
|
|
|
|
|
|
FILOK1:
|
|
DEFB 7
|
|
DEFB 0DH
|
|
DEFB 0AH
|
|
DEFM 'FILE '
|
|
FILOK2:
|
|
DEFB 9
|
|
DEFM ' OF TYPE '
|
|
PROTYP:
|
|
DEFB 9
|
|
DEFM 'PROCEDURE'
|
|
ASTYP:
|
|
DEFB 5
|
|
DEFM 'ASCII'
|
|
BNTYP:
|
|
DEFB 6
|
|
DEFM 'BINARY'
|
|
OPENED:
|
|
DEFB 24
|
|
DEFM ' IS OPEN FOR TRANSFER '
|
|
DEFB 0DH
|
|
DEFB 0AH
|
|
PUNKT:
|
|
DEFB 1
|
|
DEFM '.'
|
|
NEWLN:
|
|
DEFB 2
|
|
DEFB 0DH
|
|
DEFB 0AH
|
|
LOGOUT:
|
|
DEFM 'logout'
|
|
DEFB 0AH
|
|
DEFB 80H
|
|
|
|
NODES: DEFB NODESL
|
|
DEFM 'INVALID DESCRIPTOR'
|
|
DEFB 0DH
|
|
DEFB 0AH
|
|
NODESL: EQU $-NODES-1
|
|
|
|
NORL: DEFB NORLL
|
|
DEFM 'RECORD LENGTH TO LARGE'
|
|
DEFB 0DH
|
|
DEFB 0AH
|
|
NORLL: EQU $-NORL-1
|
|
|
|
|
|
;******************************************************
|
|
;FILE DESCRIPTOR
|
|
|
|
FILPRM: DEFB 0
|
|
DEFW 0
|
|
FILRL: DEFW 0
|
|
FILSTO: DEFS 2
|
|
FILPRP: DEFS 1
|
|
FILSA: DEFW 0
|
|
FILST1: DEFS 18
|
|
FILSMT: DEFS 82
|
|
LOWADR: DEFS 2
|
|
HIGADR: DEFS 2
|
|
STKSIZ: DEFS 2
|
|
|
|
PROP: DEFS 1
|
|
DARRAY: DEFS 8
|
|
|
|
;******************************************************
|
|
|
|
ACTFLG: DEFS 1
|
|
CHKSUM: DEFS 1
|
|
FLGBYT: DEFS 1
|
|
FLP: DEFS 2
|
|
|
|
BUFPOI: DEFS 2
|
|
BFCNT: DEFS 2
|
|
CCOUNT: DEFS 2
|
|
|
|
NAMLEN: DEFS 1
|
|
NAMBUF: DEFS 33
|
|
FILSPV: DEFS 35
|
|
|
|
ABUF DEFS 2
|
|
ABFRLEN DEFS 2
|
|
CHKBFR: DEFS XFERSZ+1
|