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 >
Text File  |  2022-10-26  |  13KB  |  558 lines

  1.          *= $0810
  2.  
  3. ;--------assembler-einsprung
  4.  
  5. asstart  = 36864
  6.  
  7. ;--------zeropage-adressen
  8.  
  9. a0       = $02;;
  10. a1       = $04;;
  11. a2       = $06;;
  12. a3       = $08;;
  13. cursor   = $0a;;
  14. color    = $0c;;
  15. amem     = $10;
  16. xmem     = $11;
  17. ymem     = $12;
  18. xp       = $50;
  19. yp       = $51;
  20.  
  21. ;--------system-adressen
  22.  
  23. key      = $c6
  24. keystack = $0277
  25. irqvec   = $0314
  26. nmivec   = $0318
  27. screen   = $0400
  28. graphic  = $2000
  29. vic      = $d000
  30. sid      = $d400
  31. rnd      = $d41b
  32. colorram = $d800
  33. joy1     = $dc00
  34. joy2     = $dc01
  35.  
  36. ;--------betriebssystem-routinen
  37.  
  38. intout   = $bdcd
  39. vicreset = $e518
  40. clrhome  = $e544
  41. fnpar    = $fdf9
  42. fpar     = $fe00
  43. chrout   = $ffd2
  44. load     = $ffd5
  45. save     = $ffd8
  46. open     = $ffc0
  47. getin    = $ffe4
  48.  
  49. ;--------Hauptschleife
  50.  
  51. mainrout jsr init
  52.          jsr showdir
  53.          jsr slctfile
  54.          jmp mainrout
  55.  
  56. mainend  jmp reinit
  57.  
  58.  
  59. ;--------Programm initialisieren
  60.  
  61. init     lda #0      ;verhindert ausgabe
  62.          sta $9d     ;von meldungen des
  63.                      ;betriebssystems
  64.  
  65.          jsr vicreset;vic-init
  66.          jmp reset   ;nmi-vector setzen
  67.  
  68. ;--------Programm reinitialisieren
  69.  
  70. reinit   lda #0      ;tastaturpuffer
  71.          sta 198     ;ruecksetzen
  72.          jsr vicreset;vic-init
  73.          jmp asstart ;assembler starten
  74.  
  75. ;--------nmi-Vector verbiegen
  76.  
  77. reset    lda #<mainend ;nmi-vector auf
  78.          sta nmivec    ;mainend verbie-
  79.          lda #>mainend ;gen, restore
  80.          sta nmivec+1  ;bricht immer das
  81.          rts           ;programm ab und
  82.                        ;startet T-Ass
  83.  
  84. ;--------File auswaehlen
  85.  
  86. slctfile lda #0      ;yposition des
  87.          sta ymem    ;cursors loeschen
  88.          lda #40     ;Screenadresse des
  89.          sta a0      ;Cursors nach a0
  90.          lda #$04
  91.          sta a0+1
  92.          jsr setcur  ;Cursor invertieren
  93.  
  94. sfilelp  jsr getin   ;Tastatur abfragen
  95.          cmp #17
  96.          beq crsrdown
  97.          cmp #145
  98.          beq crsrup
  99.          cmp #13
  100.          beq return
  101.          jmp sfilelp
  102.  
  103. ;--------Cursor Down ausfuehren
  104.  
  105. crsrdown jsr setcur  ;Cursor invert.
  106.          lda ymem    ;y-Position = 22?
  107.          cmp #22
  108.          beq cdownend;ja => dann ende
  109.          inc ymem    ;y-Pos erhoehen
  110.          clc         ;Cursoradresse auf
  111.          lda a0      ;naechste Zeile
  112.          adc #40     ;stellen
  113.          sta a0
  114.          bcc cdownend;kein ueberlauf?
  115.          inc a0+1
  116. cdownend jsr setcur  ;Cursor invert.
  117.          jmp sfilelp ;zur Tastaturrout.
  118.  
  119. ;--------Cursor Up ausfuehren
  120.  
  121. crsrup   jsr setcur  ;Cursor invert.
  122.          lda ymem    ;Y-Position=0?
  123.          beq cupend  ;ja => dann Ende
  124.          dec ymem    ;y-Pos - 1
  125.          sec         ;40 von Cursoradr.
  126.          lda a0      ;abziehen
  127.          sbc #40
  128.          sta a0
  129.          bcs cupend  ;Unterlauf?
  130.          dec a0+1
  131. cupend   jsr setcur  ;Cursor invert.
  132.          jmp sfilelp ;zur Tastaturrout.
  133.  
  134. ;--------Return ausfuehren
  135.  
  136. return   jsr setcur  ;Cursor invert.
  137.  
  138.          ldy #12     ;12.Zeichen der
  139. returnlp lda (a0),y  ;Zeile=akt.Filename
  140.          cmp #$c1    ;zeichen fuer Koala
  141.          beq koalapic;ja => dann weiter
  142.          cmp #$1b    ;zeichen fuer Amica
  143.          beq amicapic;ja => dann weiter
  144.          pla         ;ruecksprungadresse
  145.          pla         ;loeschen
  146.          jmp mainrout;neustart
  147.  
  148. ;--------Cursorzeile invertieren
  149.  
  150. setcur   jsr waitrast
  151.          ldy #39     ;40 Zeichen=1 Zeile
  152. scurlp   lda (a0),y  ;invertieren
  153.          eor #128    ;Startposition
  154.          sta (a0),y  ;immer in a0
  155.          dey
  156.          bpl scurlp
  157.          rts
  158.  
  159. ;--------Koalabild laden und anzeigen
  160.  
  161. ;Der Filename kann nicht direkt vom
  162. ;Bildschirm gelesen werden, weil er erst
  163. ;Chr$-Code gewandelt werden muss. Im
  164. ;vorliegenden Fall wird davon ausgegan-
  165. ;gen, dass keine Graphik-Zeichen oder
  166. ;Grossbuchstaben verwendet wurden!
  167.  
  168. koalapic ldx #4        ;koala-Praefix
  169. koalaplp lda koalaprf,x;in Filenamen
  170.          sta filename,x;schreiben
  171.          dex           ;?pic+Space
  172.          bpl koalaplp
  173.  
  174.          ldx #4        ;Zeiger Filename
  175.          ldy #16       ;Zeiger Screen
  176. koalalp0 lda (a0),y    ;holen
  177.          eor #%00100000;= eor #32
  178.          clc
  179.          adc #$20      ;+ #32
  180.          sta filename,x;schreiben
  181.          iny
  182.          inx
  183.          cpx #15       ;15 Buchstaben?
  184.          bne koalalp0  ;nein => schleife
  185.          lda #15       ;laenge setzen
  186.          sta fnlen
  187.          ldy #0        ;Zeiger Ladeadr.
  188.          jsr lfile     ;Bild laden
  189.          jmp showkpic  ;und anzeigen
  190.  
  191. ;--------Amica-Paint Format anzeigen
  192.  
  193. amicapic ldx #2        ;Praefix in
  194. amicaplp lda amicaprf,x;Filenamen
  195.          sta filename,x;[b]
  196.          dex
  197.          bpl amicaplp
  198.          lda #3        ;Lange bei diesem
  199.          sta fnlen     ;Format variabel
  200.          ldx #3        ;Zeiger Filename
  201.          ldy #15       ;Zeiger Screen
  202. amicalp0 lda (a0),y    ;holen
  203.          cmp #$22      ;Name zu Ende?
  204.          beq amicago   ;ja=>dann Ende
  205.          eor #%00100000;wie oben
  206.          clc
  207.          adc #$20
  208.          sta filename,x;schreiben
  209.          inc fnlen     ;Filelaenge+1
  210.          iny
  211.          inx
  212.          bne amicalp0  ;zur Schleife
  213. amicago  ldy #2        ;Zeiger Ladeadr.
  214.          jsr lfile     ;Bild laden und
  215.          jmp showapic  ;anzeigen
  216.  
  217. ;--------File laden
  218.  
  219. lfile    lda regtab,y  ;Ladeadressen
  220.          sta a0        ;aus Tabelle
  221.          lda regtab+1,y;holen
  222.          sta a0+1
  223.          lda fnlen
  224.          ldx #<filename
  225.          ldy #>filename;Filenamen-
  226.          jsr fnpar     ;parameter setzen
  227.          lda #2
  228.          ldx #8
  229.          ldy #0        ;Fileparameter
  230.          jsr fpar      ;setzen
  231.          lda #$00      ;(1=Verify)
  232.          ldx a0
  233.          ldy a0+1
  234.          jsr load      ;File laden
  235.          bcc lfileend  ;kein Fehler =>
  236.  
  237.          pla           ;Ruecksprung-
  238.          pla           ;adresse loeschen
  239.                        ;= Bild nicht
  240.                        ;anzeigen!
  241. lfileend rts
  242.  
  243. ;--------Directory anzeigen
  244.  
  245. showdir  lda #154      ;Hellblau
  246.          jsr chrout
  247.          jsr clrhome
  248.          lda #13       ;Return
  249.          jsr chrout
  250.          lda #13       ;Return
  251.          jsr chrout
  252.          lda #0        ;Textnr 0
  253.          jsr textout   ;ausgeben
  254.          jsr openfile  ;File oeffnen
  255.          lda $ba       ;Sekundaer Adr.
  256.          jsr $ed09     ;IEC-Open
  257.          lda $b9       ;Geraetenummer
  258.          jsr $edc7     ;Talk senden
  259.          jsr getbyte   ;=Byte vom IEC-
  260.          jsr getbyte   ;Bus lesen
  261. shwdirlp ldx #5        ;5 Leerzeichen
  262.          jsr tabulatr  ;ausgeben
  263.          jsr srchstrt  ;Start suchen
  264.          jsr blockout  ;Blocks ausgeben
  265.          jsr fnameout  ;Filenamen druck.
  266.          jsr runstop   ;Runstop abfragen
  267.          jmp shwdirlp  ;Schleife
  268.  
  269. ;--------File schliessen
  270.  
  271. close    pla           ;Ruecksprungadr.
  272.          pla           ;loeschen
  273.                        ;= RTS im aufru-
  274.                        ;fenden Programm
  275.  
  276.          jsr $f528     ;Untalk senden
  277.                        ;und Fileclose
  278.          jsr $ffe7     ;Alles schliessen
  279.          lda #0        ;Textnummer 0
  280.          jsr textout
  281.          lda #1        ;Textnummer 1
  282.          jmp textout   ;ausgeben
  283.  
  284. ;--------Byte vom IEC-Bus lesen
  285.  
  286. getbyte  jsr $ee13     ;Byte lesen
  287.          pha           ;merken
  288.          lda $90       ;Status
  289.          lsr a
  290.          lsr a
  291.          pla           ;Byte holen
  292.          bcs close     ;Time out
  293.          rts
  294.  
  295. ;--------Runstop abfragen
  296.  
  297. runstop  jsr $ffe1   ;Runstop?
  298.          beq close   ;ja=>dann Ende
  299.          rts
  300.  
  301. ;--------Zeiger auf Start des Directory
  302.         ;Eintrag setzen
  303.  
  304. srchstrt jsr getbyte ;Byte lesen
  305.          beq srchstgo;=0 dann naechstes
  306.          cmp #1
  307.          bne srchstrt;<>1 dann Schleife
  308. srchstgo jsr getbyte ;Byte lesen
  309.          beq close   ;=0 dann Dir. Ende
  310.          rts
  311.  
  312. ;--------Anzahl der Blocks ausgeben
  313.  
  314. blockout jsr getbyte ;Byte lesen
  315.          sta amem    ;merken
  316.          jsr getbyte ;in Akku high
  317.          ldx amem    ;in xReg low
  318.          jsr intout  ;Integer ausgeben
  319.          lda #32     ;Leerzeichen
  320.          jmp chrout  ;ausgeben
  321.  
  322. ;--------Filename drucken
  323.  
  324. fnameout jsr getbyte ;Byte lesen
  325.          beq fnoutlp ;=0 dann Stringende
  326.          jsr chrout  ;Zeichen ausgeben
  327.          jmp fnameout;Schleife
  328.  
  329. fnoutlp  lda #13     ;Return
  330.          jmp chrout  ;ausgeben
  331.  
  332. ;--------File oeffnen
  333.  
  334. openfile lda #1      ;logische Filenr.
  335.          ldx #8      ;Geraeteadresse
  336.          ldy #0      ;Sekundaeradresse
  337.          jsr fpar    ;setzen
  338.          lda #1      ;Filelaenge
  339.          ldx #<fname
  340.          ldy #>fname
  341.          jsr fnpar   ;Fname setzen
  342.          jmp open    ;File oeffnen
  343.  
  344. fname    .text "$"
  345.  
  346. ;--------Tabulator/Anzahl Leerzeichen
  347.         ;in xReg
  348.  
  349. tabulatr lda #32     ;Leerzeichen
  350.          jsr chrout  ;ausgeben
  351.          dex
  352.          bpl tabulatr
  353.          rts
  354.  
  355. ;--------Text ausgeben
  356.  
  357. textout  asl a          ;Zeiger auf
  358.          tay            ;Tabelle
  359.          lda texttab,y  ;Textadresse
  360.          sta a0         ;nach (a0)
  361.          lda texttab+1,y
  362.          sta a0+1
  363.          lda tpostab,y  ;Scrnadresse
  364.          sta a1         ;nach (a1)
  365.          lda tpostab+1,y
  366.          sta a1+1
  367.          ldy #39        ;40 Zeichen
  368. txtoutlp lda (a0),y     ;lesen
  369.          and #63        ;in ASC wandeln
  370.          ora #128       ;Revers
  371.          sta (a1),y     ;ausgeben
  372.          dey
  373.          bpl txtoutlp
  374.          rts
  375.  
  376. ;--------Pictures anzeigen
  377.  
  378.  
  379. showapic             ;=Einsprung fuer
  380.                      ;Amica-Pictures
  381.          jsr setregs ;Register setzen
  382.          jsr scrnoff ;Screen aus
  383.          jsr depack  ;entpacken
  384.  
  385. showkpic             ;=Einsprung fuer
  386.                      ;Koala-Pictures
  387.          jsr initcols;Farben kopieren
  388.          jsr scrnon  ;Screen an
  389.          jsr graphon ;Graphic an
  390.  
  391. showwait jsr getin   ;auf Tastendruck
  392.          beq showwait;warten
  393.          rts
  394.  
  395. ;--------Register setzen
  396.  
  397. setregs  ldx #3      ;(a0)=Ziel
  398. sregslp  lda regtab,x;(a1)=Destination
  399.          sta a0,x
  400.          dex
  401.          bpl sregslp
  402.          rts
  403.  
  404. ;--------Graphik einschalten
  405.  
  406. graphon  lda #%00111011;Graphik an
  407.          sta vic+17
  408.          lda #%00011000;Seite 1
  409.          sta vic+24
  410.          sta vic+22    ;Multicolor an
  411.          lda #0        ;schwarz
  412.          sta vic+32    ;Rahmenfarbe
  413.          sta vic+33    ;Hintergrund
  414.          rts
  415.  
  416. ;--------Byte schreiben
  417.  
  418. sbyte    ldx #$00
  419.          sta (a0,x)
  420.          inc a0
  421.          bne sbytend
  422.          inc a0+1
  423. sbytend  rts
  424.  
  425. ;--------Byte holen
  426.  
  427. gbyte    ldx #$00
  428.          lda (a1,x)
  429.          inc a1
  430.          bne gbytend
  431.          inc a1+1
  432. gbytend  rts
  433.  
  434. ;--------Amica-Picture entpacken
  435.  
  436. depack   jsr gbyte   ;Byte holen
  437.          cmp #$c2    ;Steuerzeichen
  438.          beq dpackgo0;ja=>dann ausfuehr.
  439.          jsr sbyte   ;Byte schreiben
  440.          jmp depack  ;Schleife
  441.  
  442. ;--------
  443.  
  444. dpackgo0 jsr gbyte   ;Byte holen
  445.          cmp #$00    ;= File-Ende
  446.          beq dpackend;ja=>dann Ende
  447.          tay         ;Anzahl Bytes
  448.          jsr gbyte   ;Byte holen
  449.          pha         ;merken
  450.          tya         ;yReg nach xReg
  451.          tax
  452.          pla         ;holen
  453.          ldy #$00
  454. dpacklp  sta (a0),y  ;und schreiben
  455.          iny
  456.          dex
  457.          bne dpacklp
  458.          tya         ;Counter zu Desti-
  459.          clc         ;nation addieren
  460.          adc a0
  461.          sta a0
  462.          bcc depack  ;zur Schleife
  463.          inc a0+1
  464.          jmp depack  ;zur Schleife
  465.  
  466. dpackend rts
  467.  
  468. ;--------Farben kopieren
  469.  
  470. initcols clc         ;(a0) auf Farben
  471.          lda regtab  ;fuer Screen setzen
  472.          adc #$40    ;Bildanfang + $1f40
  473.          sta a0
  474.          lda regtab+1
  475.          adc #$1f
  476.          sta a0+1
  477.  
  478.          clc         ;(a1) auf Farben
  479.          lda a0      ;fuer Colorram
  480.          adc #$e8    ;(a0) + 1000
  481.          sta a1
  482.          lda a0+1
  483.          adc #$03
  484.          sta a1+1
  485.  
  486.          lda #0      ;(a2)=Screen
  487.          sta a2      ;(a3)=Colorram
  488.          sta a3
  489.          lda #$04
  490.          sta a2+1
  491.          lda #$d8
  492.          sta a3+1
  493.  
  494.          ldx #3     ;KopierSchleife
  495.          ldy #0     ;fuer 4 Blocks
  496. icolslp  lda (a0),y ;=$0400 Bytes
  497.          sta (a2),y
  498.          lda (a1),y
  499.          sta (a3),y
  500.          iny
  501.          bne icolslp
  502.          inc a0+1
  503.          inc a1+1
  504.          inc a2+1
  505.          inc a3+1
  506.          dex
  507.          bpl icolslp
  508.          rts
  509.  
  510. ;--------Screen abschalten
  511.  
  512. scrnoff  jsr waitrast
  513.          lda vic+17
  514.          and #%11101111
  515.          sta vic+17
  516.          rts
  517.  
  518. ;--------Screen einschalten
  519.  
  520. scrnon   jsr waitrast
  521.          lda vic+17
  522.          ora #%00010000
  523.          sta vic+17
  524.          rts
  525.  
  526. ;--------auf Rasterstrahlposition warten
  527.  
  528. waitrast lda #255
  529.          cmp vic+18
  530.          bne waitrast
  531.          rts
  532.  
  533. ;--------
  534.  
  535. regtab   .word $2000 ;entpacktes File
  536.          .word $4a00 ;gepacktes File
  537.  
  538. texttab  .word text00,text01
  539.  
  540. tpostab  .word screen
  541.          .word screen+(40*24)
  542.  
  543. text00   .text "amica-picture-shower"
  544.          .text " by dark mights 1992"
  545.  
  546. text01   .text "move cursor to any "
  547.          .text "file and hit return! "
  548.  
  549. fnlen    .byte 0
  550. filename .text "                "
  551.  
  552.          ;"?pic "
  553. koalaprf .byte $3f,$50,$49,$43,$20
  554.  
  555.          ;"[b]"
  556. amicaprf .byte $5b,$42,$5d
  557.  
  558.