; ; S:SUBPAK2 ; COUT ORA #$80 JMP $FDED ;----------- TXTINIT BYT 'INITIALIZE',0 ; TXTPRET BYT 'PRESS ' TXTRET BYT '',0 TXTCA BYT 'CHOOSE A ',0 ; TXTINDRV BYT 'IN ' TXTDRIVE BYT 'DRIVE ',0 ; TXTDD BYT 'DATA' TXTSD BYT ' ' TXTD BYT 'DISK',0 ; PSTEXT BYT 'PRINT SHOP',0 CTEXT BYT 'COMPANION',0 DTEXT BYT 'DATA',0 TXTPAK BYT 'PRESS ANY KEY',0 ;----------- ; ; Clear screen and display ; the standard white border ; WITEBORD JSR CLSCREEN JSR PRINT BYT RTOSWITE,0,0,1,192 BYT RTOSWITE,39,0,1,192 BYT RTOSWITE,1,0,38,16 BYT RTOSWITE,1,183,38,9 BRK JMP PCHEKSUM ;----------- ; ; Check for keypress BPL=no key ; BMI=key in A ; POLEBTN LDY #0 JSR DEVICERD BCS POLEKEY ASL BMI POLEKEY BCC POLEKEY LDA #$8D BNE >0 ; POLEKEY LDA $C000 BMI >0 LDA #0 RTS ; ^0 PHP BIT $C010 CMP #$FF BEQ >1 CMP #$E0 BLT >1 AND #$DF ^1 AND #$7F PLP ^2 RTS ; ; Get a key ; GETKEY BIT $C010 ^0 JSR POLEBTN BPL <0 RTS ;----------- ; ; JSR PICDRAW ; BYT ,,, ; HEX ; ; TMP0=Start X ; TMP1=Start Y ; TMP2=width ; TMP3=height ; TMP4=Repeat counter ; PICDRAW JSR GETINIT PICDRAW2 LDX #0 STX TMP4 ^0 JSR GETBYTE STA TMP0,X INX CPX #4 BLT <0 ; LDX TMP1 ^1 LDA TMP0 CLC ADC YBASELO,X STA HIRES LDA YBASEHI,X STA HIRES+1 LDY #0 ; ^2 JSR PICBYTE STA (HIRES),Y INY CPY TMP2 BLT <2 INX DEC TMP3 BNE <1 RTS ; PICBYTE LDA TMP4 BEQ >0 ; PICREPT LDA #00 DEC TMP4 BPL >1 ; ^0 JSR GETBYTE BMI >2 ; ^1 RTS ; ^2 PHA ASL ASL LDA #$00 BCC >3 LDA #$7F ^3 STA PICREPT+1 PLA AND #%00111111 STA TMP4 BPL PICBYTE ;----------- ; ; "PRESS ANY KEY TO CONTINUE..." ; ANYKEY LDY #173 HEX 2C ANYKEY2 LDY #185 STY >0+3 JSR PRINT ^0 .DA #PRLOC,140,#00 BYT PRCNTR .DA #PRSTR,TXTPAK,' TO ' BYT 'CONTINUE...',NOCR,0 ; JSR GETKEY SEC RTS ;----------- ; ; " TO GO BACK" ; ESCBACK JSR PRINT .DA #PRLOC,140,#184 BYT PRCNTR,PRINVR BYT ' TO GO BACK',CR,0 SEC RTS ;----------- ; ; JSR SETTYPE ; BYT '',0 ; BYT '
',0 ; BYT '',0 ; BYT ; ADR ; ADR ; ; Get type text "GRAPHIC" ; SETTYPE JSR GETINIT LDY #0 ^0 JSR GETBYTE STA TYPETEXT,Y BEQ >0 INY BNE <0 ; ; Get header text "GRAPHIC EDITOR+" ; ^0 LDY #0 ^1 JSR GETBYTE STA HEADTEXT,Y BEQ >0 INY BNE <1 ; ; Get file prefix "BORD." ; ^0 LDY #0 ^1 JSR GETBYTE STA FLPREFIX,Y BEQ >0 INY BNE <1 ; ; Get CAT length, loadadr, length ; ^0 LDY #0 ^1 JSR GETBYTE STA TYPELEN,Y INY CPY #5 BLT <1 RTS ; TYPETEXT DFS 10,0 HEADTEXT DFS 16,0 ;----------- ; ; 0=Save file ; 1=Load file ; SAVEGET HEX 00 ; FLPREFIX DFS 6,0 ; ; The following routines assume ; that SETTYPE was done. ; ; Get a file, if SEC then get from ; COMPANION disk which is drive one. ; Else, use the DATADRIV parameter. ; GETFILE STA GETCSIDE LDA DATADRIV PHA LDY #DTEXT LDX /DTEXT BCS >0 ; LDY #CTEXT LDX /CTEXT LDA #1 ; ^0 STA DATADRIV STY GET1MOD+1 STX GET1MOD+2 LDA #1 JSR DOFILE PLA STA DATADRIV RTS ;----------- ; ; Save file ; SAVEFILE LDA #0 SEC ROR INITFLAG SEC ; DOFILE STA SAVEGET ROR MASTMOD ; LDA DATADRIV STA $AA68 ORA #'0' CMP #'1' BNE *+4 LDA #' ' STA TXTDRIVE+6 ; JSR WITEBORD JSR ESCBACK JMP DISKLOP2 ; DISKLOOP JSR CLS1 DISKLOP2 JSR PRINT BYT PRINVR,PRRITE .DA #PRLOC,149,#4 .DA #PRSTR,HEADTEXT BYT ':',CR,0 ; LDA SAVEGET BEQ >0 ; JSR PRINT BYT PRBIG,PRINVR .DA #PRLOC,160,#1 BYT 'GET',CR BYT PRSMAL,PRNORM BYT PRCNTR .DA #PRLOC,140,#52 .DA #PRSTR,TXTCA .DA #PRSTR,TYPETEXT BYT ':',CR .DA #PRLOC,15,#92,#PRLEFT BYT 'PLACE ' GET1MOD .DA #PRSTR,$FFFF .DA #PRSTR,TXTSD BYT ' ',NOCR,0 JMP >1 ; ^0 JSR PRINT BYT PRBIG,PRINVR .DA #PRLOC,160,#1 BYT 'SAVE',CR BRK JSR INIT? BCC *+3 RTS ; JSR CLS1 JSR PRINT .DA #PRLOC,140,#48 BYT PRCNTR BYT 'TO SAVE ' .DA #PRSTR,TYPETEXT BYT ' YOU ARE',CR BYT 'WORKING ON:',CR BYT PRLEFT .DA #PRLOC,15,#92 BYT 'PLACE ' .DA #PRSTR,TXTINIT BYT 'D ' .DA #PRSTR,TXTDD,#CR BRK ; ^1 JSR PRINT .DA #PRSTR,TXTINDRV,#CR .DA #PRLOC,15,#116 BYT 'TYPE IN NAME OF ' .DA #PRSTR,TYPETEXT BYT ' OR ',CR .DA #PRSTR,TXTPRET BYT ' FOR ' .DA #PRSTR,TYPETEXT BYT ' LIST',CR,CR,'>',NOCR,0 ; JSR INPUTNAM BCS DISKQUIT ; LDA #00 MASTMOD = *-1 BMI >0 ; ; Getting from Companion disk ; so make sure it is in drive. ; CLC LDA #00 GETCSIDE = *-1 JSR WAITCD BCC >1 BCS >5 ; ; Getting/Saving to other disk ; so make sure that Companion ; or Print Shop disk is not in ; drive. ; ^0 JSR REMOMAST BCS DISKQUIT ; ^1 JSR NOPROT LDA FILENAME BEQ CATALOG ; LDA SAVEGET BEQ >0 ; JSR BLOADTY JMP >3 ; ^0 JSR SAVESUPP BNE >4 JSR VERIFYTY BEQ >1 CMP #6 BEQ >2 BNE >4 ^1 LDA #99 JSR ERROR CMP #CR BNE >5 JSR CLS1 JSR DELETETY BNE >4 ^2 JSR BSAVETY ; ^3 CLC BEQ DISKQUIT ^4 JSR ERROR ^5 JMP DISKLOOP ; DISKQUIT BCC >0 LDA SAVEGET BNE >0 SEC ROR INITFLAG JMP DISKLOOP ^0 RTS ; DISKERR LDA #8 JSR ERROR JMP DISKLOOP ; ; CATALOG disk ; CATALOG JSR CLS2 JSR PRINT .DA #PRLOC,140,#20,#PRCNTR BYT 'LIST OF ' .DA #PRSTR,TYPETEXT BYT 'S ON THIS' .DA #PRSTR,TXTSD BYT ':',CR,0 LDA #$FF STA CATPAGE STA CATCOUNT JSR CATINIT BCS DISKERR ; ^0 INC CATCOUNT JSR CATFILE BCS DISKERR BNE CATDONE STA CATFLMOD STY CATFLMOD+1 INC CATPAGE LDA CATPAGE EOR #15 BNE >1 STA CATPAGE JSR ANYKEY CMP #ESC BEQ CATDONE2 JSR CLS2 ; ^1 LDA #00 CATPAGE = *-1 ASL ASL ASL ADC #36 STA CATYMOD JSR PRINT .DA #PRLOC,64 CATYMOD HEX FF .DA #PRSTR CATFLMOD ADR $FFFF BYT CR,0 JMP <0 ; CATDONE LDA #00 BNE >0 JSR PRINT .DA #PRLOC,140,#64,#PRCNTR BYT 'NONE',CR,0 ; ^0 JSR ANYKEY CATDONE2 JMP DISKLOOP ; CATCOUNT = CATDONE+1 ; ; Input file name ; INPUTNAM LDA #0 STA FILENAME JSR INPUT ADR FILENAME BYT MAXFLEN ADR 27 BYT 140 RTS ; ; Filename that user enters ; FILENAME DFS MAXFLEN+1,0 ;----------- ; ; DOS commands: ; 0=VERIFY ; 2=BLOAD ; 4=BSAVE ; 6=DELETE ; DOSCOMM LDA DOSCOMM2,X STA TMPLO LDA DOSCOMM2+1,X STA TMPHI LDY #0 ^0 LDA (TMPLO),Y BEQ >1 JSR COUT INY BNE <0 ^1 RTS ; DOSCOMM2 ADR >0 ADR >1 ADR >2 ADR >3 ; ^0 BYT 13,4,'VERIFY',0 ^1 BYT 13,4,'BLOAD',0 ^2 BYT 13,4,'BSAVE',0 ^3 BYT 13,4,'DEL',0 ;----------- ; ; JSR BLOAD ; BYT 'FILENAME',0 ; VERIFY LDX #0 HEX 2C BLOAD LDX #2 HEX 2C BSAVE LDX #4 HEX 2C DELETE LDX #6 ; STX TMPLO JSR GETINIT LDA #1 CHK4MOD = *-1 JSR CHK4DISK BCS >2 LDX TMPLO JSR DOSCOMM ; ^1 JSR GETBYTE BEQ DOSCR JSR COUT JMP <1 ; ^2 JSR GETBYTE BNE <2 LDA #8 RTS ; ; DOS stuff for TYPE file ; VERIFYTY LDX #0 HEX 2C BLOADTY LDX #2 HEX 2C BSAVETY LDX #4 HEX 2C DELETETY LDX #6 STX TMP0 JSR DOSCOMM ; ; Print the filename with prefix ; PRINFILE LDY #0 ^0 LDA FLPREFIX,Y BEQ >1 JSR COUT INY BNE <0 ; ^1 LDY #0 ^2 LDA FILENAME,Y BEQ >3 JSR COUT INY BNE <2 ; ; Print params: ; ^3 LDA TMP0 BEQ >0 CMP #6 BEQ >0 ; LDA #'A' LDX FLSTART LDY FLSTART+1 JSR >1 LDA TMP0 CMP #2 BEQ >0 ; LDA #'L' LDX FLLENGTH LDY FLLENGTH+1 JSR >1 ^0 JMP DOSCR ; ^1 PHA LDA #',' JSR COUT PLA JSR COUT LDA #'$' JSR COUT JMP $F940 ; DOSCR LDX #$4C LDY #DOSERROR LDA /DOSERROR STX $A6D8 STY $A6D9 STA $A6DA TSX STX DOSERROR+1 JSR CROUT LDA #0 RTS ; ; ERROR! fix stack pointer, ; close file, reset I/O hooks ; DOSERROR LDX #00 TXS JSR $A316 JSR $3EA LDA $AA5C RTS ; ; Error handling subroutine ; ERROR STA >2+1 JSR CLS1 JSR MUSIC JSR PRINT .DA #PRLOC,140,#64,#0 LDX #$FD ^1 INX INX INX LDA ERRORADR,X BEQ >3 ^2 CMP #00 BNE <1 ; ^3 LDA ERRORADR+1,X STA TMPLO LDA ERRORADR+2,X STA TMPHI JMP (TMPLO) ; ERRORADR .DA #4,ERROR4 .DA #6,ERROR6 .DA #9,ERROR9 .DA #10,ERROR10 .DA #99,ERROR99 .DA #0,ERROR8 ; NOPROT LDA #0 HEX 2C PROT LDA #2 STA $B00D RTS ; ERROR4 JSR PRINT BYT PRCNTR .DA #PRSTR,TXTD BYT ' IS WRITE PROTECTED',CR,0 JMP ANYKEY ; ERROR6 JSR PRINT .DA #PRLOC,140,#48 BYT PRCNTR BYT 'CANNOT FIND',CR,CR .DA #PRSTR,FILENAME,#CR,#CR BYT 'ON THIS' .DA #PRSTR,TXTSD,#CR,#0 JMP ANYKEY ; ERROR8 JSR PRINT BYT PRCNTR .DA #PRSTR,TXTD BYT ' ERROR OCCURRED',CR,0 JMP ANYKEY ; ERROR9 JSR PRINT BYT PRCNTR .DA #PRSTR,TXTD BYT ' IS FULL',CR,0 JMP ANYKEY ; ERROR10 JSR PRINT BYT PRCNTR BYT 'FILE IS LOCKED',CR,0 JMP ANYKEY ; ERROR99 JSR PRINT BYT PRCNTR .DA #PRLOC,140,#56 BYT 'WARNING:',CR,CR,CR BYT 'THE OLD CONTENTS OF',CR,CR .DA #PRSTR,FILENAME,#CR,#CR BYT 'WILL BE LOST WHEN',CR BYT 'THIS FILE IS SAVED',CR BYT PRVTAB,167 .DA #PRSTR,TXTPRET BYT ' TO SAVE',CR BYT 'OR',CR,0 JMP GETKEY ;----------- ; ; Read CATALOG routine ; ; JSR CATINIT to initialize ; ; JSR CATFILE to get a filename ; ; SEC=disk error ; ; CLC=no disk error: ; BNE=no more files ; BEQ=file found: ; A=lo byte\ ; Y=hi byte--address of text ; CATINIT LDA DATADRIV JSR CHK4DISK BCS CATEND2 LDA #0 STA TMP2 LDY #17 JMP READSECT ; CATEND LDX #$FF CLC CATEND2 RTS ; CATFILE LDA TMPLO CLC ADC #$23 STA TMPLO BCC >0 INC TMPHI ^0 DEC TMP2 BPL >1 ; LDY SECTBUFF+1 LDA SECTBUFF+2 BEQ CATEND JSR READSECT BCS CATEND2 LDY #SECTBUFF-24 LDA /SECTBUFF-24 STY TMPLO STA TMPHI LDA #7 STA TMP2 BNE CATFILE ; ; Check filename ; ; Deleted? end of cat? ; ^1 LDY #0 LDA (TMPLO),Y BMI CATFILE BEQ CATEND ; ; Binary file? ; LDY #2 LDA (TMPLO),Y AND #$7F CMP #4 BNE CATFILE ; ; Correct length? ; LDA TYPELEN BEQ >2 LDY #$21 LDA (TMPLO),Y ; ; Accept 33 or 34 for hires pictures ; CMP #33 BNE *+4 LDA #34 CMP TYPELEN BNE CATFILE ; ^2 LDY #2 LDX #$FF ^3 INX INY LDA FLPREFIX,X BEQ >4 ORA #$80 CMP (TMPLO),Y BEQ <3 BNE CATFILE ; ^4 STY CATFILE2+1 ; LDY #$20 ^5 LDA (TMPLO),Y EOR #$A0 BNE >6 STA (TMPLO),Y DEY BPL <5 ; ^6 LDA (TMPLO),Y AND #$7F STA (TMPLO),Y DEY BNE <6 ; LDA TMPLO LDY TMPHI CLC CATFILE2 ADC #8 BCC >7 INY ^7 CLC LDX #0 RTS ;----------- IOB = $B7E8 ; ; Read a sector ; A=sector, Y=track ; X=command ; READSECT LDX #1 STA IOB+5 LDA DATADRIV STA IOB+2 READSCT2 STY IOB+4 LDA #0 STA IOB+3 LDY #SECTBUFF LDA /SECTBUFF STY IOB+8 STA IOB+9 STX IOB+12 JSR $3E3 JMP $3D9 ;----------- ; ; Position head over track 17 ; and check for a disk. ; CHK4DISK STA $AA68 STA IOB+2 ; LDY $BD00 CPY #$4C CLC BEQ >3 CMP #1 BEQ >0 ; ; If drive 2, then if first time, ; read data. If error, then recal ; and try again. ; LDX IOB+1 JSR $BE8E LDA $4F8,Y BPL >0 LDA #18*2 STA $4F8,Y JSR >0 BCC >3 JSR $BE8E LDA #$A0 STA $4F8,Y ; ^0 LDY #17 LDX #0 JSR READSCT2 LDX IOB+1 LDA $C089,X LDA #32 STA TMP0 ; ^1 JSR $B944 BCC >2 DEC TMP0 BNE <1 ^2 LDA $C088,X ^3 RTS ;----------- ; ; Wait for user to insert the ; Print Shop, Companion, ; or data disk. ; WAITTBL1 BYT PSTEXT BYT CTEXT WAITTBL2 HBY PSTEXT HBY CTEXT WAITTBL3 BYT 1,3 ;--- ; ; Wait for PS disk ; WAITPSD LDX #0 TXA HEX 2C ;--- ; ; Wait for Comp disk, side given ; in A: 0=either side ; 1=side A ; 2=side B ; WAITCD LDX #1 ; WAITDISK STA WAITSIDE TAY BEQ >0 ORA #'@' STA TXTSIDE+6 LDY #' ' ^0 STY TXTSIDE ; LDA WAITTBL1,X STA WAITANY1+1 LDA WAITTBL2,X STA WAITANY1+2 LDA WAITTBL3,X STA >2+1 ; JSR PROT BCS >4 ; ^1 LDA #1 JSR READVTOC BCS >3 ^2 CMP #00 BNE >3 ; ; Is a specific side requested? ; LDA #00 WAITSIDE = *-1 BEQ WAITNOPE CMP SECTBUFF+$FE BNE >3 WAITNOPE CLC RTS ; ^3 JSR MUSIC ^4 JSR CLS3 LDY #' ' LDA DATADRIV LSR BEQ *+4 LDY #'1' STY >5+9 JSR PRINT BYT PRCNTR .DA #PRLOC,140,#80 BYT 'PLEASE PLACE' .DA #PRSTR,TXTSIDE BYT CR BYT 'THE "' WAITANY1 .DA #PRSTR,$FFFF BYT '"' .DA #PRSTR,TXTSD,#CR ^5 BYT 'IN DRIVE 1',CR,0 JSR ANYKEY PHA JSR CLS3 PLA CMP #ESC BNE <1 ^9 RTS ; TXTSIDE BYT ' SIDE A OF',0 ;----------- ; ; Enter with A=drive parm ; ; Read in VTOC sector ; Return with A=ID byte for that ; disk. 1:Print Shop side 1 ; 3:Companion disk ; ; SEC:error ; READVTOC JSR CHK4DISK BCS >0 LDX #1 LDY #17 LDA #0 STA IOB+5 JSR READSCT2 ^0 LDA SECTBUFF+$FF RTS ;----------- ; ; Display message if printer ; SETUP was never run. ; CHKPRINT STA >1+0 LDA $95F7 BEQ >0 CLC RTS ; ^0 JSR MUSIC JSR PRINT BYT PRCNTR,PRCSPACE,1 BYT '"SETUP" WAS NEVER RUN ' ^1 BYT '- ' .DA #PRSTR,TXTPAK,#CR BRK JSR GETKEY SEC RTS ;----------- ; ; Check to see if the SUPP file ; is on the disk. ; SAVESUPP LDA MENULAST EOR #CALENDAR BEQ >9 LDA DATADRIV STA CHK4MOD JSR VERIFY BYT '[CD]',0 BEQ >9 JSR SWAP6300 JSR BSAVE BYT '[CD],A$6300,L$800',0 PHA JSR SWAP6300 PLA ^9 PHA LDA #1 STA CHK4MOD PLA RTS ; SWAP6300 LDX #8 LDY #0 LDA #$63 STY TMP0 STA TMP1 LDA #$10 STY TMP2 STA TMP3 ^0 LDA (TMP0),Y PHA LDA (TMP2),Y STA (TMP0),Y PLA STA (TMP2),Y INY BNE <0 INC TMP1 INC TMP3 DEX BNE <0 RTS ;----------- ; ; ; ICL "S:SUBPAK3"