664 lines
11 KiB
Plaintext
664 lines
11 KiB
Plaintext
NLS
|
|
TTL "S:SUPPGET"
|
|
NOG
|
|
ORG = $4000
|
|
;
|
|
SWAPRAM = $2C0
|
|
;
|
|
; 02/10/85
|
|
; 09/09/85 last mod
|
|
;
|
|
; Routine that sits in RAMcard and
|
|
; moves itself down to $4000 when
|
|
; it is used.
|
|
;
|
|
; Constants:
|
|
;
|
|
MAXFLEN = 15
|
|
;
|
|
ESC = 27
|
|
;
|
|
; Zero page
|
|
;
|
|
PRLO EPZ $3A
|
|
PRHI EPZ $3B
|
|
LOADLO EPZ $FA
|
|
LOADHI EPZ $FB
|
|
TMP0 EPZ $FC
|
|
TMP1 EPZ $FD
|
|
TMP2 EPZ $FE
|
|
TMP3 EPZ $FF
|
|
;
|
|
TMPLO EPZ TMP0
|
|
TMPHI EPZ TMP1
|
|
;
|
|
; Existing routines:
|
|
;
|
|
DATADRIV = $95F4
|
|
MENUSEL = $95F5
|
|
;
|
|
SOUND = $6FCC
|
|
;
|
|
BLOAD = $0809
|
|
PSDQ = $7019
|
|
ANYKEY = $8005
|
|
CATERR = $8008
|
|
STRPUT = $8E06
|
|
RTOS = $8E09
|
|
STRGET = $8E12
|
|
STRGETPM = $8E15
|
|
;
|
|
STROUT = $8A00
|
|
SPARM = STROUT+3
|
|
PRINBUFF = $BB00
|
|
;-----------
|
|
ORG ORG
|
|
OBJ $800
|
|
;-----------
|
|
JSR SETTYPE
|
|
;
|
|
; Access normal catalog
|
|
;
|
|
LDA #0
|
|
STA $B00D
|
|
LDA DATADRIV
|
|
STA $AA68
|
|
STA $B7EA
|
|
ORA #'0'
|
|
CMP #'1'
|
|
BNE *+4
|
|
LDA #' '
|
|
STA DRIVENUM
|
|
;
|
|
MAINLOOP JSR CLS
|
|
JSR PRINT
|
|
BYT PRCNTR
|
|
.DA #PRLOC,140,#52
|
|
BYT 'CHOOSE A '
|
|
.DA #PRSTR,TXTTYPE
|
|
BYT ':',CR
|
|
;
|
|
BYT PRLEFT
|
|
.DA #PRLOC,15,#92
|
|
BYT 'PLACE DATA DISK IN DRIVE '
|
|
DRIVENUM BYT '2',CR,CR,CR
|
|
BYT 'TYPE IN NAME OF '
|
|
.DA #PRSTR,TXTTYPE
|
|
BYT ' OR',CR
|
|
BYT 'PRESS <RETURN> FOR '
|
|
.DA #PRSTR,TXTTYPE
|
|
BYT ' LIST',CR,CR
|
|
BYT '>',NOCR,0
|
|
;
|
|
JSR INPUTNAM
|
|
;
|
|
; <ESC> pressed?
|
|
;
|
|
LDA $C000
|
|
STA $83FF
|
|
BCS QUIT
|
|
;
|
|
; Make sure that data disk is
|
|
; in the drive.
|
|
;
|
|
JSR PSDQ
|
|
BNE >0
|
|
;
|
|
JSR CLS
|
|
;
|
|
LDA NAMEBUFF
|
|
BEQ CATALOG
|
|
;
|
|
JSR LOADFILE
|
|
BCC QUIT
|
|
^0 JMP MAINLOOP
|
|
;
|
|
QUIT LDA #1
|
|
STA $AA68
|
|
JSR CLS
|
|
JMP SWAPRAM
|
|
;-----------
|
|
;
|
|
; CATALOG disk
|
|
;
|
|
CATALOG JSR PRINT
|
|
BYT PRCNTR
|
|
.DA #PRLOC,140,#20
|
|
BYT 'LIST OF '
|
|
.DA #PRSTR,TXTTYPE
|
|
BYT 'S ON THIS DISK:',CR,0
|
|
;
|
|
LDA #$FF
|
|
STA CATPAGE
|
|
STA CATCOUNT
|
|
JSR CATINIT
|
|
;
|
|
^0 INC CATCOUNT
|
|
JSR CATFILE
|
|
BCS CATDONE
|
|
STA CATFLMOD
|
|
STY CATFLMOD+1
|
|
INC CATPAGE
|
|
LDA CATPAGE
|
|
EOR #15
|
|
BNE >1
|
|
STA CATPAGE
|
|
JSR ANYKEY
|
|
AND #$7F
|
|
CMP #ESC
|
|
BEQ CATDONE2
|
|
JSR CLS2
|
|
;
|
|
^1 LDA #00
|
|
CATPAGE = *-1
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ADC #36
|
|
STA CATYMOD
|
|
JSR PRINT
|
|
BYT PRLEFT
|
|
.DA #PRLOC,64
|
|
CATYMOD HEX FF
|
|
.DA #PRSTR
|
|
CATFLMOD ADR $FFFF
|
|
BYT CR,0
|
|
JMP <0
|
|
;
|
|
CATDONE LDA #00
|
|
BNE >0
|
|
JSR PRINT
|
|
BYT PRCNTR
|
|
.DA #PRLOC,140,#64
|
|
BYT 'NONE',CR,0
|
|
;
|
|
^0 JSR ANYKEY
|
|
CATDONE2 JMP MAINLOOP
|
|
;
|
|
CATCOUNT = CATDONE+1
|
|
;-----------
|
|
;
|
|
; Input file name
|
|
;
|
|
INPUTNAM LDX #INPUTNM2
|
|
LDY /INPUTNM2
|
|
LDA #MAXFLEN
|
|
STX STRGETPM
|
|
STY STRGETPM+1
|
|
STA STRGETPM+2
|
|
LDA #0
|
|
STA NAMEBUFF
|
|
JMP STRGET
|
|
;
|
|
INPUTNM2 HEX 0200
|
|
ADR 27
|
|
ADR 140
|
|
HEX 000200
|
|
ADR NAMEBUFF
|
|
HEX 02
|
|
;-----------
|
|
;
|
|
; Load in file
|
|
;
|
|
LOADFILE LDY #MAXFLEN
|
|
LDA #' '
|
|
^0 DEY
|
|
STA FILENAME+5,Y
|
|
BNE <0
|
|
;
|
|
^1 LDA NAMEBUFF,Y
|
|
BEQ >2
|
|
STA FILENAME+5,Y
|
|
INY
|
|
BNE <1
|
|
;
|
|
^2 LDX #FILENAME
|
|
LDY /FILENAME
|
|
JSR BLOAD
|
|
BNE ERROR
|
|
;
|
|
; If FONT, then transfer info
|
|
; to $816-$821
|
|
;
|
|
LDA #00
|
|
TYPE = *-1
|
|
BNE >5
|
|
;
|
|
; Turn off hi bits (done flags)
|
|
;
|
|
BIT $C083
|
|
BIT $C083
|
|
LDY #$00+$0C
|
|
^3 LDA (LOADLO),Y
|
|
AND #$7F
|
|
STA (LOADLO),Y
|
|
INY
|
|
CPY #$3B+$0C
|
|
BLT <3
|
|
;
|
|
; Fix "@" pointers in font
|
|
;
|
|
LDY #$00+$2C
|
|
LDA #88
|
|
STA (LOADLO),Y
|
|
LDY #$3B+$2C
|
|
LDA #52
|
|
STA (LOADLO),Y
|
|
LDY #$76+$2C
|
|
LDA #$00
|
|
STA (LOADLO),Y
|
|
LDY #$B1+$2C
|
|
LDA #$58
|
|
STA (LOADLO),Y
|
|
;
|
|
LDY #$0B
|
|
^4 LDA (LOADLO),Y
|
|
STA $816,Y
|
|
DEY
|
|
BPL <4
|
|
LDA $C082
|
|
;
|
|
^5 CLC
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Handle DOS errors. Only handles
|
|
;
|
|
; FILE NOT FOUND and I/O ERROR!
|
|
;
|
|
ERROR CMP #6
|
|
BEQ >0
|
|
;
|
|
; I/O error message
|
|
;
|
|
JSR $A316
|
|
JSR CATERR
|
|
SEC
|
|
RTS
|
|
;
|
|
; File not found message
|
|
;
|
|
^0 JSR CLS
|
|
JSR SOUND
|
|
JSR PRINT
|
|
BYT PRCNTR
|
|
.DA #PRLOC,140,#48
|
|
BYT 'CANNOT FIND',CR,CR
|
|
.DA #PRSTR,NAMEBUFF,#CR,#CR
|
|
BYT 'ON THIS DISK',CR,0
|
|
;
|
|
^1 JSR ANYKEY
|
|
SEC
|
|
RTS
|
|
;-----------
|
|
;
|
|
; PRINT routine
|
|
;
|
|
PRLOC = 1
|
|
PRSTR = 2
|
|
PRLEFT = 3
|
|
PRCNTR = 4
|
|
CR = 5
|
|
NOCR = 6
|
|
;
|
|
; WARNING!!! the "CR" defined here is
|
|
; for PRINT purposes only, as you can
|
|
; see, it is 5, not the normal 13!
|
|
;
|
|
PRINT PLA
|
|
STA PRLO
|
|
PLA
|
|
STA PRHI
|
|
;
|
|
LDA #2
|
|
STA SPARM
|
|
STA SPARM+7
|
|
;
|
|
PRINT1 LDX #0
|
|
PRINT2 JSR PRINTGET
|
|
CMP #' '
|
|
BLT PRINT3
|
|
STA PRINBUFF,X
|
|
INX
|
|
BNE PRINT2
|
|
;
|
|
PRINT3 ASL
|
|
TAY
|
|
LDA PRINT5,Y
|
|
STA PRINT4+1
|
|
LDA PRINT5+1,Y
|
|
STA PRINT4+2
|
|
CLC
|
|
PRINT4 JSR $FFFF
|
|
BCC PRINT2
|
|
BCS PRINT1
|
|
;
|
|
PRINT5 ADR PRZZDONE
|
|
ADR PRZZLOC
|
|
ADR PRZZSTR
|
|
ADR PRZZLEFT
|
|
ADR PRZZCNTR
|
|
ADR PRZZCR
|
|
ADR PRZZNOCR
|
|
;-0-
|
|
PRZZDONE PLA
|
|
PLA
|
|
JSR PRINTGET
|
|
JMP (PRLO)
|
|
;-1-
|
|
PRZZLOC JSR PRINTGET
|
|
STA SPARM+2
|
|
STA PRNTXLO
|
|
JSR PRINTGET
|
|
STA SPARM+3
|
|
STA PRNTXHI
|
|
JSR PRINTGET
|
|
STA SPARM+4
|
|
RTS
|
|
;-2-
|
|
PRZZSTR JSR PRINTGET
|
|
STA >0+1
|
|
JSR PRINTGET
|
|
STA >0+2
|
|
LDY #0
|
|
^0 LDA $FFFF,Y
|
|
BEQ >2
|
|
CMP #' '
|
|
BLT >1
|
|
STA PRINBUFF,X
|
|
INX
|
|
^1 INY
|
|
BNE <0
|
|
^2 CLC
|
|
RTS
|
|
;-3-
|
|
PRZZLEFT LDA #0
|
|
HEX 2C
|
|
;-4-
|
|
PRZZCNTR LDA #2
|
|
STA SPARM+1
|
|
RTS
|
|
;-5-
|
|
PRZZCR JSR PRZZNOCR
|
|
LDY #00
|
|
PRNTXLO = *-1
|
|
LDA #00
|
|
PRNTXHI = *-1
|
|
STY SPARM+2
|
|
STA SPARM+3
|
|
LDA SPARM+4
|
|
CLC
|
|
ADC #8
|
|
STA SPARM+4
|
|
SEC
|
|
RTS
|
|
;-6-
|
|
PRZZNOCR LDA #0
|
|
STA PRINBUFF,X
|
|
LDY #PRINBUFF
|
|
LDA /PRINBUFF
|
|
STY SPARM+9
|
|
STA SPARM+10
|
|
JSR STROUT
|
|
SEC
|
|
RTS
|
|
;---
|
|
PRINTGET INC PRLO
|
|
BNE >0
|
|
INC PRHI
|
|
^0 LDY #0
|
|
LDA (PRLO),Y
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Clear screen routines
|
|
;
|
|
CLSDATA BYT 1,17,38,165
|
|
BYT 1,28,38,154
|
|
;
|
|
CLS LDX #3
|
|
HEX 2C
|
|
CLS2 LDX #7
|
|
LDY #3
|
|
^0 LDA CLSDATA,X
|
|
STA RTOS+3,Y
|
|
DEX
|
|
DEY
|
|
BPL <0
|
|
LDA #1
|
|
JMP RTOS
|
|
;-----------
|
|
;
|
|
; Given A=TYPE (0:font, 1:border)
|
|
; initialize all the type variables
|
|
; text, load address, etc...
|
|
;
|
|
SETTRAM BYT $81,$89
|
|
SETTTYP BYT TXTYPE0-TXTYPES
|
|
BYT TXTYPE1-TXTYPES
|
|
;
|
|
; Text type and load addresses
|
|
;
|
|
TXTYPES:
|
|
TXTYPE0 BYT 'FONT',0
|
|
HEX D0E8
|
|
;
|
|
TXTYPE1 BYT 'BORDER',0
|
|
HEX DEDF
|
|
;---
|
|
;
|
|
; First set 16k RAMcard
|
|
;
|
|
SETTYPE STA TYPE
|
|
TAY
|
|
LDX SETTRAM,Y
|
|
LDA $C000,X
|
|
LDA $C000,X
|
|
LDX SETTTYP,Y
|
|
;
|
|
LDY #0
|
|
;
|
|
; Set type text
|
|
;
|
|
^0 LDA TXTYPES,X
|
|
STA TXTTYPE,Y
|
|
BEQ >2
|
|
;
|
|
; Set file prefix
|
|
;
|
|
CPY #4
|
|
BGE >1
|
|
STA FILENAME,Y
|
|
;
|
|
^1 INX
|
|
INY
|
|
BNE <0
|
|
;---
|
|
;
|
|
; Check page byte
|
|
;
|
|
; If 2 (SIGN) or 4 (BANNER) then
|
|
; skip page check.
|
|
; If 1 (GC) then don't invert
|
|
; If 3 (LH) then invert
|
|
;
|
|
^2 LDA MENUSEL
|
|
LSR
|
|
BCC >1
|
|
EOR $8300
|
|
CMP #1
|
|
BNE >1
|
|
INX
|
|
;
|
|
^1 LDA TXTYPES+1,X
|
|
LDY #0
|
|
STY LOADLO
|
|
STA LOADHI
|
|
;
|
|
; Store text equivalent in FILEADR
|
|
;
|
|
PHA
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
JSR >2
|
|
STA FILEADR
|
|
PLA
|
|
;
|
|
^2 AND #$0F
|
|
ORA #'0'
|
|
CMP #'9'+1
|
|
BLT >3
|
|
ADC #6
|
|
^3 STA FILEADR+1
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Filename used during loading
|
|
;
|
|
FILENAME ASC 'XXXX.'
|
|
DFS MAXFLEN,0
|
|
ASC ',A$'
|
|
FILEADR ASC 'XX'
|
|
ASC '00'
|
|
HEX 00
|
|
;-----------
|
|
;
|
|
; Read CATALOG routine
|
|
;
|
|
; JSR CATINIT to initialize
|
|
;
|
|
; JSR CATFILE to get a filename
|
|
;
|
|
; SEC=no more files
|
|
;
|
|
; CLC=found a file
|
|
; A=lo byte\
|
|
; Y=hi byte-address of text
|
|
;
|
|
CATINIT LDA #0
|
|
STA TMP2
|
|
LDY #17
|
|
JSR READSECT
|
|
CATEND SEC
|
|
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
|
|
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?
|
|
;
|
|
INY
|
|
INY
|
|
LDA (TMPLO),Y
|
|
AND #$7F
|
|
CMP #4
|
|
BNE CATFILE
|
|
;
|
|
LDX #0
|
|
^0 INY
|
|
LDA (TMPLO),Y
|
|
AND #$7F
|
|
CMP FILENAME,X
|
|
BNE CATFILE
|
|
INX
|
|
CPX #5
|
|
BLT <0
|
|
;
|
|
LDY #$20
|
|
^1 LDA (TMPLO),Y
|
|
EOR #$A0
|
|
BNE >2
|
|
STA (TMPLO),Y
|
|
DEY
|
|
BPL <1
|
|
;
|
|
^2 LDA (TMPLO),Y
|
|
AND #$7F
|
|
STA (TMPLO),Y
|
|
DEY
|
|
BNE <2
|
|
;
|
|
LDA TMPLO
|
|
LDY TMPHI
|
|
CLC
|
|
ADC #8
|
|
BCC >3
|
|
INY
|
|
^3 CLC
|
|
RTS
|
|
;---
|
|
IOB = $B7E8
|
|
;
|
|
; Read a sector
|
|
; A=sector, Y=track
|
|
;
|
|
READSECT STA IOB+5
|
|
STY IOB+4
|
|
LDA #0
|
|
STA IOB+3
|
|
LDY #SECTBUFF
|
|
LDA /SECTBUFF
|
|
STY IOB+8
|
|
STA IOB+9
|
|
LDA #1
|
|
STA IOB+12
|
|
JSR $3E3
|
|
JSR $3D9
|
|
BCS >0
|
|
RTS
|
|
;
|
|
^0 PLA
|
|
PLA
|
|
PLA
|
|
PLA
|
|
LDA #8
|
|
JSR ERROR
|
|
JMP MAINLOOP
|
|
;-----------
|
|
;
|
|
; Don't need to save all the storage
|
|
; areas
|
|
;
|
|
USR "O:SUPPGET",ORG
|
|
;-----------
|
|
TXTTYPE BYT 'BORDER',0
|
|
;
|
|
; Filename that user enters
|
|
;
|
|
NAMEBUFF:
|
|
SECTBUFF:
|
|
END:
|
|
;
|
|
;
|
|
;
|
|
END
|