Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DEFINT A-Z
- DECLARE FUNCTION MPUInit% ()
- DECLARE SUB MPUData (v%)
- DECLARE SUB MPUCmd (v%)
- DECLARE SUB PitchBendSensitivity (ch%, v%)
- DIM SHARED MPUPort AS INTEGER, MPUError AS INTEGER
- MPUPort = &H330
- DIM SHARED keyMap(127)
- DATA 44,31,45,32,46,47,34,48,35,49,36,50,51,38,52,39,-1
- DATA 16,3,17,4,18,19,6,20,7,21,8,22,23,10,24,11,25,-1
- FOR i = 0 TO 127: keyMap(i) = -1: NEXT
- i = 0
- DO
- READ j: IF j = -1 THEN EXIT DO
- keyMap(j) = i: i = i + 1
- LOOP
- i = 12
- DO
- READ j: IF j = -1 THEN EXIT DO
- keyMap(j) = i: i = i + 1
- LOOP
- ch = 0: oct = 5
- CLS
- i = MPUInit
- MPUData &HC0 + ch
- MPUData 4
- MPUData &HC0 + ch + 1
- MPUData 4
- PitchBendSensitivity ch, 12
- PitchBendSensitivity ch + 1, 12
- MPUData &HE0 + ch
- MPUData 0
- MPUData 64
- MPUData &HE0 + ch + 1
- MPUData 64
- MPUData 64
- DO
- DEF SEG = 65: kF& = PEEK(8): kF& = (kF& * 256) + PEEK(7): DEF SEG
- DO
- kB = INP(96)
- IF kB = kBLast THEN kB = 0: EXIT DO ELSE kBLast = kB
- k = kB AND 127
- SELECT CASE k
- CASE 1 ' ESC
- GOTO quit
- CASE 53 ' /
- IF kB < 128 AND oct > 0 THEN oct = oct - 1
- CASE 55 ' *
- IF kB < 128 AND oct < 9 THEN oct = oct + 1
- CASE ELSE
- i = keyMap(k)
- IF i >= 0 THEN
- IF kB >= 128 THEN MPUData &H80 + ch ELSE MPUData &H90 + ch
- MPUData ((oct * 12) + i)
- MPUData 127
- IF kB >= 128 THEN MPUData &H80 + ch + 1 ELSE MPUData &H90 + ch + 1
- MPUData ((oct * 12) + i)
- MPUData 127
- ELSE
- 'PRINT kB
- END IF
- END SELECT
- LOOP
- LOOP
- quit:
- FOR j = ch TO ch + 1
- FOR i = 0 TO 127
- MPUData &H80 + j
- MPUData i
- MPUData 127
- NEXT
- NEXT
- SUB MPUCmd (v%)
- IF MPUError <> 0 THEN EXIT SUB
- t! = TIMER + 1
- DO WHILE (INP(MPUPort + 1) AND &H40) <> 0
- IF (INP(MPUPort + 1) AND &H80) = 0 THEN i = INP(MPUPort)
- IF TIMER >= t! THEN MPUError = -1: EXIT SUB
- LOOP
- OUT MPUPort + 1, v%
- t! = TIMER + 1
- DO
- DO WHILE (INP(MPUPort + 1) AND &H80) <> 0
- IF TIMER >= t! THEN MPUError = -1: EXIT SUB
- LOOP
- IF TIMER >= t! THEN MPUError = -1: EXIT SUB
- LOOP WHILE INP(MPUPort) <> &HFE
- END SUB
- SUB MPUData (v%)
- IF MPUError <> 0 THEN EXIT SUB
- t! = TIMER + 1
- DO WHILE (INP(MPUPort + 1) AND &H40) <> 0
- IF (INP(MPUPort + 1) AND &H80) = 0 THEN i = INP(MPUPort)
- IF TIMER >= t! THEN MPUError = -1: EXIT SUB
- LOOP
- OUT MPUPort, v%
- END SUB
- FUNCTION MPUInit%
- MPUCmd &HFF
- MPUCmd &H3F
- MPUInit% = MPUError
- END FUNCTION
- SUB PitchBendSensitivity (ch%, v%)
- MPUData &HB0 + ch%
- MPUData 101
- MPUData &H0
- MPUData &HB0 + ch%
- MPUData 100
- MPUData &H0
- MPUData &HB0 + ch%
- MPUData &H6
- MPUData v%
- MPUData &HB0 + ch%
- MPUData &H26
- MPUData &H0
- END SUB
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement