home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
genie-commodore-file-library
/
MusGraph
/
DOODLE-PSA.SFX
/
doodle-psa.src
< prev
next >
Wrap
Text File
|
1990-02-12
|
4KB
|
286 lines
;
;DOODLE TO PRINT SHOP ML ROUTINE
;
*=$C000
;
TEMPA=$FB
TEMPB=TEMPA+2
BYTE=$F7
PSDATA=$F9
CHROUT=$FFD2
SETLFS=$FFDA
SETNAM=$FFBD
SAVE =$FFD8
FILLEN=828
FILNAM=829
;
BASE=24576 ;START OF DOODLE DATA
PS=22528 ;START OF P.S. DATA
EDOFPS=23103 ;END OF P.S. DATA
HMAX=320 ;CONSTANT VALUE OF 360
;
TABSIZ=$C200 ;VARIABLE STORAGE
XPOS=TABSIZ+2 ;TABLE
YPOS=XPOS+2
CHAR=YPOS+1
ROW=CHAR+1
LINE=ROW+1
MPRL=LINE+1
MPRH=MPRL+1
MPDL=MPRH+1
MPDH=MPDL+1
PRODL=MPDH+1
PRODH=PRODL+1
OFFSET=PRODH+1
BIIT=OFFSET+1
MASK1=BIIT+1
MASK2=MASK1+1
CNTRB=MASK2+1
;
JMP MAIN ;GOTO MAIN ROUTINE
;
; 16 BIT MULTIPLICATION
;
MULT16 LDA #0
STA PRODL
STA PRODH
LDX #17
CLC
MULT ROR PRODH
ROR PRODL
ROR MPRH
ROR MPRL
BCC CTDOWN
CLC
LDA MPDL
ADC PRODL
STA PRODL
LDA MPDH
ADC PRODH
STA PRODH
CTDOWN DEX
BNE MULT
RTS
;
; CALCULATE MASK VALUES
;
; EQUIV TO LINES 820 TO 840
;
LETOFF LDA XPOS ;CALCULATE OFFSET
AND #7
STA OFFSET
EOR #7 ;CALCULATE BIT
STA BIIT
LDA #0 ;CLEAR MASKS
STA MASK1
STA MASK2
LDX #0 ;IF OFFSET IS
CPX OFFSET ;ZERO THEN DONT
BEQ CONT ;CALCULATE MASKS
LDA #1
MAK SEC
ROL A
INX
CPX BIIT
BNE MAK
STA MASK1
EOR #255
STA MASK2
CONT RTS
;
; EQUIVELENT TO LINE 870 IN PRG.
; ROW = INT(Y/8)
;
LETROW LDA YPOS
LSR A
LSR A
LSR A
STA ROW
;
; CHAR = INT(X/8)
;
LDA XPOS
LSR A
LSR A
LSR A
STA CHAR
;
; LINE = Y AND 7
;
LDA YPOS
AND #7
STA LINE
;
;LINE 880 IN BASIC PROGRAM
;
; BYTE=BASE+ROW*320+CHAR*8+LINE
;
STX TABSIZ ;KEEP X VALUE
LDA ROW ;SAFE
STA MPRL
LDA #0
STA MPRH
LDA #<HMAX
STA MPDL
LDA #>HMAX
STA MPDH
JSR MULT16
LDA MPRL
STA TEMPA
LDA MPRL+1
STA TEMPA+1
;
; ADD RESULT TO BASE
;
CLC
LDA #<BASE
ADC TEMPA
STA TEMPA
LDA #>BASE
ADC TEMPA+1
STA TEMPA+1
;
; MULT CHAR*8
;
LDA #8
STA MPRL
LDA #0
STA MPRH
LDA CHAR
STA MPDL
LDA #0
STA MPDH
JSR MULT16
LDA MPRL
STA TEMPB
LDA MPRH
STA TEMPB+1
;
; ADD LINE
;
CLC
LDA TEMPB
ADC LINE
STA TEMPB
LDA TEMPB+1
ADC #0
STA TEMPB+1
;
; BYTE = TEMPA +TEMPB
;
CLC
LDA TEMPA
ADC TEMPB
STA BYTE
LDA TEMPA+1
ADC TEMPB+1
STA BYTE+1
LDX TABSIZ ;RETRIEV X VALUE
RTS
;
; PEEK(BYTE+B*8)
;
LTPEEK STY TABSIZ+1 ;STORE Y VALUE
TYA ;FOR SAFTY
CLC
ASL A
ASL A
ASL A
TAY
RTS
;
; MAIN CONVERT ROUTINE
;
MAIN LDA #<PS
STA PSDATA
LDA #>PS
STA PSDATA+1
JSR LETOFF ;CALCULATE MASKS
LDX #52
LOOPA JSR LETROW ;LNS 870-880
LDA #'.
JSR CHROUT
LDA #11 ;INITIALIZE
STA CNTRB ;'B' VARIABLE
LDY #10
LOOPB LDA #0 ;IF OFFSET>0 THEN
CMP OFFSET ;BRANCH TO BIT
BCC MANIP ;MANIP ROUTINE
;LINE 890
JSR LTPEEK
LDA (BYTE),Y ;PEEK BYTE
LDY TABSIZ+1
STA (PSDATA),Y ;POKE TO PS
;
;
;
DONE DEY
STY TABSIZ+1
DEC CNTRB
BNE LOOPB
CLC ;INCREMENT PS DATA
LDA #11 ;ADDRESS BY 11
ADC PSDATA
STA PSDATA
LDA #0
ADC PSDATA+1
STA PSDATA+1
INC YPOS ;LINE 940 IN PRG.
DEX
BNE LOOPA ;IFA=0 THEN EXIT
RTS
;
; MANIPULATION ROUTINE
;
MANIP JSR LTPEEK ;
LDA (BYTE),Y ;LOAD LOW BYTE
AND MASK1 ;REMOVE BITS
STA TEMPA
TYA
ADC #8
TAY
LDA (BYTE),Y ;LOAD HIGH BYTE
AND MASK2 ;REMOVE BITS
STA TEMPA+1
LDY TABSIZ+1
STX TEMPB+1 ;STORE X VALUE
LDX OFFSET
LDA TEMPA
LOOPC ASL A ;SHIFT LOW BYTE
DEX ;TO LEFT.
BNE LOOPC
STA TEMPA ;STORE LOW BYTE
LDX BIIT
INX
LDA TEMPA+1
LOOPD LSR A ;SHIFT HIGH BYTE
DEX ;TO RIGHT
BNE LOOPD
ADC TEMPA ;ADD LOW TO HIGH
STA (PSDATA),Y ;STORE NEW BYTE
LDX TEMPB+1 ;RETRIEV X VALUE
JMP DONE
;
; SAVE PRINT SHOP DATA
;
LDA #8 ;OPEN 8,8,8
TAX
TAY
JSR SETLFS
;
LDA FILLEN ;LENGTH OF FILENAME
LDX #<FILNAM ;LOCATION OF
LDY #>FILNAM ;FILENAME
JSR SETNAM
;
LDA #<PS ;PUT STARTING LOC.
STA TEMPA ;OF SAVING DATA IN
LDA #>PS ;ZERO PAGE POINTER
STA TEMPA+1
LDX #<EDOFPS ;SET ENDING ADDRESS
LDY #>EDOFPS ;OF DATA TO BE SAVED
LDA #TEMPA ;LOAD START POINTER
JSR SAVE
RTS
.END