home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CBM Funet Archive
/
cbm-funet-archive-2003.iso
/
cbm
/
crossplatform
/
emulators
/
Atari
/
c64.lzh
/
C64
/
SRC
/
VC.S
< prev
Wrap
Text File
|
1986-02-06
|
27KB
|
1,095 lines
********************************************************************************
* *
* c64-eMULATOR v3.0 *
* {CBM-X} 1987 BY uWE sEIMET *
* bUCHENLOCHSTRAE 29 *
* 6750 kAISERSLAUTERN *
* *
* lINKREIHENFOLGE: c64.o,vc.o,emulator.o *
* *
********************************************************************************
gemdos = 1
prout = $05
setdrv = $0e
dfree = $36
create = $3c
open = $3d
close = $3e
read = $3f
write = $40
unlink = $41
chmode = $43
malloc = $48
mfree = $49
sfirst = $4e
snext = $4f
rename = $56
GLOBL VC1541
GLOBL VCOPEN
GLOBL VCCLOSE
GLOBL VCREAD
GLOBL VCWRITE
GLOBL VCCHKIN
GLOBL VCKOUT
GLOBL COMPNT
GLOBL DTA
GLOBL FSAVE
GLOBL FLOAD
GLOBL FILE
GLOBL PRINTER
GLOBL PRFONT
TEXT
FLOAD:
MOVE.B D6,$C3(A6)
MOVE.B D7,$C4(A6)
MOVE.B D5,$93(A6)
CLR.B $90(A6)
BSR IOPAR
LEA C64+$F0C9,A2 *"searching"
BSR PRINT
LEA C64+$F0D4,A2 *"for"
BSR PRINT
LEA FILE,A2
BSR PRINT
CMP.B #"$",FILE
BEQ CAT
CLR -(SP)
PEA FILE
MOVE #sfirst,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
TST D0
BEQ LD0
MOVE #$F704,D0
BRA RET64
LD0: TST.B $93(A6)
BNE VER
LEA C64+$F106,A2 *"loading"
BSR PRINT
CLR -(SP)
PEA FILE
MOVE #open,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
MOVE D0,D2
BMI LOADERR
PEA $AE(A6)
PEA 2
MOVE D2,-(SP)
MOVE #read,-(SP)
TRAP #gemdos
ADD.L #12,SP
TST.L D0
BMI LOADERR
TST.B $B9(A6)
BNE SADR
MOVE.B D6,$AE(A6)
MOVE.B D7,$AF(A6)
SADR: CLR.L D0
MOVE.B $AF(A6),D0
ASL #8,D0
MOVE.B $AE(A6),D0
PEA (A6,D0.L)
MOVE.L DTA+26,-(SP)
MOVE D2,-(SP)
MOVE #read,-(SP)
TRAP #gemdos
ADD.L #12,SP
TST.L D0
BMI LOADERR
MOVE D2,-(SP)
MOVE #close,-(SP)
TRAP #gemdos
ADDQ.L #4,SP
TST D0
BMI LOADERR
MOVE.B DTA+28,D0
ADD.B DTA+29,D6
ADDX.B D0,D7
SUBQ.B #2,D6
BCC LD9
SUBQ.B #1,D7
LD9: MOVE.B D6,$AE(A6)
MOVE.B D7,$AF(A6)
BRA OK
VER: LEA C64+$F116,A2 *"verifying"
BSR PRINT
BRA OK
LOADERR:
OR.B #$BF,$90(A6)
OR.B #$11,D4
MOVEQ #$1D,D5
RTS
CAT: LEA C64+$F106,A2
BSR PRINT
TST.B $B9(A6)
BEQ SCAT
MOVE.B #$01,$C3(A6)
MOVE.B #$04,$C4(A6)
SCAT: CLR.L D0
MOVE.B $C4(A6),D0
ASL #8,D0
MOVE.B $C3(A6),D0
LEA (A6,D0.L),A2
BSR ODIR
MOVE.L A2,D0
SUB.L A6,D0
MOVE.B D0,D6
LSR #8,D0
MOVE.B D0,D7
BRA LD9
FSAVE:
MOVE.B D6,$AE(A6)
MOVE.B D7,$AF(A6)
LEA (A6,D5),A0
MOVE.B (A0),$C1(A6)
MOVE.B 1(A0),$C2(A6)
BSR IOPAR
LEA C64+$F10E,A2
BSR PRINT
LEA FILE,A2
BSR PRINT
CLR -(SP)
PEA FILE
MOVE #create,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
MOVE D0,D2
BMI SAVEERR
PEA $C1(A6)
PEA 2
MOVE D2,-(SP)
MOVE #write,-(SP)
TRAP #gemdos
ADD.L #12,SP
TST.L D0
BMI SAVEERR
MOVE.B $C2(A6),D0
ASL #8,D0
MOVE.B $C1(A6),D0
MOVE.L D7,D1
ASL #8,D1
MOVE.B D6,D1
SUB D0,D1
BCS SAVEERR
PEA (A6,D0)
MOVE.L D1,-(SP)
MOVE D2,-(SP)
MOVE #write,-(SP)
TRAP #gemdos
ADD.L #12,SP
TST.L D0
BMI SAVEERR
MOVE D2,-(SP)
MOVE #close,-(SP)
TRAP #gemdos
ADDQ.L #4,SP
TST D0
BPL OK
SAVEERR:MOVE #$F70D,D0 *"not output file"
BRA RET64
IOPAR:
MOVE #$F713,D0 *"illegal device number"
MOVE.B $BA(A6),D3
CMP.B #1,D3
BGT IO0
MOVE.B DRV(PC),D3
IO0: CMP.B #8,D3
BLT IRET64
CMP.B #17,D3
BGT IRET64
MOVE #$F710,D0 *"missing filename"
TST.B $B7(A6)
BEQ IRET64
IO4: MOVE.B D3,DRV
SUBQ.B #8,D3
MOVE D3,-(SP)
MOVE #setdrv,-(SP)
TRAP #gemdos
ADDQ.L #4,SP
MOVE.B $B7(A6),D3
CLR.L D0
LEA $BB(A6),A1
MOVE.B 1(A1),D0
ASL #8,D0
MOVE.B (A1),D0
LEA (A6,D0.L),A1
LEA FILE,A0
CLR.B (A0,D3)
SUBQ.B #1,D3
IO1: MOVE.B (A1,D3),(A0,D3)
DBF D3,IO1
CLR D3
RTS
IRET64: ADDQ.L #4,SP
BRA RET64
VC1541:
CLR.B TRACK *sPUR UND sEKTOR
CLR.B SECTOR
LEA FILE,A0
MOVE.L COMPNT(PC),D0
SUB.L A0,D0
TST.B D0 *lNGE DER kOMMANDOZEILE
BEQ OK *KEIN kOMMANDO-
CMP.B #$0D,(A0)
BEQ OK *KEIN kOMMANDO-
MOVE.B (A0),D1
MOVEQ #$0B,D0 *aNZAHL DER bEFEHLE
LEA COM(PC),A1
FLP0: CMP.B (A1,D0),D1
BEQ FLP
DBF D0,FLP0
BRA ERR2
FLP: ASL #2,D0
LEA ADR(PC),A1
MOVE.L (A1,D0),A1
MOVEQ #$3A,D0 *":"
BSR FIND
JSR (A1)
RTS
*fILE FFNEN, LOGISCHE fILENUMMER IN d0
VCOPEN:
CLR.B TEOF
MOVE.B D0,TMP *LOGISCHE fILENUMMER
MOVE.B $BA(A6),D3 *gERTEADRESSE
BSR IO4 *fILENAME NACH a0
MOVEQ #$2C,D0 *","
BSR FIND *SUCHEN
BNE READF *NICHT GEFUNDEN-fILE LESEN
CLR.B (A0,D0) *eNDE DES fILENAMENS MARKIEREN
CMP.B #"s",1(A0,D0) *seq?
BEQ SEQ *JA-
CMP.B #"p",1(A0,D0) *prg?
BNE ERR4 *NEIN-
SEQ: CMP.B #",",2(A0,D0) *kOMMA?
BNE ERR4 *NEIN-
CMP.B #"r",3(A0,D0) *fILE LESEN?
BEQ READF *JA-
CMP.B #"w",3(A0,D0) *fILE SCHREIBEN
BNE ERR4 *NEIN-
ST RWFLG *fLAG FR sCHREIBEN
CLR -(SP)
PEA FILE
MOVE #create,-(SP)
BRA READF1
READF: CLR.B RWFLG
MOVEQ #-1,D0 *dUMMY-hANDLE
CMP.B #"$",FILE *dIRECTORY?
BEQ ODI *JA-
CLR -(SP)
PEA FILE
MOVE #open,-(SP)
READF1: TRAP #gemdos
ADDQ.L #8,SP
TST D0
BMI ERR4
ODI: CLR D1
MOVE.B $98(A6),D1 *pOSITION DES fILEEINTRAGS
SUBQ.B #1,D1 *pOSITION IN lISTE
LEA FILENR,A0
MOVE.B TMP,(A0,D1) *LOGISCHE fILENUMMER
LEA EOFS,A0
CLR.B (A0,D1) *eof-fLAG LSCHEN
LEA RWFLGS,A0
MOVE.B RWFLG,(A0,D1) *fLAG FR lESEN/sCHREIBEN
ADD D1,D1
LEA FHANDLE,A0
MOVE D0,(A0,D1) *hANDLE MERKEN
LEA FILLEN,A0
CLR (A0,D1) *KEINE GLTIGEN bYTES
ADD D1,D1
MOVE D1,D0
LEA BUFPNT,A0
MULU #$0400,D0 *bUFFERADRESSE BERECHNEN
ADD.L #FILBUF,D0
MOVE.L D0,(A0,D1) *aDRESSE FR sCHREIBEN/lESEN
RTS
VCREAD:
MOVE.B $B9(A6),D0
AND.B #$0F,D0
CMP.B #$0F,D0 *kOMMANDOKANAL?
BEQ READC *JA-
TST TLEN
BNE FIL1
ST D5 *bYTE AN dATEIENDE
TST.B TEOF *dATEIENDE?
BNE EOF *JA-
BSR VCR1 *NCHSTEN bLOCK LESEN
FIL1: MOVE.L TPNT(PC),A0
MOVE.B (A0)+,D5
MOVE.L A0,TPNT
SUBQ #1,TLEN
BNE EOF
TST.B TEOF
BEQ EOF
CEOF: OR.B #$40,$90(A6) *eof
EOF: AND.B #$EE,D4
RTS
VCR1: TST THAND *dIRECTORY-fILE?
BMI GETDIR *JA-
MOVE.L BUFADR(PC),-(SP) *bUFFERADRESSE
PEA $1000
MOVE THAND,-(SP)
MOVE #read,-(SP)
TRAP #gemdos
ADD.L #12,SP
MOVE D0,TLEN
BMI ERR4
CMP #$1000,D0
BEQ NOEOF
GDIR: ST TEOF
NOEOF: MOVE.L BUFADR(PC),TPNT
RTS
GETDIR: MOVE.L BUFADR(PC),A2
BSR OPDIR
SUB.L BUFADR(PC),A2
MOVE A2,TLEN
BSR OK
BRA GDIR
READC: MOVE.L COMPNT(PC),A0
MOVE.B (A0)+,D5
MOVE.L A0,COMPNT
TST.B (A0)
BNE EOF
BSR OK
BRA CEOF
VCWRITE:
MOVE.B $B9(A6),D0
AND.B #$0F,D0
CMP.B #$0F,D0 *kOMMANDOKANAL?
BEQ WCOM *JA-
MOVE.L TPNT(PC),A0
MOVE.B D5,(A0)+
MOVE.L A0,TPNT
ADDQ #1,TLEN
CMP #$1000,TLEN
BNE NOWR
MOVE.L BUFADR(PC),-(SP) *bUFFERADRESSE
PEA $1000
MOVE THAND,-(SP)
MOVE #write,-(SP)
TRAP #gemdos
ADD.L #12,SP
TST.L D0
BMI ERR4
CLR TLEN
MOVE.L BUFADR(PC),TPNT
BRA NOWR
WCOM: MOVE.L COMPNT(PC),A0
MOVE.B D5,(A0)+
MOVE.L A0,COMPNT
NOWR: AND.B #$EE,D4
RTS
*fILE SCHLIEEN, LOGISCHE fILENUMMER IN d0
VCCLOSE:
BSR GETFIL *nUMMER IN tABELLE HOLEN
LEA RWFLGS,A0
TST.B (A0,D1) *lESEN?
BEQ CLS1 *JA-
MOVE D1,D0
LEA BUFPNT,A0
MULU #$1000,D0 *bUFFERADRESSE BERECHNEN
ADD.L #FILBUF,D0
MOVE.L D0,-(SP) *aDRESSE FR sCHREIBEN/lESEN
ADD D1,D1
LEA FILLEN,A0
CLR.L D0
MOVE (A0,D1),D0
MOVE.L D0,-(SP) *bLOCKLNGE
LEA FHANDLE,A0
MOVE (A0,D1),-(SP) *fILE-hANDLE
MOVE #write,-(SP)
TRAP #gemdos
ADD.L #12,SP
TST.L D0
BMI ERR4
BRA CLS2
CLS1: ADD D1,D1
CLS2: LEA FHANDLE,A0
TST (A0,D1) *dIRECTORY-fILE?
BMI CLCOM *JA-
MOVE (A0,D1),-(SP)
MOVE #close,-(SP)
TRAP #gemdos
ADDQ.L #4,SP
CLCOM: RTS
*eIN-/aUSGABE AUF iec-bUS, LOGISCHE fILENUMMER IN d0
VCCHKIN:
VCKOUT:
TST ONR
BEQ FCHK
MOVE ONR,D1
SUBQ #1,D1
LEA EOFS,A0
MOVE.B TEOF,(A0,D1) *eof-fLAG
ADD D1,D1
LEA FILLEN,A0
MOVE TLEN,(A0,D1) *bLOCKLNGE
ADD D1,D1
LEA BUFPNT,A0
MOVE.L TPNT(PC),(A0,D1) *bUFFERPOINTER
FCHK: BSR GETFIL *pARAMETER HOLEN
MOVE D1,ONR
ADDQ #1,ONR *ALS GLTIG MARKIEREN
MOVE D1,D0
LEA EOFS,A0
MOVE.B (A0,D1),TEOF *eof-fLAG
ADD D1,D1
LEA FILLEN,A0
MOVE (A0,D1),TLEN *bLOCKLNGE
LEA FHANDLE,A0
MOVE (A0,D1),THAND *fILE-hANDLE
ADD D1,D1
LEA BUFPNT,A0
MOVE.L (A0,D1),TPNT *bUFFERPOINTER
MULU #$1000,D0 *bUFFERADRESSE BERECHNEN
LEA FILBUF,A0
ADD.L D0,A0
MOVE.L A0,BUFADR *aDRESSE FR sCHREIBEN/lESEN
RTS
GETFIL:
LEA FILENR,A0
GF: CMP.B (A0)+,D0
BNE GF
SUB.L #FILENR+1,A0
MOVE A0,D1
RTS
OPDIR:
MOVE #$0401,(A2)+ *pROGRAMMSTART BEI $0400
ODIR: ST (A2)+ *dUMMY FR zEILENNUMMER
ST (A2)+
MOVE.B $BA(A6),(A2) *dRIVENUMMER
SUBQ.B #8,(A2)+
CLR.B (A2)+
MOVE.B #$12,(A2)+ *rvs on
MOVE.B #$22,(A2)+
LEA DTA,A1
MOVE #$08,-(SP) *dISKNAME SUCHEN
PEA JOKER(PC) *"*.*"
MOVE #sfirst,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
TST D0
BNE VOL1
VOL0: TST.B 30(A1,D0)
BEQ VOL2
MOVE.B 30(A1,D0),(A2)+ *dISKNAME BERTRAGEN
ADDQ.B #1,D0
BRA VOL0
VOL1: CLR D0
VOL2: CMP.B #16,D0
BEQ VOL3
MOVE.B #" ",(A2)+
ADDQ.B #1,D0
BRA VOL2
VOL3: LEA FORMAT(PC),A0 *"st 2a"
VOL4: MOVE.B (A0)+,(A2)+
BNE VOL4
MOVE #$01,-(SP)
PEA JOKER(PC) *"*.*"
MOVE #sfirst,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
TST D0
BNE DIR0 *NICHT GEFUNDEN-
DIR9: BSR DIR *dIRECTORYEINTRAG ERZEUGEN
MOVE #snext,-(SP)
TRAP #gemdos
ADDQ.L #2,SP
TST D0
BEQ DIR9 *NCHSTE dATEI-
DIR0: CLR -(SP)
LEA BUFFER,A1
MOVE.L A1,-(SP)
MOVE #dfree,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
MOVE.L (A1),D0
MULU 14(A1),D0 *dISK-sPEICHERPLATZ BERECHNEN
MULU 10(A1),D0
DIVU #256,D0
ST (A2)+ *dUMMY-zEILENNUMMER
ST (A2)+
MOVE.B D0,(A2)+ *pLATZ AUF dISK
LSR #8,D0
MOVE.B D0,(A2)+
LEA FREE(PC),A0 *"blocks free."
DIRA: MOVE.B (A0)+,(A2)+
BNE DIRA
CLR.B (A2)+ *pROGRAMMENDE
CLR.B (A2)+
RTS
DIR:
ST (A2)+ *dUMMY-zEILENNUMMER
ST (A2)+
MOVE.L 26(A1),D0 *dATEILNGE
ADD.L #258,D0 *bLOCKZAHL BERECHNEN
DIVU #254,D0
MOVE.B D0,(A2)+
ROR #8,D0
MOVE.B D0,(A2)+
ROR #8,D0
CMP #10,D0
BGE DIR3
MOVE.B #" ",(A2)+
DIR3: CMP #100,D0
BGE DIR4
MOVE.B #" ",(A2)+
DIR4: MOVE.B #" ",(A2)+
MOVE.B #$22,(A2)+ *bEGINN DES fILENAMENS
CLR D0
DIR1: MOVE.B 30(A1,D0),D1
BEQ DIR6 *eNDE DES fILENAMENS-
CMP.B #".",D1
BEQ DIR6
MOVE.B D1,(A2)+
ADDQ.B #1,D0
BRA DIR1
DIR6: MOVE.B #$22,(A2)+ *eNDE DES fILENAMENS
MOVE.B D0,D3
DIR2: CMP.B #17,D0
BEQ DIR5
MOVE.B #" ",(A2)+ *mIT sPACES FLLEN
ADDQ.B #1,D0
BRA DIR2
DIR5: TST.B 30(A1,D3) *eXTENSION?
BEQ DIR7 *NEIN-
TST.B 31(A1,D3)
BNE DI0 *eXTENSION UNTERSUCHEN
DIR7: MOVE.B #" ",(A2)+
MOVE.B #" ",(A2)+
MOVE.B #" ",(A2)+
BRA DI3 *kEINE eXTENSION
DI0: MOVE.B 31(A1,D3),(A2)+
TST.B 32(A1,D3)
BNE DI1
MOVE.B #" ",(A2)+
MOVE.B #" ",(A2)+
BRA DI3
DI1: MOVE.B 32(A1,D3),(A2)+
TST.B 33(A1,D3)
BNE DI2
MOVE.B #" ",(A2)+
BRA DI3
DI2: MOVE.B 33(A1,D3),(A2)+
DI3: BTST #0,21(A1)
BEQ DIRB *UNGESCHTZTES fILE-
MOVE.B #"<",(A2)+ *GESCHTZTES fILE KENNZEICHNEN
DIRB: CLR.B (A2)+ *zEILENENDE
RTS
OK: LEA MSG0(PC),A0
AND.B #$EE,D4
BRA ERR
ERR1: LEA MSG1(PC),A0
BRA ERR
ERR2: LEA MSG2(PC),A0
BRA ERR
ERR3: LEA MSG3(PC),A0
BRA ERR
ERR4: LEA MSG4(PC),A0
BRA ERR
ERR5: LEA MSG5(PC),A0
ERR: LEA FILE,A1
MOVE.L A1,COMPNT
CERR: MOVE.B (A0)+,(A1)+
BNE CERR
MOVE.B #",",-1(A1)
MOVE.B TRACK,D0
BSR ASC
MOVE.B #",",(A1)+
MOVE.B SECTOR,D0
ASC: MOVE.B #"0"-1,D1
ASC0: ADDQ.B #1,D1
SUB.B #10,D0
BCC ASC0
ADD.B #10,D0
MOVE.B D1,(A1)+
ADD.B #"0",D0
MOVE.B D0,(A1)+
CLR.B (A1)
RTS
VALIDATE:
BRA OK
INIT:
BRA OK
MEMORY:
BRA OK
BLOCK:
BRA OK
USER:
CMP.B #"9",1(A0)
BEQ ERR3 *"vc 1541 emulator"
BRA OK
RECORD:
BRA OK
LBL:
BRA OK
COPY:
BNE ERR2 *KEIN dOPPELPUNKT-
LEA 1(A0,D0),A2
MOVE.L A2,A0
MOVEQ #$3D,D0 *"="
BSR FIND *SUCHEN
BNE ERR2
TST.B 1(A0,D0)
BEQ ERR2 *KEIN fILENAME-
MOVE.B D0,D3
CLR.B (A0,D0) *eNDE DES fILENAMENS MARKIEREN
CLR -(SP)
MOVE.L A2,-(SP) *NEUER fILENAME
MOVE #sfirst,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
TST D0
BEQ ERR5 *"file exists"
MOVE.L DTA+26,-(SP)
MOVE #malloc,-(SP)
TRAP #gemdos
ADDQ.L #6,SP
TST.L D0
BMI OK
MOVE.L D0,D2
CLR -(SP)
PEA 1(A2,D3)
MOVE #open,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
TST.L D0
BMI COK
MOVE D0,D3
MOVE.L D2,-(SP)
MOVE.L DTA+26,-(SP)
MOVE D3,-(SP)
MOVE #read,-(SP)
TRAP #gemdos
ADD.L #12,SP
TST.L D0
BMI COK
MOVE D3,-(SP)
MOVE #close,-(SP)
TRAP #gemdos
ADDQ.L #4,SP
TST D0
BMI COK
CLR -(SP)
MOVE.L A2,-(SP)
MOVE #create,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
TST.L D0
BMI COK
MOVE D0,D3
MOVE.L D2,-(SP)
MOVE.L DTA+26,-(SP)
MOVE D3,-(SP)
MOVE #write,-(SP)
TRAP #gemdos
ADD.L #12,SP
TST.L D0
BMI COK
MOVE D3,-(SP)
MOVE #close,-(SP)
TRAP #gemdos
ADDQ.L #4,SP
COK: MOVE.L D2,-(SP)
MOVE #mfree,-(SP)
TRAP #gemdos
ADDQ.L #6,SP
CLR.L D2
BRA OK
RENAME:
BNE ERR2 *KEIN dOPPELPUNKT-
LEA 1(A0,D0),A2
MOVE.L A2,A0
MOVEQ #$3D,D0 *"="
BSR FIND *SUCHEN
BNE ERR2
MOVE.B D0,D3
CLR.B (A0,D0) *eNDE DES fILENAMENS MARKIEREN
CLR -(SP)
MOVE.L A2,-(SP) *NEUER fILENAME
MOVE #sfirst,-(SP)
TRAP #gemdos
ADDQ.L #8,SP
TST D0
BEQ ERR5 *"file exists"
MOVE.L A2,-(SP)
PEA 1(A2,D3)
CLR -(SP)
MOVE #rename,-(SP)
TRAP #gemdos
ADD.L #12,SP
TST D0
BEQ OK
BRA ERR4 *"file not found"
SCRATCH:
BNE ERR2 *KEIN dOPPELPUNKT-
S2: LEA 1(A0,D0),A2
TST.B (A2)
BEQ ERR1 *KEIN fILENAME-
MOVE.L A2,A0
MOVEQ #$2C,D0 *kOMMA
BSR FIND *SUCHEN
CLR.B (A0,D0)
S4: MOVE.L A2,-(SP)
MOVE #unlink,-(SP)
TRAP #gemdos
ADDQ.L #6,SP
TST D0
BMI S3
ADDQ.B #1,TRACK *ZHLT GELSCHTE fILES
BRA S4 *NCHSTES fILE
S3: MOVE.L A2,A0
CLR D0
BSR FIND
BRA S2 *NCHSTES fILE-
NEW:
BRA OK
TOGGLE:
BNE ERR2 *KEIN dOPPELPUNKT-
T2: LEA 1(A0,D0),A2
TST.B (A2)
BEQ OK *KEIN fILENAME-
MOVE.L A2,A0
MOVEQ #$2C,D0 *kOMMA
BSR FIND *SUCHEN
CLR.B (A0,D0)
T4: CLR.L -(SP)
MOVE.L A2,-(SP)
MOVE #chmode,-(SP)
TRAP #gemdos
ADD.L #10,SP
TST D0
BMI T3
BCHG #0,D0
MOVE D0,-(SP)
MOVE #$01,-(SP)
MOVE.L A2,-(SP)
MOVE #chmode,-(SP)
TRAP #gemdos
ADD.L #10,SP
T3: MOVE.L A2,A0
CLR D0
BSR FIND
BRA T2 *NCHSTES fILE-
*zEICHEN IN d0 SUCHEN, pOINTER AUF sTRING IN a0, pOSITION IN d0
FIND:
MOVE.B D0,D1
CLR D0
FIND1: MOVE.B (A0,D0),D2
BEQ NFOUND
CMP.B D2,D1
BEQ FOUND
ADDQ #1,D0
BRA FIND1
NFOUND: AND #$FB,CCR
FOUND: RTS
*dRUCKEREMULATION
PRINTER:
MOVE.B $B9(A6),D3
BMI SA0
AND.B #$0F,D3
ASL.B #2,D3
MOVE.L SAADR(PC,D3),A0
JMP (A0)
SAADR: DC.L SA0,SA1,SA2,SA3,SA4,SA5,SA6,SA7,SA8,SA9,SA10
OUT: CMP.B #$0A,D5
BEQ PRRT
MOVE D5,D0
BSR PROUT
CMP.B #$0D,D5
BNE PRRT
MOVEQ #$0A,D0
BSR PROUT
CLR.B REVFLG
CLR.B QFLG
CLR CHRPNT
PRRT: RTS
SPC:
MOVEQ #$20,D0
BRA PROUT
CR:
CLR CHRPNT
CLR.B REVFLG
CLR.B QFLG
MOVEQ #$0D,D0
BRA PROUT
SA0: CLR.B CASEFLG
SA1:
CMP.B #$0D,D5
BEQ CROUT
CMP.B #$22,D5
BNE QUOTE
NOT.B QFLG
BRA QOUT
QUOTE: TST.B QFLG
BNE QOUT
CMP.B #$12,D5
BNE REV
ST REVFLG
RTS
REV: CMP.B #$92,D5
BNE NOREV
CLR.B REVFLG
RTS
NOREV: CMP.B #$11,D5
BNE NOLO
ST CASEFLG
RTS
NOLO: CMP.B #$91,D5
BNE NOUP
CLR.B CASEFLG
RTS
NOUP: CMP.B #$01,D5
BNE ENH
ST EXPFLG
RTS
ENH: CMP.B #$81,D5
BNE NOENH
CLR.B EXPFLG
RTS
NOENH: CMP.B #$1D,D5
BEQ SPC
CMP.B #$8D,D5
BEQ CR
CMP.B #$20,D5
BCS OUT
QOUT: CMP.B #$FE,D5
BEQ DEFCHR
MOVE.L D5,D0
TST.B D0
BMI GRPRNT
CMP.B #$20,D0
BLT QCODE
CMP.B #$60,D0
BLT CODE1
AND.B #$DF,D0
BRA NORMAL
CODE1: AND.B #$3F,D0
BRA NORMAL
GRPRNT: AND.B #$7F,D0
CMP.B #$20,D0
BLT QCODE1
CMP.B #$7F,D0
BNE NOPI
MOVEQ #$5E,D0
BRA NORMAL
QCODE1: OR.B #$40,D0
QCODE: OR.B #$80,D0
BRA NORMAL
NOPI: OR.B #$40,D0
NORMAL: ASL #3,D0
TST.B CASEFLG
BEQ NOSML
ADD.L #2048,D0
NOSML: LEA PRFONT,A1
ADD.L D0,A1
BRA NODEF
DEFCHR: LEA CHAR,A1
NODEF: MOVEQ #7,D2
MOVE.L PBUFPNT(PC),A0
SETOUT: MOVE.B (A1)+,D3
TST.B REVFLG
BEQ NOREV2
NOT.B D3
NOREV2: MOVE.B D3,(A0)+
TST.B EXPFLG
BEQ NOEXP2
MOVE.B D3,(A0)+
NOEXP2: DBF D2,SETOUT
MOVE.L A0,PBUFPNT
RTS
CROUT:
CMP.L #PRBUF,PBUFPNT
BEQ OUT
LEA GRPRT(PC),A1
GROUT: MOVE.B (A1)+,D0
BMI GREND
BSR PROUTA
BRA GROUT
GREND: MOVE.L PBUFPNT(PC),A1
SUB.L #PRBUF,A1
MOVE A1,D0
BSR PROUTA
MOVE A1,D0
LSR #8,D0
BSR PROUT
MOVE A1,D2
SUBQ #1,D2
LEA PRBUF,A1
MOVE.L A1,PBUFPNT
EPLOP: MOVE.B (A1)+,D0
BSR PROUTA
DBF D2,EPLOP
BRA OUT
SA3:
MOVEQ #$43,D2
BRA SA6_1
SA5:
CMP #$08,CHRPNT
BEQ SA4
MOVE CHRPNT,D0
LEA CHAR,A0
MOVE.B D5,(A0,D0)
ADDQ #1,CHRPNT
SA4: RTS
SA6:
MOVEQ #$41,D2
SA6_1: BSR ESC
MOVE D5,D0
BRA PROUT
SA7:
ST CASEFLG
SA2: RTS
SA8:
CLR.B CASEFLG
SA9: RTS
SA10:
MOVEQ #$40,D2
ESC:
MOVEQ #$1B,D0
BSR PROUT
MOVE D2,D0
PROUTA: AND #$FF,D0
PROUT: MOVE D0,-(SP)
MOVE #prout,-(SP)
TRAP #gemdos
ADDQ.L #4,SP
RTS
COM: DC.B "vidmup&crsnt"
ADR: DC.L VALIDATE,INIT,MEMORY
DC.L BLOCK,USER,RECORD,LBL
DC.L COPY,RENAME,SCRATCH,NEW
DC.L TOGGLE
DRV: DC.B 8 *LETZTER dRIVE
JOKER: DC.B "*.*",0
FORMAT: DC.B $22," st 2a",0
FREE: DC.B "blocks free.",0
COMPNT: DC.L FILE+3 *dEFAULT FR fLOPPY-rESET
MSG0: DC.B "00, ok",0
MSG1: DC.B "01, files scratched",0
MSG2: DC.B "30,syntax error",0
MSG3: DC.B "73,vc 1541 emulator",0
MSG4: DC.B "63,file not found",0
MSG5: DC.B "62,file exists",0
PBUFPNT:DC.L PRBUF
GRPRT: DC.B $1B,$2A,$04,$FF
BUFADR: DS.L 1 *AKTUELLE bUFFERADRESSE
TPNT: DS.L 1 *AKTUELLER bUFFERPOINTER
BSS
TRACK: DS.B 1
SECTOR: DS.B 1
FILBUF: DS.B $1000*10 *fILE-bUFFER
BUFPNT: DS.L 10 *bUFFERPOINTER
FHANDLE:DS 10 *fILE-hANDLES
FILLEN: DS 10 *bLOCKLNGEN
FILENR: DS.B 10 *LOGISCHE fILENUMMERN
EOFS: DS.B 10 *eof-fLAGS
RWFLGS: DS.B 10 *fLAGS FR lESEN/sCHREIBEN
TLEN: DS 1 *AKTUELLE bLOCKLNGE
THAND: DS 1 *AKTUELLES fILE-hANDLE
TEOF: DS.B 1 *AKTUELLES eof-fLAG
RWFLG: DS.B 1 *fLAG FR lESEN/sCHREIBEN
ONR: DS 1 *AKTUELLE nUMMER IN lISTE
DTA: DS.B 44
BUFFER: DS.L 4 *FR bERECHNUNG DER FREIEN bLCKE
FILE: DS.B 81 *FR pARAMETERBERGABE
TMP: DS.B 1
CHRPNT: DS 1
PRFONT: DS.B 4096
PRBUF: DS.B 8*160
CHAR: DS.B 8
REVFLG: DS.B 1
CASEFLG:DS.B 1
EXPFLG: DS.B 1
QFLG: DS.B 1