home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
92xx
/
9205.d64
/
amica-shower.src
< prev
next >
Wrap
Text File
|
1995-03-30
|
13KB
|
558 lines
*= $0810
;--------ASSEMBLER-EINSPRUNG
ASSTART = 36864
;--------ZEROPAGE-ADRESSEN
A0 = $02;;
A1 = $04;;
A2 = $06;;
A3 = $08;;
CURSOR = $0A;;
COLOR = $0C;;
AMEM = $10;
XMEM = $11;
YMEM = $12;
XP = $50;
YP = $51;
;--------SYSTEM-ADRESSEN
KEY = $C6
KEYSTACK = $0277
IRQVEC = $0314
NMIVEC = $0318
SCREEN = $0400
GRAPHIC = $2000
VIC = $D000
SID = $D400
RND = $D41B
COLORRAM = $D800
JOY1 = $DC00
JOY2 = $DC01
;--------BETRIEBSSYSTEM-ROUTINEN
INTOUT = $BDCD
VICRESET = $E518
CLRHOME = $E544
FNPAR = $FDF9
FPAR = $FE00
CHROUT = $FFD2
LOAD = $FFD5
SAVE = $FFD8
OPEN = $FFC0
GETIN = $FFE4
;--------╚AUPTSCHLEIFE
MAINROUT JSR INIT
JSR SHOWDIR
JSR SLCTFILE
JMP MAINROUT
MAINEND JMP REINIT
;--------╨ROGRAMM INITIALISIEREN
INIT LDA #0 ;VERHINDERT AUSGABE
STA $9D ;VON MELDUNGEN DES
;BETRIEBSSYSTEMS
JSR VICRESET;VIC-INIT
JMP RESET ;NMI-VECTOR SETZEN
;--------╨ROGRAMM REINITIALISIEREN
REINIT LDA #0 ;TASTATURPUFFER
STA 198 ;RUECKSETZEN
JSR VICRESET;VIC-INIT
JMP ASSTART ;ASSEMBLER STARTEN
;--------NMI-╓ECTOR VERBIEGEN
RESET LDA #<MAINEND ;NMI-VECTOR AUF
STA NMIVEC ;MAINEND VERBIE-
LDA #>MAINEND ;GEN, RESTORE
STA NMIVEC+1 ;BRICHT IMMER DAS
RTS ;PROGRAMM AB UND
;STARTET ╘-┴SS
;--------╞ILE AUSWAEHLEN
SLCTFILE LDA #0 ;YPOSITION DES
STA YMEM ;CURSORS LOESCHEN
LDA #40 ;╙CREENADRESSE DES
STA A0 ;├URSORS NACH A0
LDA #$04
STA A0+1
JSR SETCUR ;├URSOR INVERTIEREN
SFILELP JSR GETIN ;╘ASTATUR ABFRAGEN
CMP #17
BEQ CRSRDOWN
CMP #145
BEQ CRSRUP
CMP #13
BEQ RETURN
JMP SFILELP
;--------├URSOR ─OWN AUSFUEHREN
CRSRDOWN JSR SETCUR ;├URSOR INVERT.
LDA YMEM ;Y-╨OSITION = 22?
CMP #22
BEQ CDOWNEND;JA => DANN ENDE
INC YMEM ;Y-╨OS ERHOEHEN
CLC ;├URSORADRESSE AUF
LDA A0 ;NAECHSTE ┌EILE
ADC #40 ;STELLEN
STA A0
BCC CDOWNEND;KEIN UEBERLAUF?
INC A0+1
CDOWNEND JSR SETCUR ;├URSOR INVERT.
JMP SFILELP ;ZUR ╘ASTATURROUT.
;--------├URSOR ╒P AUSFUEHREN
CRSRUP JSR SETCUR ;├URSOR INVERT.
LDA YMEM ;┘-╨OSITION=0?
BEQ CUPEND ;JA => DANN ┼NDE
DEC YMEM ;Y-╨OS - 1
SEC ;40 VON ├URSORADR.
LDA A0 ;ABZIEHEN
SBC #40
STA A0
BCS CUPEND ;╒NTERLAUF?
DEC A0+1
CUPEND JSR SETCUR ;├URSOR INVERT.
JMP SFILELP ;ZUR ╘ASTATURROUT.
;--------╥ETURN AUSFUEHREN
RETURN JSR SETCUR ;├URSOR INVERT.
LDY #12 ;12.┌EICHEN DER
RETURNLP LDA (A0),Y ;┌EILE=AKT.╞ILENAME
CMP #$C1 ;ZEICHEN FUER ╦OALA
BEQ KOALAPIC;JA => DANN WEITER
CMP #$1B ;ZEICHEN FUER ┴MICA
BEQ AMICAPIC;JA => DANN WEITER
PLA ;RUECKSPRUNGADRESSE
PLA ;LOESCHEN
JMP MAINROUT;NEUSTART
;--------├URSORZEILE INVERTIEREN
SETCUR JSR WAITRAST
LDY #39 ;40 ┌EICHEN=1 ┌EILE
SCURLP LDA (A0),Y ;INVERTIEREN
EOR #128 ;╙TARTPOSITION
STA (A0),Y ;IMMER IN A0
DEY
BPL SCURLP
RTS
;--------╦OALABILD LADEN UND ANZEIGEN
;─ER ╞ILENAME KANN NICHT DIREKT VOM
;┬ILDSCHIRM GELESEN WERDEN, WEIL ER ERST
;├HR$-├ODE GEWANDELT WERDEN MUSS. ╔M
;VORLIEGENDEN ╞ALL WIRD DAVON AUSGEGAN-
;GEN, DASS KEINE ╟RAPHIK-┌EICHEN ODER
;╟ROSSBUCHSTABEN VERWENDET WURDEN!
KOALAPIC LDX #4 ;KOALA-╨RAEFIX
KOALAPLP LDA KOALAPRF,X;IN ╞ILENAMEN
STA FILENAME,X;SCHREIBEN
DEX ;?PIC+╙PACE
BPL KOALAPLP
LDX #4 ;┌EIGER ╞ILENAME
LDY #16 ;┌EIGER ╙CREEN
KOALALP0 LDA (A0),Y ;HOLEN
EOR #%00100000;= EOR #32
CLC
ADC #$20 ;+ #32
STA FILENAME,X;SCHREIBEN
INY
INX
CPX #15 ;15 ┬UCHSTABEN?
BNE KOALALP0 ;NEIN => SCHLEIFE
LDA #15 ;LAENGE SETZEN
STA FNLEN
LDY #0 ;┌EIGER ╠ADEADR.
JSR LFILE ;┬ILD LADEN
JMP SHOWKPIC ;UND ANZEIGEN
;--------┴MICA-╨AINT ╞ORMAT ANZEIGEN
AMICAPIC LDX #2 ;╨RAEFIX IN
AMICAPLP LDA AMICAPRF,X;╞ILENAMEN
STA FILENAME,X;[B]
DEX
BPL AMICAPLP
LDA #3 ;╠ANGE BEI DIESEM
STA FNLEN ;╞ORMAT VARIABEL
LDX #3 ;┌EIGER ╞ILENAME
LDY #15 ;┌EIGER ╙CREEN
AMICALP0 LDA (A0),Y ;HOLEN
CMP #$22 ;╬AME ZU ┼NDE?
BEQ AMICAGO ;JA=>DANN ┼NDE
EOR #%00100000;WIE OBEN
CLC
ADC #$20
STA FILENAME,X;SCHREIBEN
INC FNLEN ;╞ILELAENGE+1
INY
INX
BNE AMICALP0 ;ZUR ╙CHLEIFE
AMICAGO LDY #2 ;┌EIGER ╠ADEADR.
JSR LFILE ;┬ILD LADEN UND
JMP SHOWAPIC ;ANZEIGEN
;--------╞ILE LADEN
LFILE LDA REGTAB,Y ;╠ADEADRESSEN
STA A0 ;AUS ╘ABELLE
LDA REGTAB+1,Y;HOLEN
STA A0+1
LDA FNLEN
LDX #<FILENAME
LDY #>FILENAME;╞ILENAMEN-
JSR FNPAR ;PARAMETER SETZEN
LDA #2
LDX #8
LDY #0 ;╞ILEPARAMETER
JSR FPAR ;SETZEN
LDA #$00 ;(1=╓ERIFY)
LDX A0
LDY A0+1
JSR LOAD ;╞ILE LADEN
BCC LFILEEND ;KEIN ╞EHLER =>
PLA ;╥UECKSPRUNG-
PLA ;ADRESSE LOESCHEN
;= ┬ILD NICHT
;ANZEIGEN!
LFILEEND RTS
;--------─IRECTORY ANZEIGEN
SHOWDIR LDA #154 ;╚ELLBLAU
JSR CHROUT
JSR CLRHOME
LDA #13 ;╥ETURN
JSR CHROUT
LDA #13 ;╥ETURN
JSR CHROUT
LDA #0 ;╘EXTNR 0
JSR TEXTOUT ;AUSGEBEN
JSR OPENFILE ;╞ILE OEFFNEN
LDA $BA ;╙EKUNDAER ┴DR.
JSR $ED09 ;╔┼├-╧PEN
LDA $B9 ;╟ERAETENUMMER
JSR $EDC7 ;╘ALK SENDEN
JSR GETBYTE ;=┬YTE VOM ╔┼├-
JSR GETBYTE ;┬US LESEN
SHWDIRLP LDX #5 ;5 ╠EERZEICHEN
JSR TABULATR ;AUSGEBEN
JSR SRCHSTRT ;╙TART SUCHEN
JSR BLOCKOUT ;┬LOCKS AUSGEBEN
JSR FNAMEOUT ;╞ILENAMEN DRUCK.
JSR RUNSTOP ;╥UNSTOP ABFRAGEN
JMP SHWDIRLP ;╙CHLEIFE
;--------╞ILE SCHLIESSEN
CLOSE PLA ;╥UECKSPRUNGADR.
PLA ;LOESCHEN
;= ╥╘╙ IM AUFRU-
;FENDEN ╨ROGRAMM
JSR $F528 ;╒NTALK SENDEN
;UND ╞ILECLOSE
JSR $FFE7 ;┴LLES SCHLIESSEN
LDA #0 ;╘EXTNUMMER 0
JSR TEXTOUT
LDA #1 ;╘EXTNUMMER 1
JMP TEXTOUT ;AUSGEBEN
;--------┬YTE VOM ╔┼├-┬US LESEN
GETBYTE JSR $EE13 ;┬YTE LESEN
PHA ;MERKEN
LDA $90 ;╙TATUS
LSR A
LSR A
PLA ;┬YTE HOLEN
BCS CLOSE ;╘IME OUT
RTS
;--------╥UNSTOP ABFRAGEN
RUNSTOP JSR $FFE1 ;╥UNSTOP?
BEQ CLOSE ;JA=>DANN ┼NDE
RTS
;--------┌EIGER AUF ╙TART DES ─IRECTORY
;┼INTRAG SETZEN
SRCHSTRT JSR GETBYTE ;┬YTE LESEN
BEQ SRCHSTGO;=0 DANN NAECHSTES
CMP #1
BNE SRCHSTRT;<>1 DANN ╙CHLEIFE
SRCHSTGO JSR GETBYTE ;┬YTE LESEN
BEQ CLOSE ;=0 DANN ─IR. ┼NDE
RTS
;--------┴NZAHL DER ┬LOCKS AUSGEBEN
BLOCKOUT JSR GETBYTE ;┬YTE LESEN
STA AMEM ;MERKEN
JSR GETBYTE ;IN ┴KKU HIGH
LDX AMEM ;IN X╥EG LOW
JSR INTOUT ;╔NTEGER AUSGEBEN
LDA #32 ;╠EERZEICHEN
JMP CHROUT ;AUSGEBEN
;--------╞ILENAME DRUCKEN
FNAMEOUT JSR GETBYTE ;┬YTE LESEN
BEQ FNOUTLP ;=0 DANN ╙TRINGENDE
JSR CHROUT ;┌EICHEN AUSGEBEN
JMP FNAMEOUT;╙CHLEIFE
FNOUTLP LDA #13 ;╥ETURN
JMP CHROUT ;AUSGEBEN
;--------╞ILE OEFFNEN
OPENFILE LDA #1 ;LOGISCHE ╞ILENR.
LDX #8 ;╟ERAETEADRESSE
LDY #0 ;╙EKUNDAERADRESSE
JSR FPAR ;SETZEN
LDA #1 ;╞ILELAENGE
LDX #<FNAME
LDY #>FNAME
JSR FNPAR ;╞NAME SETZEN
JMP OPEN ;╞ILE OEFFNEN
FNAME .TEXT "$"
;--------╘ABULATOR/┴NZAHL ╠EERZEICHEN
;IN X╥EG
TABULATR LDA #32 ;╠EERZEICHEN
JSR CHROUT ;AUSGEBEN
DEX
BPL TABULATR
RTS
;--------╘EXT AUSGEBEN
TEXTOUT ASL A ;┌EIGER AUF
TAY ;╘ABELLE
LDA TEXTTAB,Y ;╘EXTADRESSE
STA A0 ;NACH (A0)
LDA TEXTTAB+1,Y
STA A0+1
LDA TPOSTAB,Y ;╙CRNADRESSE
STA A1 ;NACH (A1)
LDA TPOSTAB+1,Y
STA A1+1
LDY #39 ;40 ┌EICHEN
TXTOUTLP LDA (A0),Y ;LESEN
AND #63 ;IN ┴╙├áWANDELN
ORA #128 ;╥EVERS
STA (A1),Y ;AUSGEBEN
DEY
BPL TXTOUTLP
RTS
;--------╨ICTURES ANZEIGEN
SHOWAPIC ;=┼INSPRUNG FUER
;┴MICA-╨ICTURES
JSR SETREGS ;╥EGISTER SETZEN
JSR SCRNOFF ;╙CREEN AUS
JSR DEPACK ;ENTPACKEN
SHOWKPIC ;=┼INSPRUNG FUER
;╦OALA-╨ICTURES
JSR INITCOLS;╞ARBEN KOPIEREN
JSR SCRNON ;╙CREEN AN
JSR GRAPHON ;╟RAPHIC AN
SHOWWAIT JSR GETIN ;AUF ╘ASTENDRUCK
BEQ SHOWWAIT;WARTEN
RTS
;--------╥EGISTER SETZEN
SETREGS LDX #3 ;(A0)=┌IEL
SREGSLP LDA REGTAB,X;(A1)=─ESTINATION
STA A0,X
DEX
BPL SREGSLP
RTS
;--------╟RAPHIK EINSCHALTEN
GRAPHON LDA #%00111011;╟RAPHIK AN
STA VIC+17
LDA #%00011000;╙EITE 1
STA VIC+24
STA VIC+22 ;═ULTICOLOR AN
LDA #0 ;SCHWARZ
STA VIC+32 ;╥AHMENFARBE
STA VIC+33 ;╚INTERGRUND
RTS
;--------┬YTE SCHREIBEN
SBYTE LDX #$00
STA (A0,X)
INC A0
BNE SBYTEND
INC A0+1
SBYTEND RTS
;--------┬YTE HOLEN
GBYTE LDX #$00
LDA (A1,X)
INC A1
BNE GBYTEND
INC A1+1
GBYTEND RTS
;--------┴MICA-╨ICTURE ENTPACKEN
DEPACK JSR GBYTE ;┬YTE HOLEN
CMP #$C2 ;╙TEUERZEICHEN
BEQ DPACKGO0;JA=>DANN AUSFUEHR.
JSR SBYTE ;┬YTE SCHREIBEN
JMP DEPACK ;╙CHLEIFE
;--------
DPACKGO0 JSR GBYTE ;┬YTE HOLEN
CMP #$00 ;= ╞ILE-┼NDE
BEQ DPACKEND;JA=>DANN ┼NDE
TAY ;┴NZAHL ┬YTES
JSR GBYTE ;┬YTE HOLEN
PHA ;MERKEN
TYA ;Y╥EG NACH X╥EG
TAX
PLA ;HOLEN
LDY #$00
DPACKLP STA (A0),Y ;UND SCHREIBEN
INY
DEX
BNE DPACKLP
TYA ;├OUNTER ZU ─ESTI-
CLC ;NATION ADDIEREN
ADC A0
STA A0
BCC DEPACK ;ZUR ╙CHLEIFE
INC A0+1
JMP DEPACK ;ZUR ╙CHLEIFE
DPACKEND RTS
;--------╞ARBEN KOPIEREN
INITCOLS CLC ;(A0) AUF ╞ARBEN
LDA REGTAB ;FUER ╙CREEN SETZEN
ADC #$40 ;┬ILDANFANG + $1F40
STA A0
LDA REGTAB+1
ADC #$1F
STA A0+1
CLC ;(A1) AUF ╞ARBEN
LDA A0 ;FUER ├OLORRAM
ADC #$E8 ;(A0) + 1000
STA A1
LDA A0+1
ADC #$03
STA A1+1
LDA #0 ;(A2)=╙CREEN
STA A2 ;(A3)=├OLORRAM
STA A3
LDA #$04
STA A2+1
LDA #$D8
STA A3+1
LDX #3 ;╦OPIER╙CHLEIFE
LDY #0 ;FUER 4 ┬LOCKS
ICOLSLP LDA (A0),Y ;=$0400 ┬YTES
STA (A2),Y
LDA (A1),Y
STA (A3),Y
INY
BNE ICOLSLP
INC A0+1
INC A1+1
INC A2+1
INC A3+1
DEX
BPL ICOLSLP
RTS
;--------╙CREEN ABSCHALTEN
SCRNOFF JSR WAITRAST
LDA VIC+17
AND #%11101111
STA VIC+17
RTS
;--------╙CREEN EINSCHALTEN
SCRNON JSR WAITRAST
LDA VIC+17
ORA #%00010000
STA VIC+17
RTS
;--------AUF ╥ASTERSTRAHLPOSITION WARTEN
WAITRAST LDA #255
CMP VIC+18
BNE WAITRAST
RTS
;--------
REGTAB .WORD $2000 ;ENTPACKTES ╞ILE
.WORD $4A00 ;GEPACKTES ╞ILE
TEXTTAB .WORD TEXT00,TEXT01
TPOSTAB .WORD SCREEN
.WORD SCREEN+(40*24)
TEXT00 .TEXT "AMICA-PICTURE-SHOWER"
.TEXT " BY DARK MIGHTS 1992"
TEXT01 .TEXT "MOVE CURSOR TO ANY "
.TEXT "FILE AND HIT RETURN! "
FNLEN .BYTE 0
FILENAME .TEXT " "
;"?PIC "
KOALAPRF .BYTE $3F,$50,$49,$43,$20
;"[B]"
AMICAPRF .BYTE $5B,$42,$5D