PrintShopCompanion-Apple-II/PSC Source Disk 1 - System .../S_EDIT1.txt

593 lines
10 KiB
Plaintext

TTL "S:EDIT"
; S:EDIT1
NOG
ORG = $5000
OBJ = $800
;
; 02/27/85
; 07/31/85 last mod
; added support for FONTS
;
; Editor for use with
; The Print Shop Companion Disk
;
; For FONTS and GRAPHICS
;
; by Roland Gustafsson
;
DAT EPZ $D0
;
XCOOR EPZ DAT
YCOOR EPZ DAT+1
BUFLO EPZ DAT+2
BUFHI EPZ DAT+3
TBUFLO EPZ DAT+4
TBUFHI EPZ DAT+5
XMAX EPZ DAT+6
YMAX EPZ DAT+7
OLDXCOOR EPZ DAT+8
OLDYCOOR EPZ DAT+9
X1 EPZ DAT+10
Y1 EPZ DAT+11
X2 EPZ DAT+12
Y2 EPZ DAT+13
BUTTON EPZ DAT+14
CNSTRAIN EPZ DAT+15
;
PTMP0 EPZ DAT+16
PTMP1 EPZ DAT+17
;
; Temporary z-page for use within
; subroutines
;
PLOTX EPZ $4D
FLASHLO EPZ $4E
FLASHHI EPZ $4F
;
TMP0 EPZ $F0
TMP1 EPZ $F1
TMP2 EPZ $F2
TMP3 EPZ $F3
TMP4 EPZ $F4
TMP5 EPZ $F5
HIRES1 EPZ $F6
HIRES2 EPZ $F8
HIRES3 EPZ $FA
;
TMPLO EPZ TMP0
TMPHI EPZ TMP1
;
; Absolute references:
;
EDITBUFF = $7800
UNDOBUFF = EDITBUFF+$240
TEMPBUFF = UNDOBUFF+$240
;
XSTACK = $8300
YSTACK = $8400
;
; Subroutine package entry points
;
SP = $E000
;
PRINT = SP
CLSCREEN = SP+3
WITEBORD = SP+6
ESCBACK = SP+9
PICDRAW = SP+12
;
DEVICENW = SP+15
DEVICEON = SP+18
DEVICEOF = SP+21
DEVICERD = SP+24
DEVICEST = SP+27
SCALING = SP+30
;
POLEBTN = SP+31
POLEKEY = SP+34
GETKEY = SP+37
SELECT = SP+40
;
SETTYPE = SP+43
GETFILE = SP+46
SAVEFILE = SP+49
TYPELEN = SP+52
FLSTART = SP+53
FLLENGTH = SP+55
BLOAD = SP+57
BSAVE = SP+60
DOSCR = SP+63
ERROR = SP+66
;
MUSIC = SP+69
FLSHINIT = SP+72
JMPVECTS = SP+75
LINES = SP+78
PARSE = SP+81
SHOWAROW = SP+84
NUMBER = SP+87
BOOP = SP+102
;
WITE = $FF
GRAY = $AA
BLAK = $00
;
PRNORM = 1
PRINVR = 2
PRLEFT = 3
PRRITE = 4
PRCNTR = 5
PRLOC = 6
PRSMAL = 7
PRBIG = 8
PRSTR = 9
PRSPC = 10
PRHTAB = 11
PRVTAB = 12
CR = 13
NOCR = 14
RTOSBLAK = 15
RTOSWITE = 16
RTOSANY = 17
PRCSPACE = 18
;
ESC = $1B
;
; SYSLIB tables
;
SYSFONT = $8500
FLIPPER = $9080
YBASELO = $91C0
YBASEHI = $9100
XBYTEOFF = $9280
;
FONTDATA = $8500
;
FONTWITH = FONTDATA
FONTHITE = FONTDATA+$3B
FONTADRL = FONTDATA+$76
FONTADRH = FONTDATA+$B1
;
WAIT = $FCA8
;
; Variables:
;
GRAFXOFF = 0
GRAFYOFF = 23
;
FONTXOFF = 1
FONTYOFF = 38
;
REFMOVER = $4003
;
FONTW = 48
FONTH = 38
;
;-----------
ORG ORG
OBJ OBJ
;-----------
JMP EDITINIT
JMP SHOWBOXS
JMP SHOWGR
JMP CHKBUFF
JMP CLRBUFF
JMP ORBUFF
JMP BUFFSAVE
JMP BASECALC
JMP SETPLOTX
JMP SETBIT
JMP CLRBIT
JMP PRINTGR
JMP DRAWTEXT
JMP DOSHAPE
JMP EDITLOOP
JMP FONTMODS
FONTRX1 HEX 80
FONTRY1 HEX 80
FONTRY2 HEX 80
REFLINES HEX 80
JMP RESETBT1
;-----------
;
; Initialize XMAX & YMAX
; Center the cursor and update screen
;
EDITINIT STX XMAX
STY YMAX
GRCENTER LDA XMAX
LSR
STA XCOOR
DEC XCOOR
LDA YMAX
LSR
STA YCOOR
DEC YCOOR
RTS
;-----------
;
; Show fill pattern and mirror status
;
SHOWBOXS LDY #FILLPLOC-1
JSR SHOWBOX
LDY #MIRRPLOC-1
JSR SHOWBOX
JSR SHOWFILL
JSR SHOWMIRR
JMP SHOWLOCK
;-----------
;
; Check EDITBUFF for all zeroes
;
CHKBUFF LDY #0
TYA
^0 ORA EDITBUFF,Y
ORA EDITBUFF+$100,Y
INY
BNE <0
^1 ORA EDITBUFF+$200,Y
INY
CPY #60
BLT <1
TAY
RTS
;-----------
;
; Clear EDITBUFF
;
CLRBUFF LDY #0
;
; Clear buffer
;
BUFFCLR LDA BUFFERS,Y
STA TMPLO
LDA BUFFERS+1,Y
STA TMPHI
LDY #0
TYA
LDX #2
^0 STA (TMPLO),Y
INY
BNE <0
INC TMPHI
DEX
BNE <0
^1 STA (TMPLO),Y
INY
CPY #60
BLT <1
RTS
;
BUFFERS ADR EDITBUFF
ADR UNDOBUFF
ADR TEMPBUFF
;-----------
;
; OR UNDOBUFF into EDITBUFF
;
ORBUFF LDY #0
^0 LDA UNDOBUFF,Y
ORA EDITBUFF,Y
STA EDITBUFF,Y
LDA UNDOBUFF+$100,Y
ORA EDITBUFF+$100,Y
STA EDITBUFF+$100,Y
INY
BNE <0
^1 LDA UNDOBUFF+$200,Y
ORA EDITBUFF+$200,Y
STA EDITBUFF+$200,Y
INY
CPY #60
BLT <1
RTS
;-----------
;
; Move EDIT buffer to UNDO buffer
;
BUFFSAVE LDY #0
LDX #2
;
; Move buffer Y->X
;
BUFFMOVE LDA BUFFERS,Y
STA TMP0
LDA BUFFERS+1,Y
STA TMP1
LDA BUFFERS,X
STA TMP2
LDA BUFFERS+1,X
STA TMP3
LDX #2
LDY #0
^0 LDA (TMP0),Y
STA (TMP2),Y
INY
BNE <0
INC TMP1
INC TMP3
DEX
BNE <0
;
^1 LDA (TMP0),Y
STA (TMP2),Y
INY
CPY #60
BLT <1
RTS
;-----------
;
; Calculate pointer into buffer
; 3 entry points:
;
; BASECLCT=point into TEMPBUFF
; BASECLCU=point into UNDOBUFF
;
; BASECALC=point only EDITBUFF
;
BASECLCU LDA #UNDOBUFF-EDITBUFF
LDX /UNDOBUFF-EDITBUFF
BNE >0
;
BASECLCT LDA #TEMPBUFF-EDITBUFF
LDX /TEMPBUFF-EDITBUFF
;
^0 LDY YCOOR
CLC
ADC EDYBASEL,Y
STA TBUFLO
TXA
ADC EDYBASEH,Y
STA TBUFHI
;
BASECALC LDY YCOOR
LDA EDYBASEL,Y
STA BUFLO
LDA EDYBASEH,Y
STA BUFHI
;
; Get mask (in A) and offset (in Y)
;
GETXMASK LDA XCOOR
LSR
LSR
LSR
TAY
LDA XCOOR
AND #7
TAX
LDA XCOORMSK,X
RTS
;
; X-coor mask
;
XCOORMSK BYT %10000000
BYT %01000000
BYT %00100000
BYT %00010000
BYT %00001000
BYT %00000100
BYT %00000010
BYT %00000001
;-----------
;
; Given XCOOR,YCOOR set
; PLOT routine to opposite
; of whatever is in this
; coordinate.
;
SETPLOTX JSR BASECALC
LDX #PLSET
AND (BUFLO),Y
BEQ *+4
LDX #PLCLR
SETPLTX2 STX PLOTX
;
; Set PLOT routine, given X
;
PLSET = 0
PLCLR = 2
PLEOR = 4
PLUNDO = 6
PLTEMP = 8
;
SETPLOT LDY SETPLOT2,X
LDA SETPLOT2+1,X
STY PLOT+1
STA PLOT+2
RTS
;
SETPLOT2 ADR SETBIT
ADR CLRBIT
ADR EORBIT
ADR UNDOBIT
ADR TEMPBIT
;
PLOT JMP SETBIT
;
; If FONT editor, then check
; for reference lines.
;
FONTREF BIT REFLINES
BPL >0
LDA XCOOR
CMP FONTRX1
BNE *+5
JSR DOFONTX
;
LDA YCOOR
CMP FONTRY1
BNE *+5
JSR DOFONTY
;
LDA YCOOR
CMP FONTRY2
BEQ DOFONTY
^0 RTS
;
DOFONTX ASL
ADC #1
STA >0+1
JSR LINES
BYT "V",FONTXOFF
^0 BYT GRAY,00,FONTYOFF,3*FONTH
BYT 1
RTS
;
DOFONTY STA TMP0
ASL
ADC TMP0
ADC #FONTYOFF+2
STA >0+2
JSR LINES
BYT "H",FONTXOFF
^0 BYT GRAY,0,00,2*FONTW
BYT 1
RTS
;-----------
;
; Set bit in section and screen
;
SETBIT JSR BASECALC
ORA (BUFLO),Y
STA (BUFLO),Y
SETBIT2 JMP PLOTON
;
; Clear bit in section and screen
;
CLRBIT JSR BASECALC
EOR #$FF
AND (BUFLO),Y
STA (BUFLO),Y
CLRBIT2 JMP PLOTOFF
;
; Invert bit at current location
;
EORBIT JSR BASECALC
STA TMP0
EOR (BUFLO),Y
STA (BUFLO),Y
LDA TMP0
BNE RESETBT2
;
; Restore current location, use
; after BRFLASH
;
RESETBIT JSR RESETBT1
JMP FONTREF
;
RESETBT1 JSR BASECALC
RESETBT2 AND (BUFLO),Y
BEQ CLRBIT2
BNE SETBIT2
;-----------
;
; Move bit TEMPBUFF-->EDITBUFF
;
TEMPBIT JSR BASECLCT
BNE >0
;
; Move bit UNDOBUFF-->EDITBUFF
;
UNDOBIT JSR BASECLCU
^0 STA TMP0
AND (TBUFLO),Y
STA TMP1
LDA TMP0
EOR #$FF
AND (BUFLO),Y
ORA TMP1
STA (BUFLO),Y
LDA TMP1
JMP RESETBT2
;-----------
;
; Do PLOT routine with mirrors
;
MRPLOT LDX XCOOR
LDY YCOOR
STX MRXSAVE
STY MRYSAVE
JSR PLOT
LDA CURRMIRR
BEQ MRDOBITR
CMP #2
BEQ >2
CMP #3
BEQ >3
;
; Mirror both axis
;
^1 JSR >3
JSR >2
LDA YMAX
SEC
SBC YCOOR
STA YCOOR
LDA XMAX
SEC
SBC XCOOR
STA XCOOR
JMP MRDOBIT
;
; Mirror vertical
;
^2 LDA YMAX
SEC
SBC YCOOR
STA YCOOR
JMP MRDOBIT
;
; Mirror horizontal
;
^3 LDA XMAX
SEC
SBC XCOOR
STA XCOOR
;
; Do one bit and restore X,Y
;
MRDOBIT LDA XCOOR
CMP XMAX
BGE >0
LDA YCOOR
CMP YMAX
BGE >0
JSR PLOT
^0 LDX #00
MRXSAVE = *-1
LDY #00
MRYSAVE = *-1
STX XCOOR
STY YCOOR
MRDOBITR RTS
;-----------
;
; Ybase for EDITBUFF
;
EDYBASEL HEX 000B16212C37424D58636E79848F9AA5
HEX B0BBC6D1DCE7F2FD08131E29343F4A55
HEX 606B76818C97A2ADB8C3CED9E4EFFA05
HEX 101B2631
;
EDYBASEH HEX 78787878787878787878787878787878
HEX 78787878787878787979797979797979
HEX 7979797979797979797979797979797A
HEX 7A7A7A7A
;-----------
;
; Font modifications
;
FONTMODS LDX #FONTXOFF
LDY #FONTYOFF
STX XOFFSET
STY YOFFSET
LDA #$20
STA PLOT
RTS
;-----------
;
;
;
ICL "S:EDIT2"