696 lines
12 KiB
Plaintext
696 lines
12 KiB
Plaintext
NLS
|
|
TTL "S:BACKUP"
|
|
NOG
|
|
ORG = $1000
|
|
;--------------------------;
|
|
; ;
|
|
; The Print Shop Companion ;
|
|
; Backup program ;
|
|
; ;
|
|
; ;
|
|
; Copyright 1985 ;
|
|
; by Roland Gustafsson ;
|
|
; ;
|
|
;--------------------------;
|
|
;
|
|
DAT EPZ $E0
|
|
;
|
|
TMPLO EPZ DAT
|
|
TMPHI EPZ DAT+1
|
|
ESCFLAG EPZ DAT+2
|
|
PRNTFLAG EPZ DAT+3
|
|
PASS EPZ DAT+4
|
|
;
|
|
; Used by special read routine:
|
|
;
|
|
TEMP EPZ DAT+5
|
|
NUMT EPZ DAT+6
|
|
BUFLO EPZ DAT+7
|
|
BUFHI EPZ DAT+8
|
|
BACKUP EPZ DAT+9
|
|
CENTER EPZ DAT+10
|
|
;
|
|
SN1 = $A5
|
|
SN2 = $DF
|
|
SN3 = $D4
|
|
CHK = $CF
|
|
;-----------
|
|
RESET = $0280
|
|
;
|
|
SLOT = $05F8
|
|
VTAB = $FB5B
|
|
HOME = $FC58
|
|
TEXT = $FB2F
|
|
WAIT = $FCA8
|
|
;-----------
|
|
ORG ORG
|
|
OBJ $800
|
|
;-----------
|
|
JMP START
|
|
;-----------
|
|
;
|
|
; Check for master
|
|
;
|
|
; CLC = master is in drive
|
|
; SEC = not master
|
|
;
|
|
CHEKMAST JSR SEEK34
|
|
LDX SLOT
|
|
STX $08
|
|
LDA $C089,X
|
|
LDA #$2C
|
|
STA TMPLO
|
|
LDY #0
|
|
^0 DEY
|
|
BNE >1
|
|
DEC TMPLO
|
|
BEQ CHKMSTSC
|
|
;
|
|
^1 LDA $C08C,X
|
|
BPL *-3
|
|
^2 CMP #SN1
|
|
BNE <0
|
|
LDA $C08C,X
|
|
BPL *-3
|
|
^3 CMP #SN2
|
|
BNE <2
|
|
LDA $C08C,X
|
|
BPL *-3
|
|
CMP #SN3
|
|
BNE <3
|
|
CLC
|
|
HEX 24
|
|
CHKMSTSC SEC
|
|
LDA $C088,X
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Check for data disk
|
|
;
|
|
; CLC = data disk in drive
|
|
; SEC = no data disk
|
|
;
|
|
CHEKDATA LDX SLOT
|
|
LDA $C089,X
|
|
LDA #$40
|
|
STA TMPLO
|
|
^0 JSR $B944
|
|
BCC >1
|
|
DEC TMPLO
|
|
BNE <0
|
|
^1 LDA $C088,X
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Turn on drive and seek track 34
|
|
;
|
|
SEEK34 LDA #0
|
|
STA $B7F4
|
|
LDA #34
|
|
STA $B7EC
|
|
;
|
|
; RWTS access routine
|
|
;
|
|
RWTS LDA #0
|
|
STA $B7EB
|
|
LDY #$E8
|
|
LDA #$B7
|
|
JMP $B7B5
|
|
;-----------
|
|
;
|
|
; Read or Write 9 tracks
|
|
;
|
|
; given PASS=pass (reads forward)
|
|
; A=command
|
|
;
|
|
BLKBUFR = $2000
|
|
;
|
|
PASSTBL BYT 0,9,18,27
|
|
;
|
|
RWBLOCK STA $B7F4
|
|
RWBLOCK2 LDY PASS
|
|
LDA PASSTBL-1,Y
|
|
STA $B7EC
|
|
LDA #$0F
|
|
STA $B7ED
|
|
LDA #9*16
|
|
STA TMPLO
|
|
;
|
|
LDA /BLKBUFR
|
|
STA $B7F1
|
|
LDA #0
|
|
STA $B7F0
|
|
;
|
|
RWLOOP JSR RWTS
|
|
BCS RWBLKERR
|
|
LDY $B7ED
|
|
DEY
|
|
BPL >1
|
|
INC $B7EC
|
|
LDA $B7EC
|
|
CMP #34
|
|
BGE >2
|
|
LDY #$0F
|
|
^1 STY $B7ED
|
|
INC $B7F1
|
|
DEC TMPLO
|
|
BNE RWLOOP
|
|
^2 RTS
|
|
;
|
|
; Handle error
|
|
;
|
|
RWBLKERR JSR HOME
|
|
LDA $B7F4
|
|
CMP #2
|
|
BEQ >9
|
|
JSR PRINT
|
|
ASC "ERROR READING COMPANION DISK"
|
|
HEX 8D
|
|
ASC "UNABLE TO MAKE BACKUP."
|
|
BRK
|
|
JMP ABORT
|
|
;
|
|
^9 JSR PRINT
|
|
ASC "UNABLE TO WRITE, BAD DISK."
|
|
HEX 8D
|
|
ASC "PLEASE TRY ANOTHER..."
|
|
BRK
|
|
JMP ABORT
|
|
;-----------
|
|
;
|
|
; Print routine:
|
|
;
|
|
PRINTLFT LSR CENTER
|
|
;
|
|
PRINT LDA #$FF
|
|
HEX 2C
|
|
PRINTINV LDA #$3F
|
|
STA $32
|
|
LDA #0
|
|
STA PRNTFLAG
|
|
PLA
|
|
STA TMPLO
|
|
PLA
|
|
STA TMPHI
|
|
^0 INC TMPLO
|
|
BNE >1
|
|
INC TMPHI
|
|
^1 LDY #0
|
|
LDA (TMPLO),Y
|
|
BEQ >3
|
|
BIT CENTER
|
|
BPL >2
|
|
BIT PRNTFLAG
|
|
BPL >4
|
|
^2 PHA
|
|
JSR $FDF0
|
|
PLA
|
|
CMP #$A0
|
|
BGE <0
|
|
LSR PRNTFLAG
|
|
BPL <0
|
|
;
|
|
^3 LDA TMPHI
|
|
PHA
|
|
LDA TMPLO
|
|
PHA
|
|
SEC
|
|
ROR CENTER
|
|
JMP $FE84
|
|
;
|
|
^4 LDA (TMPLO),Y
|
|
CMP #$A0
|
|
BLT >5
|
|
INY
|
|
BNE <4
|
|
;
|
|
^5 TYA
|
|
LSR
|
|
EOR #$FF
|
|
CLC
|
|
ADC #18
|
|
STA $24
|
|
SEC
|
|
ROR PRNTFLAG
|
|
JMP <1
|
|
;-----------
|
|
;
|
|
; BEEP Speaker
|
|
;
|
|
BEEP LDY #$30
|
|
^0 LDA $C030
|
|
LDA #$11
|
|
JSR WAIT
|
|
LDA $C030
|
|
LDA #$13
|
|
JSR WAIT
|
|
DEY
|
|
BNE <0
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Draw inverse line
|
|
;
|
|
BOTLINE LDA #23
|
|
INVLINE JSR $FBC1
|
|
LDY #39
|
|
LDA #$20
|
|
^0 STA ($28),Y
|
|
DEY
|
|
BPL <0
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Startup screen
|
|
;
|
|
SCREEN1 JSR TEXT
|
|
JSR HOME
|
|
LDA #2
|
|
STA $20
|
|
LDA #36
|
|
STA $21
|
|
LDA #8
|
|
STA $22
|
|
LDA #22
|
|
STA $23
|
|
;
|
|
LDA #0
|
|
JSR INVLINE
|
|
LDA #1
|
|
JSR INVLINE
|
|
LDA #2
|
|
JSR INVLINE
|
|
JSR BOTLINE
|
|
LDA #23
|
|
^0 PHA
|
|
JSR $FBC1
|
|
LDY #0
|
|
LDA #$20
|
|
STA ($28),Y
|
|
LDY #39
|
|
STA ($28),Y
|
|
PLA
|
|
SEC
|
|
SBC #1
|
|
BPL <0
|
|
;
|
|
JSR PRINTINV
|
|
HEX 8D
|
|
ASC "PRINT SHOP COMPANION BACKUP UTILITY"
|
|
BRK
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Print bottom line
|
|
;
|
|
PRQUIT LDA #23
|
|
JSR VTAB
|
|
JSR PRINTINV
|
|
ASC "PRESS <ESC> TO CANCEL"
|
|
BRK
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Get key
|
|
;
|
|
GETKEY JSR BOTLINE
|
|
BIT ESCFLAG
|
|
BMI >0
|
|
JSR PRQUIT
|
|
^0 LDA $C000
|
|
BPL <0
|
|
BIT $C010
|
|
CMP #$9B
|
|
BEQ >2
|
|
^1 PHA
|
|
JSR BOTLINE
|
|
PLA
|
|
RTS
|
|
;
|
|
^2 BIT ESCFLAG
|
|
BPL >3
|
|
JSR BEEP
|
|
JMP GETKEY
|
|
;
|
|
^3 JSR HOME
|
|
JMP ABORT2
|
|
;-----------
|
|
;
|
|
; Abort & reboot routine
|
|
;
|
|
ABORT LDA #20
|
|
JSR VTAB
|
|
ABORT2 JSR PRINT
|
|
ASC "MAKE SURE THAT THE COMPANION DISK"
|
|
HEX 8D
|
|
ASC "IS IN DRIVE AND PRESS <RETURN>"
|
|
BRK
|
|
SEC
|
|
ROR ESCFLAG
|
|
^0 JSR BEEP
|
|
JSR GETKEY
|
|
CMP #$8D
|
|
BNE <0
|
|
JSR TEXT
|
|
JSR HOME
|
|
JMP RESET
|
|
;-----------
|
|
;
|
|
; Wait for RETURN key
|
|
;
|
|
WAITCR JSR PRINT
|
|
HEX 8D8D8D
|
|
ASC "PRESS <RETURN> TO CONTINUE"
|
|
BRK
|
|
^0 JSR GETKEY
|
|
CMP #$8D
|
|
BNE <0
|
|
JMP HOME
|
|
;-----------
|
|
;
|
|
; Simple read routine
|
|
;
|
|
READPROT STA >0+1
|
|
JSR SEEK34
|
|
LDX SLOT
|
|
LDA $C089,X
|
|
ENTRY LDA #$04
|
|
STA NUMT
|
|
LDY #0
|
|
^0 LDA #00
|
|
STY BUFLO
|
|
STA BUFHI
|
|
^0 LDA $C08C,X
|
|
BPL *-3
|
|
RD2 CMP #SN1
|
|
BNE <0
|
|
LDA $C08C,X
|
|
BPL *-3
|
|
RD4 CMP #SN2
|
|
BNE RD2
|
|
LDA $C08C,X
|
|
BPL *-3
|
|
RD6 CMP #SN3
|
|
BNE RD4
|
|
RD7 LDA $C08C,X
|
|
BPL RD7
|
|
ROL
|
|
STA TEMP
|
|
RD8 LDA $C08C,X
|
|
BPL RD8
|
|
AND TEMP
|
|
STA (BUFLO),Y
|
|
INY
|
|
BNE RD7
|
|
ASL $FFFF
|
|
RDCK LDA $C08C,X
|
|
BPL RDCK
|
|
CMP #CHK
|
|
BNE ENTRY
|
|
INC BUFHI
|
|
DEC NUMT
|
|
BNE RD7
|
|
LDA $C088,X
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Wait for user to remove Master
|
|
;
|
|
REMOMAST JSR CHEKMAST
|
|
BCC REMOMST2
|
|
RTS
|
|
;
|
|
REMOMST2 JSR HOME
|
|
JSR BEEP
|
|
JSR PRINT
|
|
ASC "REMOVE COMPANION DISK."
|
|
HEX 8D8D
|
|
BRK
|
|
BIT BACKUP
|
|
BMI >1
|
|
JSR PRINT
|
|
ASC "INSERT BLANK DISK IN DISK DRIVE."
|
|
BRK
|
|
JMP >2
|
|
^1 JSR PRINT
|
|
ASC "INSERT BACKUP DISK IN DISK DRIVE."
|
|
BRK
|
|
^2 JSR WAITCR
|
|
JMP REMOMAST
|
|
;-----------
|
|
;
|
|
; Wait for user to remove BACKUP
|
|
;
|
|
REMOBACK JSR CHEKMAST
|
|
BCS >0
|
|
RTS
|
|
;
|
|
^0 JSR HOME
|
|
JSR BEEP
|
|
JSR PRINT
|
|
ASC "PLEASE REMOVE THE BACKUP DISK "
|
|
HEX 8D
|
|
ASC "AND INSERT THE COMPANION DISK."
|
|
BRK
|
|
JSR WAITCR
|
|
JMP REMOBACK
|
|
;-----------
|
|
;
|
|
; Format blank disk
|
|
;
|
|
FORMAT JSR MAKEBACK
|
|
JSR CHEKDATA
|
|
BCS >0
|
|
JSR HOME
|
|
JSR BEEP
|
|
JSR PRINT
|
|
ASC "CAUTION: THIS DISK HAS DATA ON IT"
|
|
BRK
|
|
JSR WAITCR
|
|
;
|
|
^0 JSR REMOMAST
|
|
JSR MAKEBACK
|
|
LDA #4
|
|
STA $B7F4
|
|
JSR RWTS
|
|
BCS >0
|
|
RTS
|
|
;
|
|
^0 LDX SLOT
|
|
JSR $B82A
|
|
BCC >0
|
|
;
|
|
JSR REMOWPRT
|
|
JMP >2
|
|
;
|
|
^0 JSR HOME
|
|
JSR BEEP
|
|
JSR PRINT
|
|
ASC "DEFECTIVE BLANK DISK, TRY ANOTHER"
|
|
BRK
|
|
;
|
|
^1 JSR WAITCR
|
|
^2 JSR REMOMAST
|
|
JMP FORMAT
|
|
;-----------
|
|
;
|
|
; PLEASE REMOVE W/P TAB MESSAGE:
|
|
;
|
|
REMOWPRT JSR HOME
|
|
JSR BEEP
|
|
JSR PRINT
|
|
ASC "PLEASE REMOVE THE WRITE PROTECT TAB"
|
|
BRK
|
|
JMP WAITCR
|
|
;-----------
|
|
;
|
|
; MAKING BACKUP MESSAGE:
|
|
;
|
|
MAKEBACK JSR HOME
|
|
JSR PRINT
|
|
ASC "MAKING BACKUP DISK..."
|
|
BRK
|
|
RTS
|
|
;-----------
|
|
;-----------
|
|
;
|
|
; The program starts here:
|
|
;
|
|
START LSR ESCFLAG
|
|
LSR BACKUP
|
|
SEC
|
|
ROR CENTER
|
|
JSR SCREEN1
|
|
JSR HOME
|
|
;
|
|
JSR CHEKMAST
|
|
LDA #8
|
|
JSR READPROT
|
|
BIT $C010
|
|
LDA $BFF
|
|
BEQ COPYOK
|
|
CMP #1
|
|
BEQ MESSAGE1
|
|
CMP #2
|
|
BEQ MESSAGE2
|
|
;
|
|
MESSAGE1 JSR PRINT
|
|
ASC "THIS DISK HAS ALREADY BEEN"
|
|
HEX 8D
|
|
ASC "USED TO MAKE A BACKUP."
|
|
BRK
|
|
JMP ABORT
|
|
;
|
|
MESSAGE2 JSR PRINT
|
|
ASC "THIS DISK CANNOT BE COPIED."
|
|
BRK
|
|
JMP ABORT
|
|
;---
|
|
;
|
|
; Go ahead and make copy
|
|
;
|
|
COPYOK DEC $22
|
|
DEC $22
|
|
JSR HOME
|
|
JSR PRINTINV
|
|
ASC "THIS UTILITY LETS YOU MAKE ONE"
|
|
HEX 8D
|
|
ASC "BACKUP COPY OF THE FRONT SIDE"
|
|
HEX 8D
|
|
ASC "OF YOUR COMPANION DISK"
|
|
BRK
|
|
JSR PRINTLFT
|
|
HEX 8D8D8D8D
|
|
ASC "IMPORTANT: YOU MAY USE THIS OPTION"
|
|
HEX 8D
|
|
ASC "ONLY ONCE."
|
|
HEX 8D8D
|
|
ASC "TO MAKE A BACKUP, YOU WILL NEED ONE"
|
|
HEX 8D
|
|
ASC "BLANK DISK."
|
|
BRK
|
|
JSR WAITCR
|
|
JSR HOME
|
|
INC $22
|
|
INC $22
|
|
JSR HOME
|
|
JSR PRINTLFT
|
|
ASC "YOU WILL NEED TO SWAP DISKS A NUMBER"
|
|
ASC "OF TIMES. THE PROGRAM WILL TELL YOU"
|
|
HEX 8D
|
|
ASC "WHEN TO DO THIS."
|
|
HEX 8D8D
|
|
ASC "TO START, MAKE SURE YOUR COMPANION"
|
|
HEX 8D
|
|
ASC "DISK (LABEL SIDE UP) IS IN YOUR"
|
|
HEX 8D
|
|
ASC "DISK DRIVE."
|
|
BRK
|
|
JSR WAITCR
|
|
;---
|
|
LDY #1
|
|
MAINLOOP STY PASS
|
|
^0 JSR HOME
|
|
JSR REMOBACK
|
|
;
|
|
; Check to make sure no funny
|
|
; business has taken place
|
|
;
|
|
LDA #$0C
|
|
JSR READPROT
|
|
LDA $FFF
|
|
BEQ GEEWHIZ
|
|
JMP START
|
|
;
|
|
GEEWHIZ JSR PRINT
|
|
ASC "READING COMPANION DISK..."
|
|
BRK
|
|
LDA #1
|
|
JSR RWBLOCK
|
|
;
|
|
; if pass 4, then do special stuff
|
|
;
|
|
LDA PASS
|
|
CMP #4
|
|
BNE NOTPASS4
|
|
;
|
|
JSR $BCE0
|
|
JSR SEEK34
|
|
LDA $C089,X
|
|
LDX #$0D
|
|
LDA #$D0
|
|
JSR $803
|
|
BCC >0
|
|
LDA $C088,X
|
|
JSR REMOWPRT
|
|
JMP <0
|
|
;
|
|
^0 LDA #1
|
|
STA $7FF
|
|
JSR $800
|
|
JSR $900
|
|
SEC
|
|
ROR ESCFLAG
|
|
LDX SLOT
|
|
LDA $C088,X
|
|
JSR REMOMST2
|
|
JMP >0
|
|
;
|
|
NOTPASS4 JSR REMOMAST
|
|
;
|
|
^0 LDA PASS
|
|
CMP #1
|
|
BNE NOTPASS1
|
|
;
|
|
JSR FORMAT
|
|
SEC
|
|
ROR BACKUP
|
|
;
|
|
NOTPASS1 JSR MAKEBACK
|
|
LDA #2
|
|
JSR RWBLOCK
|
|
;
|
|
LDY PASS
|
|
INY
|
|
CPY #5
|
|
BGE >0
|
|
JMP MAINLOOP
|
|
;
|
|
^0 JSR SEEK34
|
|
LDX SLOT
|
|
LDA $C089,X
|
|
LDA #2
|
|
STA $7FF
|
|
JSR $800
|
|
JSR $900
|
|
LDX SLOT
|
|
LDA $C088,X
|
|
;
|
|
DEC $22
|
|
DEC $22
|
|
JSR HOME
|
|
JSR PRINT
|
|
ASC "BACKUP COMPLETE."
|
|
HEX 8D8D
|
|
ASC "PLEASE LABEL YOUR DISK."
|
|
BRK
|
|
JSR PRINTLFT
|
|
HEX 8D8D
|
|
HEX 8D8D
|
|
ASC "NOTE: TO COPY THE BACK SIDE OF"
|
|
HEX 8D
|
|
ASC "THE DISK, USE THE STANDARD COPY"
|
|
HEX 8D
|
|
BYT "PROGRAM THAT CAME WITH YOUR"
|
|
HEX 8D
|
|
BYT "COMPUTER."
|
|
HEX 8D
|
|
BRK
|
|
JMP ABORT
|
|
;-----------
|
|
;
|
|
;
|
|
;
|
|
USR "O:BACKUP",ORG
|
|
END
|