home *** CD-ROM | disk | FTP | other *** search
/ 64'er Special 31 / 64er_Magazin_Sonderheft_31_19xx_Markt__Technik_de.d64 / midi.src < prev    next >
Text File  |  2022-10-26  |  4KB  |  243 lines

  1.  
  2.      ;labeltabelle
  3.  
  4.      chrout     = $ffd2
  5.      reset      = $fce2
  6.      chckom     = $aefd
  7.      getbyte    = $b79e
  8.      irqende    = $ea81
  9.  
  10.      auspuff    = $cf00
  11.      einpuff    = $ce00
  12.  
  13. ;---------------------------------------
  14.  
  15.      ctrlreg    = $de04
  16.      outreg     = $de05
  17.      statreg    = $de06
  18.      inreg      = $de07
  19.  
  20.  
  21.      * = $cb00
  22.  
  23. ;=======================================
  24.  
  25.  
  26.  
  27. init    lda #3        ; master reset
  28.         sta ctrlreg
  29.  
  30.         lda #%10010110
  31.         sta ctrlreg  ;teilerverh.1:64
  32.                      ;8 Datenbit
  33.                      ;1 Stopbit
  34.                      ;keine parity
  35.                      ;Sende-IRQ gesperrt
  36.                      ;Empfangs-IRQ frei
  37.  
  38.  
  39.         jmp start
  40.  
  41.  
  42. vek     .byte 0,0
  43. einptr1 .byte 0
  44. einptr2 .byte 0
  45. ausptr1 .byte 0
  46. ausptr2 .byte 0
  47.  
  48. ;---------------------------------------
  49.  
  50.   ;basic einspruenge
  51.  
  52.  
  53. byteput jsr chckom    ;zu midi
  54.         jsr getbyte
  55.         txa
  56.         jmp obbein
  57.  
  58. ;------
  59.  
  60. byteget php           ;von midi
  61.         sei
  62.         jsr ibbaus
  63.         plp
  64.         rts
  65.  
  66. ;=======================================
  67.  
  68.                       ;midi byte out
  69. byteout pha           ; byte retten
  70.         lda statreg
  71.         and #2
  72.         beq byteout+1
  73.         pla
  74.         sta outreg
  75.         rts
  76.  
  77. ;---------------------------------------
  78.  
  79.                      ;midi byte in
  80. ibbein  lda statreg
  81.         lsr a
  82.         bcc keinsda
  83.         lda inreg
  84.         sei
  85.         ldy einptr2
  86.         sta einpuff,y
  87.         iny
  88.         sty einptr2
  89. keinsda rts
  90.  
  91. ;---------------------------------------
  92.  
  93.  
  94.         ;byte aus einpuff in akku holen
  95.  
  96. ibbaus  php
  97.         sei
  98.         ldy einptr1
  99.         cpy einptr2
  100.         bne ok
  101.         ldy #1
  102.         jmp nixda
  103. ok      lda einpuff,y
  104.         iny
  105.         sty einptr1
  106.         ldy #0
  107. nixda   plp
  108.         rts
  109.  
  110. ;---------------------------------------
  111.  
  112.  
  113.        ;byte aus akku in auspuff stecken
  114.  
  115.  
  116. obbein  php
  117.         sei
  118.         ldy ausptr2
  119.         sta auspuff,y
  120.         iny
  121.         sty ausptr2
  122.         jsr ggfaus   ; Versuchen,
  123.                        unmittelbar
  124.                        auszugeben
  125.         plp
  126.         rts
  127. ;---------------------------------------
  128.  
  129.        ;byte aus auspuff uebertragen
  130.  
  131. obbaus  php
  132.         sei
  133.         ldy ausptr1
  134.         lda auspuff,y
  135.         iny
  136.         sty ausptr1
  137.         jsr byteout
  138.         plp
  139.         rts
  140.  
  141. ;---------------------------------------
  142.         ;Senderegister frei ? Dann
  143.         ;pruefen ob Byte im Ausgabe-
  144.         ;puffer, ggf. ausgeben
  145.  
  146. ggfaus  php
  147.         sei
  148.         lda statreg
  149.         and #2
  150.         beq ausgang
  151.         lda ausptr1
  152.         cmp ausptr2
  153.         beq ausgang
  154.         jsr obbaus
  155. ausgang plp
  156.         rts
  157.  
  158.  
  159.  
  160.  
  161. ;---------------------------------------
  162.  
  163.                      ; string out
  164. strout  pla
  165.         sta $f7
  166.         pla
  167.         sta $f8
  168. hoch    ldy #$00
  169.         inc $f7
  170.         bne nocarry
  171.         inc $f8
  172. nocarry lda ($f7),y
  173.         beq exit
  174.         jsr chrout
  175.         jmp hoch
  176. exit    lda $f8
  177.         pha
  178.         lda $f7
  179.         pha
  180.         rts
  181.  
  182.  
  183.  
  184.  
  185. ;=======================================
  186.  
  187. irq     lda statreg      ;midi irq?
  188.         bmi midirq       ;ja =>
  189.         jmp (vek)        ;alte irq
  190. midirq  jsr ibbein       ;byte von midi
  191.         jsr ggfaus       ;byte zu midi
  192.         jmp irqende      ;ROM-Routine
  193.  
  194. hflag   .byte 0
  195.  
  196. start   sei
  197.         ldx hflag
  198.         bne initret
  199.         inx
  200.         stx hflag
  201.         lda $314
  202.         sta vek
  203.         lda $315
  204.         sta vek+1
  205.         lda #<irq
  206.         sta $314
  207.         lda #>irq
  208.         sta $315
  209. initret lda ausptr1
  210.         sta ausptr2
  211.         lda einptr1
  212.         sta einptr2
  213.         cli
  214.         rts
  215.  
  216. ;===================================
  217.  
  218.  
  219.     .end
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.