home *** CD-ROM | disk | FTP | other *** search
- *= $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
-
-