460 lines
7.4 KiB
Plaintext
460 lines
7.4 KiB
Plaintext
;
|
|
; S:FOEDIT5
|
|
;
|
|
; Print the entire font
|
|
;
|
|
;-----------
|
|
;
|
|
; PRCOMS locations
|
|
;
|
|
CRLF = $1803
|
|
SENDGC = $1806
|
|
GCOUT = $1809
|
|
MTHINK = $180C
|
|
MPRINT = $180F
|
|
MPAUSE = $1812
|
|
COPYCONT = $1815
|
|
UPLRK = $1816
|
|
;-----------
|
|
;
|
|
; Print buffer constants
|
|
;
|
|
BUFWIDTH = 1024
|
|
;
|
|
BUFMAX = 950
|
|
;
|
|
PBUFFER = $2000
|
|
TBUFFER = $BB00
|
|
;-----------
|
|
;
|
|
; STROUT variables
|
|
;
|
|
STROUT = $8A00
|
|
SPARM = STROUT+3
|
|
;
|
|
; STROUT mod routines
|
|
;
|
|
STINSTAL = STROUT+$0F
|
|
STSCREEN = STROUT+$12
|
|
;
|
|
STRZ EPZ $50
|
|
;
|
|
PIXAD EPZ STRZ
|
|
XCUR EPZ STRZ+2
|
|
WCOUNT EPZ STRZ+4
|
|
BUFFER1 EPZ STRZ+5
|
|
BUFFER2 EPZ STRZ+7
|
|
SDXBYTE EPZ STRZ+9
|
|
DATABYTE EPZ STRZ+10
|
|
BCOUNT EPZ STRZ+11
|
|
BLDBYTE EPZ STRZ+12
|
|
;-----------
|
|
PRZ EPZ $80
|
|
;
|
|
PYEND EPZ PRZ
|
|
PXCOOR EPZ PRZ+1
|
|
PYCOOR EPZ PRZ+2
|
|
PYCOORSV EPZ PRZ+3
|
|
;
|
|
PXCOUNT EPZ PRZ+4
|
|
PYCOUNT EPZ PRZ+5
|
|
;
|
|
PBUILD EPZ PRZ+6
|
|
PYSPACE EPZ PRZ+7
|
|
;
|
|
PBUFSAVL EPZ PRZ+8
|
|
PBUFSAVH EPZ PRZ+9
|
|
PBUFL EPZ PRZ+10
|
|
PBUFH EPZ PRZ+11
|
|
;
|
|
PCHAR EPZ PRZ+12
|
|
PCHAREND EPZ PRZ+13
|
|
PMAXH EPZ PRZ+14
|
|
PSTACK EPZ PRZ+15
|
|
;-----------
|
|
;
|
|
; Print the font
|
|
;
|
|
; First install the font
|
|
;
|
|
PRINFONT JSR PRINT
|
|
BYT PRKERN,1
|
|
BYT PRCSPACE,3
|
|
BYT PRVTAB,0
|
|
BRK
|
|
JSR STINSTAL
|
|
ADR PFOPTION
|
|
ADR PFLINDRW
|
|
HBY FONT2BUF
|
|
;
|
|
JSR TRF1F2
|
|
JSR MTHINK
|
|
;
|
|
TSX
|
|
STX PSTACK
|
|
LDY #'A'
|
|
STY PCHAR
|
|
BNE PRSTART
|
|
;-----------
|
|
;
|
|
; Main loop
|
|
;
|
|
^0 STY PCHAR
|
|
;
|
|
; Find end of buffer
|
|
;
|
|
LDX #$FF
|
|
^1 INX
|
|
LDA TBUFFER,X
|
|
BNE <1
|
|
STX PCHAREND
|
|
;
|
|
; Store char into buffer
|
|
;
|
|
TYA
|
|
STA TBUFFER,X
|
|
LDA #0
|
|
STA TBUFFER+1,X
|
|
;
|
|
; Will the string fit?
|
|
;
|
|
LDA #3
|
|
STA SPARM+1
|
|
JSR UPLRK
|
|
JSR STROUT
|
|
CPY #BUFMAX
|
|
SBC /BUFMAX
|
|
BLT >3
|
|
;
|
|
; String too long, get rid of last
|
|
; character and print the string.
|
|
;
|
|
LDX PCHAREND
|
|
LDA #0
|
|
STA TBUFFER,X
|
|
JSR PRINLINE
|
|
;
|
|
PRSTART JSR MTHINK
|
|
LDY PCHAR
|
|
LDA #0
|
|
STA TBUFFER
|
|
STA PMAXH
|
|
BEQ <0
|
|
;
|
|
^3 LDY PCHAR
|
|
LDA FONT2H-$20,Y
|
|
CMP PMAXH
|
|
BLT >4
|
|
STA PMAXH
|
|
^4 INY
|
|
CPY #'@'
|
|
BEQ >5
|
|
CPY #'Z'+1
|
|
BLT <0
|
|
LDY #'!'
|
|
BNE <0
|
|
;
|
|
; Now print
|
|
;
|
|
^5 LDA PMAXH
|
|
BEQ PFABORT
|
|
JSR PRINLINE
|
|
CLC
|
|
;
|
|
PFABORT LDX PSTACK
|
|
TXS
|
|
PHP
|
|
JSR STSCREEN
|
|
LDA #0
|
|
STA SPARM+11
|
|
JSR CLRPBUF2
|
|
PLP
|
|
BCS >0
|
|
LDX #12
|
|
LDY #3
|
|
JSR CRLF
|
|
^0 SEC
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Clear print buffer
|
|
;
|
|
CLRPBUFF JSR MTHINK
|
|
;
|
|
CLRPBUF2 LDY #0
|
|
LDX #$20
|
|
STY TMP0
|
|
STX TMP1
|
|
TYA
|
|
^0 STA (TMP0),Y
|
|
INY
|
|
BNE <0
|
|
INC TMP1
|
|
DEX
|
|
BNE <0
|
|
RTS
|
|
;-----------
|
|
;
|
|
; SMC for OPTION
|
|
;
|
|
PFOPTION STA SD0MOD0
|
|
STA SD0MOD1
|
|
;
|
|
STX SD1MOD0
|
|
STX SD1MOD1
|
|
;
|
|
STY SD2MOD0
|
|
RTS
|
|
;
|
|
; LINEDRAW routine
|
|
; Buffer is PBUFFER+Y*128.
|
|
;
|
|
LORESL BRK
|
|
LORESH BRK
|
|
;
|
|
PFLINDRW TYA
|
|
LSR
|
|
ORA #$20
|
|
STA BUFFER1+1
|
|
LDA #0
|
|
ROR
|
|
STA BUFFER1
|
|
;
|
|
; Update lores screen?
|
|
;
|
|
LDA LORESL
|
|
ADC WCOUNT
|
|
STA LORESL
|
|
BCC >1
|
|
INC LORESH
|
|
LDA LORESH
|
|
EOR #20
|
|
BNE >1
|
|
STA LORESH
|
|
JSR CHECKESC
|
|
JSR UPLRK
|
|
;
|
|
; Starting X-byte offset = XCUR/8
|
|
;
|
|
^1 LDA XCUR+1
|
|
STA SDXBYTE
|
|
LDA XCUR
|
|
LSR SDXBYTE
|
|
ROR
|
|
LSR SDXBYTE
|
|
ROR
|
|
LSR
|
|
STA SDXBYTE
|
|
;
|
|
; Compensate for bits not to be
|
|
; affected to the left.
|
|
;
|
|
LDA XCUR
|
|
AND #7
|
|
TAX
|
|
LDY #9
|
|
SD1MOD0 SEC
|
|
ROL BLDBYTE
|
|
DEY
|
|
DEX
|
|
BPL SD1MOD0
|
|
;
|
|
LDX #0
|
|
;
|
|
; Do a line of normal size
|
|
;
|
|
PFLINNRM LDA (PIXAD,X)
|
|
EOR #$FF
|
|
SD2MOD0 = *-1
|
|
STA DATABYTE
|
|
INC PIXAD
|
|
BNE *+4
|
|
INC PIXAD+1
|
|
LDX #8
|
|
^0 ASL DATABYTE
|
|
ROL BLDBYTE
|
|
DEY
|
|
BNE >1
|
|
;
|
|
LDY SDXBYTE
|
|
INC SDXBYTE
|
|
LDA BLDBYTE
|
|
SD0MOD0 AND (BUFFER1),Y
|
|
STA (BUFFER1),Y
|
|
LDY #8
|
|
;
|
|
^1 DEC WCOUNT
|
|
BEQ >2
|
|
DEX
|
|
BNE <0
|
|
BEQ PFLINNRM
|
|
;
|
|
^2 CPY #8
|
|
BEQ >3
|
|
LDA BLDBYTE
|
|
SD1MOD1 SEC
|
|
ROL
|
|
DEY
|
|
BNE SD1MOD1
|
|
LDY SDXBYTE
|
|
SD0MOD1 AND (BUFFER1),Y
|
|
STA (BUFFER1),Y
|
|
^3 RTS
|
|
;-----------
|
|
;
|
|
; Print string to buffer, then print.
|
|
;
|
|
PRINLINE JSR CLRPBUFF
|
|
STA SPARM+1
|
|
STA SPARM+2
|
|
STA SPARM+3
|
|
JSR STROUT
|
|
;
|
|
LDA PMAXH
|
|
CLC
|
|
ADC #6
|
|
STA PYEND
|
|
;
|
|
JSR MPRINT
|
|
;
|
|
LDA #0
|
|
;
|
|
; Print single line of buffer
|
|
;
|
|
PFPRLOP1 STA PYCOORSV
|
|
;
|
|
; Calculate buffer address
|
|
;
|
|
LSR
|
|
TAY
|
|
LDA #0
|
|
ROR
|
|
STA PBUFSAVL
|
|
TYA
|
|
ADC /PBUFFER
|
|
STA PBUFSAVH
|
|
;
|
|
; Tell printer how many bytes
|
|
;
|
|
LDX #BUFWIDTH
|
|
LDY /BUFWIDTH
|
|
JSR SENDGC
|
|
;
|
|
LDX #0
|
|
;
|
|
; Output line of data
|
|
;
|
|
PFPRLOP2 STX PXCOOR
|
|
LDX #0
|
|
;
|
|
; Output 8 bytes
|
|
;
|
|
PFPRLOP3 STX PXCOUNT
|
|
LDX PBUFSAVL
|
|
LDA PBUFSAVH
|
|
STX PBUFL
|
|
STA PBUFH
|
|
LDX #0
|
|
STX PBUILD
|
|
LDY PYCOORSV
|
|
;
|
|
; Output 1 byte
|
|
;
|
|
; X=counter, 0-6
|
|
; Y=Y-coordinate
|
|
;
|
|
PFPRLOP4 STX PYCOUNT
|
|
STY PYCOOR
|
|
;
|
|
LDY PXCOOR
|
|
LDA (PBUFL),Y
|
|
LDX PXCOUNT
|
|
AND PBITS8,X
|
|
BEQ >1
|
|
;
|
|
LDY PYCOUNT
|
|
LDA PBITS7,Y
|
|
ORA PBUILD
|
|
STA PBUILD
|
|
;
|
|
^1 LDA PBUFL
|
|
EOR #$80
|
|
STA PBUFL
|
|
BNE *+4
|
|
INC PBUFH
|
|
;
|
|
LDY PYCOOR
|
|
INY
|
|
LDX PYCOUNT
|
|
INX
|
|
CPY PYEND
|
|
BEQ >2
|
|
CPX #7
|
|
BLT PFPRLOP4
|
|
;
|
|
^2 STX PYSPACE
|
|
LDA PBUILD
|
|
JSR GCOUT
|
|
;
|
|
LDX PXCOUNT
|
|
INX
|
|
CPX #8
|
|
BLT PFPRLOP3
|
|
;
|
|
LDX PXCOOR
|
|
INX
|
|
CPX #BUFWIDTH/8
|
|
BLT PFPRLOP2
|
|
;
|
|
LDX PYSPACE
|
|
LDY #1
|
|
JSR CRLF
|
|
;
|
|
JSR CHECKESC
|
|
;
|
|
LDA PYCOORSV
|
|
CLC
|
|
ADC PYSPACE
|
|
CMP PYEND
|
|
CLC
|
|
BEQ >9
|
|
JMP PFPRLOP1
|
|
;
|
|
; Set spacing back to 6 characters
|
|
; per inch (12/72)
|
|
;
|
|
^9 RTS
|
|
;
|
|
; Bit lookup tables
|
|
;
|
|
PBITS8 HEX 80
|
|
PBITS7 HEX 40201008040201
|
|
;-----------
|
|
;
|
|
; Check for <ESC>, if yes then
|
|
; show pausing message and allow
|
|
; another <ESC> to abort.
|
|
;
|
|
CHECKESC JSR POLEKEY
|
|
CMP #ESC
|
|
BNE <9
|
|
JSR DEVICEON
|
|
JSR MPAUSE
|
|
PHP
|
|
JSR DEVICEOF
|
|
PLP
|
|
BCC <9
|
|
JMP PFABORT
|
|
;-----------
|
|
ACODE = *-TAILORG
|
|
DPH
|
|
;-----------
|
|
;
|
|
;
|
|
;
|
|
USR "FOEDIT,S4",ORGLOAD
|
|
LST
|
|
MAINLEN = MCODE
|
|
ALTLEN = ACODE
|
|
ICL "S:COMMONEDIT"
|