home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er 1992 May
/
64er_Magazin_92-05_1992_Markt__Technik_de.d64
/
amica-shower.src
< prev
next >
Wrap
Text File
|
2022-10-26
|
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
;--------Hauptschleife
mainrout jsr init
jsr showdir
jsr slctfile
jmp mainrout
mainend jmp reinit
;--------Programm initialisieren
init lda #0 ;verhindert ausgabe
sta $9d ;von meldungen des
;betriebssystems
jsr vicreset;vic-init
jmp reset ;nmi-vector setzen
;--------Programm reinitialisieren
reinit lda #0 ;tastaturpuffer
sta 198 ;ruecksetzen
jsr vicreset;vic-init
jmp asstart ;assembler starten
;--------nmi-Vector 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 T-Ass
;--------File auswaehlen
slctfile lda #0 ;yposition des
sta ymem ;cursors loeschen
lda #40 ;Screenadresse des
sta a0 ;Cursors nach a0
lda #$04
sta a0+1
jsr setcur ;Cursor invertieren
sfilelp jsr getin ;Tastatur abfragen
cmp #17
beq crsrdown
cmp #145
beq crsrup
cmp #13
beq return
jmp sfilelp
;--------Cursor Down ausfuehren
crsrdown jsr setcur ;Cursor invert.
lda ymem ;y-Position = 22?
cmp #22
beq cdownend;ja => dann ende
inc ymem ;y-Pos erhoehen
clc ;Cursoradresse auf
lda a0 ;naechste Zeile
adc #40 ;stellen
sta a0
bcc cdownend;kein ueberlauf?
inc a0+1
cdownend jsr setcur ;Cursor invert.
jmp sfilelp ;zur Tastaturrout.
;--------Cursor Up ausfuehren
crsrup jsr setcur ;Cursor invert.
lda ymem ;Y-Position=0?
beq cupend ;ja => dann Ende
dec ymem ;y-Pos - 1
sec ;40 von Cursoradr.
lda a0 ;abziehen
sbc #40
sta a0
bcs cupend ;Unterlauf?
dec a0+1
cupend jsr setcur ;Cursor invert.
jmp sfilelp ;zur Tastaturrout.
;--------Return ausfuehren
return jsr setcur ;Cursor invert.
ldy #12 ;12.Zeichen der
returnlp lda (a0),y ;Zeile=akt.Filename
cmp #$c1 ;zeichen fuer Koala
beq koalapic;ja => dann weiter
cmp #$1b ;zeichen fuer Amica
beq amicapic;ja => dann weiter
pla ;ruecksprungadresse
pla ;loeschen
jmp mainrout;neustart
;--------Cursorzeile invertieren
setcur jsr waitrast
ldy #39 ;40 Zeichen=1 Zeile
scurlp lda (a0),y ;invertieren
eor #128 ;Startposition
sta (a0),y ;immer in a0
dey
bpl scurlp
rts
;--------Koalabild laden und anzeigen
;Der Filename kann nicht direkt vom
;Bildschirm gelesen werden, weil er erst
;Chr$-Code gewandelt werden muss. Im
;vorliegenden Fall wird davon ausgegan-
;gen, dass keine Graphik-Zeichen oder
;Grossbuchstaben verwendet wurden!
koalapic ldx #4 ;koala-Praefix
koalaplp lda koalaprf,x;in Filenamen
sta filename,x;schreiben
dex ;?pic+Space
bpl koalaplp
ldx #4 ;Zeiger Filename
ldy #16 ;Zeiger Screen
koalalp0 lda (a0),y ;holen
eor #%00100000;= eor #32
clc
adc #$20 ;+ #32
sta filename,x;schreiben
iny
inx
cpx #15 ;15 Buchstaben?
bne koalalp0 ;nein => schleife
lda #15 ;laenge setzen
sta fnlen
ldy #0 ;Zeiger Ladeadr.
jsr lfile ;Bild laden
jmp showkpic ;und anzeigen
;--------Amica-Paint Format anzeigen
amicapic ldx #2 ;Praefix in
amicaplp lda amicaprf,x;Filenamen
sta filename,x;[b]
dex
bpl amicaplp
lda #3 ;Lange bei diesem
sta fnlen ;Format variabel
ldx #3 ;Zeiger Filename
ldy #15 ;Zeiger Screen
amicalp0 lda (a0),y ;holen
cmp #$22 ;Name zu Ende?
beq amicago ;ja=>dann Ende
eor #%00100000;wie oben
clc
adc #$20
sta filename,x;schreiben
inc fnlen ;Filelaenge+1
iny
inx
bne amicalp0 ;zur Schleife
amicago ldy #2 ;Zeiger Ladeadr.
jsr lfile ;Bild laden und
jmp showapic ;anzeigen
;--------File laden
lfile lda regtab,y ;Ladeadressen
sta a0 ;aus Tabelle
lda regtab+1,y;holen
sta a0+1
lda fnlen
ldx #<filename
ldy #>filename;Filenamen-
jsr fnpar ;parameter setzen
lda #2
ldx #8
ldy #0 ;Fileparameter
jsr fpar ;setzen
lda #$00 ;(1=Verify)
ldx a0
ldy a0+1
jsr load ;File laden
bcc lfileend ;kein Fehler =>
pla ;Ruecksprung-
pla ;adresse loeschen
;= Bild nicht
;anzeigen!
lfileend rts
;--------Directory anzeigen
showdir lda #154 ;Hellblau
jsr chrout
jsr clrhome
lda #13 ;Return
jsr chrout
lda #13 ;Return
jsr chrout
lda #0 ;Textnr 0
jsr textout ;ausgeben
jsr openfile ;File oeffnen
lda $ba ;Sekundaer Adr.
jsr $ed09 ;IEC-Open
lda $b9 ;Geraetenummer
jsr $edc7 ;Talk senden
jsr getbyte ;=Byte vom IEC-
jsr getbyte ;Bus lesen
shwdirlp ldx #5 ;5 Leerzeichen
jsr tabulatr ;ausgeben
jsr srchstrt ;Start suchen
jsr blockout ;Blocks ausgeben
jsr fnameout ;Filenamen druck.
jsr runstop ;Runstop abfragen
jmp shwdirlp ;Schleife
;--------File schliessen
close pla ;Ruecksprungadr.
pla ;loeschen
;= RTS im aufru-
;fenden Programm
jsr $f528 ;Untalk senden
;und Fileclose
jsr $ffe7 ;Alles schliessen
lda #0 ;Textnummer 0
jsr textout
lda #1 ;Textnummer 1
jmp textout ;ausgeben
;--------Byte vom IEC-Bus lesen
getbyte jsr $ee13 ;Byte lesen
pha ;merken
lda $90 ;Status
lsr a
lsr a
pla ;Byte holen
bcs close ;Time out
rts
;--------Runstop abfragen
runstop jsr $ffe1 ;Runstop?
beq close ;ja=>dann Ende
rts
;--------Zeiger auf Start des Directory
;Eintrag setzen
srchstrt jsr getbyte ;Byte lesen
beq srchstgo;=0 dann naechstes
cmp #1
bne srchstrt;<>1 dann Schleife
srchstgo jsr getbyte ;Byte lesen
beq close ;=0 dann Dir. Ende
rts
;--------Anzahl der Blocks ausgeben
blockout jsr getbyte ;Byte lesen
sta amem ;merken
jsr getbyte ;in Akku high
ldx amem ;in xReg low
jsr intout ;Integer ausgeben
lda #32 ;Leerzeichen
jmp chrout ;ausgeben
;--------Filename drucken
fnameout jsr getbyte ;Byte lesen
beq fnoutlp ;=0 dann Stringende
jsr chrout ;Zeichen ausgeben
jmp fnameout;Schleife
fnoutlp lda #13 ;Return
jmp chrout ;ausgeben
;--------File oeffnen
openfile lda #1 ;logische Filenr.
ldx #8 ;Geraeteadresse
ldy #0 ;Sekundaeradresse
jsr fpar ;setzen
lda #1 ;Filelaenge
ldx #<fname
ldy #>fname
jsr fnpar ;Fname setzen
jmp open ;File oeffnen
fname .text "$"
;--------Tabulator/Anzahl Leerzeichen
;in xReg
tabulatr lda #32 ;Leerzeichen
jsr chrout ;ausgeben
dex
bpl tabulatr
rts
;--------Text ausgeben
textout asl a ;Zeiger auf
tay ;Tabelle
lda texttab,y ;Textadresse
sta a0 ;nach (a0)
lda texttab+1,y
sta a0+1
lda tpostab,y ;Scrnadresse
sta a1 ;nach (a1)
lda tpostab+1,y
sta a1+1
ldy #39 ;40 Zeichen
txtoutlp lda (a0),y ;lesen
and #63 ;in ASC wandeln
ora #128 ;Revers
sta (a1),y ;ausgeben
dey
bpl txtoutlp
rts
;--------Pictures anzeigen
showapic ;=Einsprung fuer
;Amica-Pictures
jsr setregs ;Register setzen
jsr scrnoff ;Screen aus
jsr depack ;entpacken
showkpic ;=Einsprung fuer
;Koala-Pictures
jsr initcols;Farben kopieren
jsr scrnon ;Screen an
jsr graphon ;Graphic an
showwait jsr getin ;auf Tastendruck
beq showwait;warten
rts
;--------Register setzen
setregs ldx #3 ;(a0)=Ziel
sregslp lda regtab,x;(a1)=Destination
sta a0,x
dex
bpl sregslp
rts
;--------Graphik einschalten
graphon lda #%00111011;Graphik an
sta vic+17
lda #%00011000;Seite 1
sta vic+24
sta vic+22 ;Multicolor an
lda #0 ;schwarz
sta vic+32 ;Rahmenfarbe
sta vic+33 ;Hintergrund
rts
;--------Byte schreiben
sbyte ldx #$00
sta (a0,x)
inc a0
bne sbytend
inc a0+1
sbytend rts
;--------Byte holen
gbyte ldx #$00
lda (a1,x)
inc a1
bne gbytend
inc a1+1
gbytend rts
;--------Amica-Picture entpacken
depack jsr gbyte ;Byte holen
cmp #$c2 ;Steuerzeichen
beq dpackgo0;ja=>dann ausfuehr.
jsr sbyte ;Byte schreiben
jmp depack ;Schleife
;--------
dpackgo0 jsr gbyte ;Byte holen
cmp #$00 ;= File-Ende
beq dpackend;ja=>dann Ende
tay ;Anzahl Bytes
jsr gbyte ;Byte holen
pha ;merken
tya ;yReg nach xReg
tax
pla ;holen
ldy #$00
dpacklp sta (a0),y ;und schreiben
iny
dex
bne dpacklp
tya ;Counter zu Desti-
clc ;nation addieren
adc a0
sta a0
bcc depack ;zur Schleife
inc a0+1
jmp depack ;zur Schleife
dpackend rts
;--------Farben kopieren
initcols clc ;(a0) auf Farben
lda regtab ;fuer Screen setzen
adc #$40 ;Bildanfang + $1f40
sta a0
lda regtab+1
adc #$1f
sta a0+1
clc ;(a1) auf Farben
lda a0 ;fuer Colorram
adc #$e8 ;(a0) + 1000
sta a1
lda a0+1
adc #$03
sta a1+1
lda #0 ;(a2)=Screen
sta a2 ;(a3)=Colorram
sta a3
lda #$04
sta a2+1
lda #$d8
sta a3+1
ldx #3 ;KopierSchleife
ldy #0 ;fuer 4 Blocks
icolslp lda (a0),y ;=$0400 Bytes
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
;--------Screen abschalten
scrnoff jsr waitrast
lda vic+17
and #%11101111
sta vic+17
rts
;--------Screen einschalten
scrnon jsr waitrast
lda vic+17
ora #%00010000
sta vic+17
rts
;--------auf Rasterstrahlposition warten
waitrast lda #255
cmp vic+18
bne waitrast
rts
;--------
regtab .word $2000 ;entpacktes File
.word $4a00 ;gepacktes File
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