Home » Archimedes archive » Acorn User » AU 1996-12 B.adf » Regulars_2 » StarInfo/Clifford/!Macros/MacroCode/s/CDSrc

StarInfo/Clifford/!Macros/MacroCode/s/CDSrc

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1996-12 B.adf » Regulars_2
Filename: StarInfo/Clifford/!Macros/MacroCode/s/CDSrc
Read OK:
File size: 0F6B bytes
Load address: 0000
Exec address: 0000
File contents
   10DIM code% &1000
   20
   30FOR pass%=%1000 TO %1010 STEP 2
   40P%=code%:L%=code%+&1000
   50[   opt     pass%
   60    equs    "MCDE"
   70    equd    name - code%
   71    equd    description - code%
   80    equd    initialise - code%
   81    equd    0
   90    equd    key_code - code%
  120
  130.name
  140    equs    "CDControl"
  150    equb    0
  160
  170.description
  180    equs    "CD controller"
  190    equb    9
  200    equs    "0.03 (21 May 1996)"
  210    equb    0
  220    align
  230
  240.initialise
  250    stmfd   r13!, {r14}
  260    mov     r0, #0
  270    swi     "XCDFS_ConvertDriveToDevice"
  280    adr     r0, control_block
  290    and     r2, r1, #&00000008
  300    str     r2, [r0, #0]
  310    and     r2, r1, #&00000018
  320    mov     r2, r2, lsr #3
  330    str     r2, [r0, #4]
  340    and     r2, r1, #&000000e0
  350    mov     r2, r2, lsr #5
  360    str     r2, [r0, #8]
  370    and     r2, r1, #&0000ff00
  380    mov     r2, r2, lsr #8
  390    str     r2, [r0, #12]
  400    ldr     r3, hex_value
  410    and     r2, r1, r3
  420    mov     r2, r2, lsr #16
  430    str     r2, [r0, #16]
  440    ldmfd   r13!, {pc}^
  450.hex_value
  460    equd    &ffff0000
  470
  480.key_code
  490    ;       0 = play from start
  500    ;       1 = stop playing
  510    ;       2 = back a track
  520    ;       3 = forward a track
  530    ;       4 = eject disc
  680    stmfd   r13!, {r14}
  700    ldrb    r1, [r0, #0]
  710    subs    r1, r1, #ASC"0"
  720    ldmltfd r13!, {pc}^
  730    cmp     r1, #(key_code_table_end - key_code_table)/4
  740    addcc   pc, pc, r1, lsl #2
  750    ldmfd   r13!, {pc}^
  760.key_code_table
  770    b       start_playing
  780    b       stop_playing
  790    b       back_track
  800    b       forward_track
  810    b       eject_disc
  820.key_code_table_end
  830    ldmfd   r13!, {pc}^
  840
  850.start_playing
  860    mov     r0, #0
  870    adr     r1, track_block
  880    adr     r7, control_block
  890    swi     "XCD_EnquireTrack"
  900    ldrb    r0, [r1, #0]
  910    swi     "XCD_EnquireTrack"
  920    ldrb    r1, [r1, #4]
  930    ands    r1, r1, #1
  940    ldmnefd r13!, {pc}^
  950    mov     r1, #255
  960    swi     "XCD_PlayTrack"
  970    ldmfd   r13!, {pc}^
  980
  990.stop_playing
 1000    adr     r7, control_block
 1010    swi     "XCD_StopDisc"
 1020    ldmfd   r13!, {pc}^
 1030
 1040.back_track
 1050    bl      current_track
 1060    sub     r0, r0, #1
 1070    cmp     r0, r10
 1080    ldmltfd r13!, {pc}^
 1090    mov     r1, #255
 1100    adr     r7, control_block
 1110    swi     "XCD_PlayTrack"
 1120    ldmfd   r13!, {pc}^
 1130
 1140.forward_track
 1150    bl      current_track
 1160    add     r0, r0, #1
 1170    cmp     r0, r11
 1180    ldmgtfd r13!, {pc}^
 1190    mov     r1, #255
 1200    adr     r7, control_block
 1210    swi     "XCD_PlayTrack"
 1220    ldmfd   r13!, {pc}^
 1230
 1240.eject_disc
 1250    adr     r7, control_block
 1260    swi     "XCD_OpenDrawer"
 1270    ldmfd   r13!, {pc}^
 1280
 1290.current_track
 1300    stmfd   r13!, {r1, r7-r9, r14}
 1310    mov     r0, #0
 1320    adr     r1, track_block
 1330    adr     r7, control_block
 1340    swi     "XCD_EnquireTrack"
 1350    ldrb    r10, [r1, #0] ; first track
 1360    ldrb    r11, [r1, #1] ; last track
 1370    mov     r0, #0
 1380    swi     "XCD_EnquireAddress"
 1390    mov     r9, r0 ; current address
 1400    mov     r0, r10
 1410    mov     r0, #1
 1420    adr     r1, track_block
 1430.current_track_loop
 1440    swi     "XCD_EnquireTrack"
 1450    ldr     r8, [r1, #0]
 1460    cmp     r8, r9
 1470    bgt     found_current_track
 1480    add     r0, r0, #1
 1490    cmp     r0, r11
 1500    ble     current_track_loop
 1510    mov     r0, r11
 1520    ldmfd   r13!, {r1, r7-r9, pc}^
 1530.found_current_track
 1540    sub     r0, r0, #1
 1550    cmp     r0, r11
 1560    movgt   r0, r11
 1570    cmp     r0, r10
 1580    movlt   r0, r10
 1590    ldmfd   r13!, {r1, r7-r9, pc}^
 1600
 1610.control_block
 1620    equd    0
 1630    equd    0
 1640    equd    0
 1650    equd    0
 1660    equd    0
 1670.track_block
 1680    equd    0
 1690    equb    0
 1700]
 1710NEXT
 1720
 1730SYS "OS_File", 10, "CDcontrol", &ffd, , code%, P%
 1740END

� code% &1000

� pass%=%1000 � %1010 � 2
(P%=code%:L%=code%+&1000
2[   opt     pass%
<    equs    "MCDE"
F    equd    name - code%
G#    equd    description - code%
P"    equd    initialise - code%
Q    equd    0
Z     equd    key_code - code%
x
�	.name
�    equs    "CDControl"
�    equb    0
�
�.description
�    equs    "CD controller"
�    equb    9
�$    equs    "0.03 (21 May 1996)"
�    equb    0
�
    align
�
�.initialise
�    stmfd   r13!, {r14}
    mov     r0, #0
,    swi     "XCDFS_ConvertDriveToDevice"
!    adr     r0, control_block
""    and     r2, r1, #&00000008
,    str     r2, [r0, #0]
6"    and     r2, r1, #&00000018
@    mov     r2, r2, lsr #3
J    str     r2, [r0, #4]
T"    and     r2, r1, #&000000e0
^    mov     r2, r2, lsr #5
h    str     r2, [r0, #8]
r"    and     r2, r1, #&0000ff00
|    mov     r2, r2, lsr #8
�    str     r2, [r0, #12]
�    ldr     r3, hex_value
�    and     r2, r1, r3
�    mov     r2, r2, lsr #16
�    str     r2, [r0, #16]
�    ldmfd   r13!, {pc}^
�.hex_value
�    equd    &ffff0000
�
�
.key_code
�#    ;       0 = play from start
�     ;       1 = stop playing
�     ;       2 = back a track
#    ;       3 = forward a track
    ;       4 = eject disc
�    stmfd   r13!, {r14}
�    ldrb    r1, [r0, #0]
�    subs    r1, r1, #�"0"
�    ldmltfd r13!, {pc}^
�<    cmp     r1, #(key_code_table_end - key_code_table)/4
�"    addcc   pc, pc, r1, lsl #2
�    ldmfd   r13!, {pc}^
�.key_code_table
    b       start_playing
    b       stop_playing
    b       back_track
     b       forward_track
*    b       eject_disc
4.key_code_table_end
>    ldmfd   r13!, {pc}^
H
R.start_playing
\    mov     r0, #0
f    adr     r1, track_block
p!    adr     r7, control_block
z"    swi     "XCD_EnquireTrack"
�    ldrb    r0, [r1, #0]
�"    swi     "XCD_EnquireTrack"
�    ldrb    r1, [r1, #4]
�    ands    r1, r1, #1
�    ldmnefd r13!, {pc}^
�    mov     r1, #255
�    swi     "XCD_PlayTrack"
�    ldmfd   r13!, {pc}^
�
�.stop_playing
�!    adr     r7, control_block
�    swi     "XCD_StopDisc"
�    ldmfd   r13!, {pc}^

.back_track
    bl      current_track
$    sub     r0, r0, #1
.    cmp     r0, r10
8    ldmltfd r13!, {pc}^
B    mov     r1, #255
L!    adr     r7, control_block
V    swi     "XCD_PlayTrack"
`    ldmfd   r13!, {pc}^
j
t.forward_track
~    bl      current_track
�    add     r0, r0, #1
�    cmp     r0, r11
�    ldmgtfd r13!, {pc}^
�    mov     r1, #255
�!    adr     r7, control_block
�    swi     "XCD_PlayTrack"
�    ldmfd   r13!, {pc}^
�
�.eject_disc
�!    adr     r7, control_block
�     swi     "XCD_OpenDrawer"
�    ldmfd   r13!, {pc}^


.current_track
&    stmfd   r13!, {r1, r7-r9, r14}
    mov     r0, #0
(    adr     r1, track_block
2!    adr     r7, control_block
<"    swi     "XCD_EnquireTrack"
F+    ldrb    r10, [r1, #0] ; first track
P*    ldrb    r11, [r1, #1] ; last track
Z    mov     r0, #0
d$    swi     "XCD_EnquireAddress"
n(    mov     r9, r0 ; current address
x    mov     r0, r10
�    mov     r0, #1
�    adr     r1, track_block
�.current_track_loop
�"    swi     "XCD_EnquireTrack"
�    ldr     r8, [r1, #0]
�    cmp     r8, r9
�#    bgt     found_current_track
�    add     r0, r0, #1
�    cmp     r0, r11
�"    ble     current_track_loop
�    mov     r0, r11
�&    ldmfd   r13!, {r1, r7-r9, pc}^
�.found_current_track
    sub     r0, r0, #1
    cmp     r0, r11
    movgt   r0, r11
"    cmp     r0, r10
,    movlt   r0, r10
6&    ldmfd   r13!, {r1, r7-r9, pc}^
@
J.control_block
T    equd    0
^    equd    0
h    equd    0
r    equd    0
|    equd    0
�.track_block
�    equd    0
�    equb    0
�]
��
�
�4ș "OS_File", 10, "CDcontrol", &ffd, , code%, P%
��
�
00000000  0d 00 0a 11 de 20 63 6f  64 65 25 20 26 31 30 30  |..... code% &100|
00000010  30 0d 00 14 04 0d 00 1e  1d e3 20 70 61 73 73 25  |0......... pass%|
00000020  3d 25 31 30 30 30 20 b8  20 25 31 30 31 30 20 88  |=%1000 . %1010 .|
00000030  20 32 0d 00 28 1b 50 25  3d 63 6f 64 65 25 3a 4c  | 2..(.P%=code%:L|
00000040  25 3d 63 6f 64 65 25 2b  26 31 30 30 30 0d 00 32  |%=code%+&1000..2|
00000050  15 5b 20 20 20 6f 70 74  20 20 20 20 20 70 61 73  |.[   opt     pas|
00000060  73 25 0d 00 3c 16 20 20  20 20 65 71 75 73 20 20  |s%..<.    equs  |
00000070  20 20 22 4d 43 44 45 22  0d 00 46 1c 20 20 20 20  |  "MCDE"..F.    |
00000080  65 71 75 64 20 20 20 20  6e 61 6d 65 20 2d 20 63  |equd    name - c|
00000090  6f 64 65 25 0d 00 47 23  20 20 20 20 65 71 75 64  |ode%..G#    equd|
000000a0  20 20 20 20 64 65 73 63  72 69 70 74 69 6f 6e 20  |    description |
000000b0  2d 20 63 6f 64 65 25 0d  00 50 22 20 20 20 20 65  |- code%..P"    e|
000000c0  71 75 64 20 20 20 20 69  6e 69 74 69 61 6c 69 73  |qud    initialis|
000000d0  65 20 2d 20 63 6f 64 65  25 0d 00 51 11 20 20 20  |e - code%..Q.   |
000000e0  20 65 71 75 64 20 20 20  20 30 0d 00 5a 20 20 20  | equd    0..Z   |
000000f0  20 20 65 71 75 64 20 20  20 20 6b 65 79 5f 63 6f  |  equd    key_co|
00000100  64 65 20 2d 20 63 6f 64  65 25 0d 00 78 04 0d 00  |de - code%..x...|
00000110  82 09 2e 6e 61 6d 65 0d  00 8c 1b 20 20 20 20 65  |...name....    e|
00000120  71 75 73 20 20 20 20 22  43 44 43 6f 6e 74 72 6f  |qus    "CDContro|
00000130  6c 22 0d 00 96 11 20 20  20 20 65 71 75 62 20 20  |l"....    equb  |
00000140  20 20 30 0d 00 a0 04 0d  00 aa 10 2e 64 65 73 63  |  0.........desc|
00000150  72 69 70 74 69 6f 6e 0d  00 b4 1f 20 20 20 20 65  |ription....    e|
00000160  71 75 73 20 20 20 20 22  43 44 20 63 6f 6e 74 72  |qus    "CD contr|
00000170  6f 6c 6c 65 72 22 0d 00  be 11 20 20 20 20 65 71  |oller"....    eq|
00000180  75 62 20 20 20 20 39 0d  00 c8 24 20 20 20 20 65  |ub    9...$    e|
00000190  71 75 73 20 20 20 20 22  30 2e 30 33 20 28 32 31  |qus    "0.03 (21|
000001a0  20 4d 61 79 20 31 39 39  36 29 22 0d 00 d2 11 20  | May 1996)".... |
000001b0  20 20 20 65 71 75 62 20  20 20 20 30 0d 00 dc 0d  |   equb    0....|
000001c0  20 20 20 20 61 6c 69 67  6e 0d 00 e6 04 0d 00 f0  |    align.......|
000001d0  0f 2e 69 6e 69 74 69 61  6c 69 73 65 0d 00 fa 1b  |..initialise....|
000001e0  20 20 20 20 73 74 6d 66  64 20 20 20 72 31 33 21  |    stmfd   r13!|
000001f0  2c 20 7b 72 31 34 7d 0d  01 04 16 20 20 20 20 6d  |, {r14}....    m|
00000200  6f 76 20 20 20 20 20 72  30 2c 20 23 30 0d 01 0e  |ov     r0, #0...|
00000210  2c 20 20 20 20 73 77 69  20 20 20 20 20 22 58 43  |,    swi     "XC|
00000220  44 46 53 5f 43 6f 6e 76  65 72 74 44 72 69 76 65  |DFS_ConvertDrive|
00000230  54 6f 44 65 76 69 63 65  22 0d 01 18 21 20 20 20  |ToDevice"...!   |
00000240  20 61 64 72 20 20 20 20  20 72 30 2c 20 63 6f 6e  | adr     r0, con|
00000250  74 72 6f 6c 5f 62 6c 6f  63 6b 0d 01 22 22 20 20  |trol_block..""  |
00000260  20 20 61 6e 64 20 20 20  20 20 72 32 2c 20 72 31  |  and     r2, r1|
00000270  2c 20 23 26 30 30 30 30  30 30 30 38 0d 01 2c 1c  |, #&00000008..,.|
00000280  20 20 20 20 73 74 72 20  20 20 20 20 72 32 2c 20  |    str     r2, |
00000290  5b 72 30 2c 20 23 30 5d  0d 01 36 22 20 20 20 20  |[r0, #0]..6"    |
000002a0  61 6e 64 20 20 20 20 20  72 32 2c 20 72 31 2c 20  |and     r2, r1, |
000002b0  23 26 30 30 30 30 30 30  31 38 0d 01 40 1e 20 20  |#&00000018..@.  |
000002c0  20 20 6d 6f 76 20 20 20  20 20 72 32 2c 20 72 32  |  mov     r2, r2|
000002d0  2c 20 6c 73 72 20 23 33  0d 01 4a 1c 20 20 20 20  |, lsr #3..J.    |
000002e0  73 74 72 20 20 20 20 20  72 32 2c 20 5b 72 30 2c  |str     r2, [r0,|
000002f0  20 23 34 5d 0d 01 54 22  20 20 20 20 61 6e 64 20  | #4]..T"    and |
00000300  20 20 20 20 72 32 2c 20  72 31 2c 20 23 26 30 30  |    r2, r1, #&00|
00000310  30 30 30 30 65 30 0d 01  5e 1e 20 20 20 20 6d 6f  |0000e0..^.    mo|
00000320  76 20 20 20 20 20 72 32  2c 20 72 32 2c 20 6c 73  |v     r2, r2, ls|
00000330  72 20 23 35 0d 01 68 1c  20 20 20 20 73 74 72 20  |r #5..h.    str |
00000340  20 20 20 20 72 32 2c 20  5b 72 30 2c 20 23 38 5d  |    r2, [r0, #8]|
00000350  0d 01 72 22 20 20 20 20  61 6e 64 20 20 20 20 20  |..r"    and     |
00000360  72 32 2c 20 72 31 2c 20  23 26 30 30 30 30 66 66  |r2, r1, #&0000ff|
00000370  30 30 0d 01 7c 1e 20 20  20 20 6d 6f 76 20 20 20  |00..|.    mov   |
00000380  20 20 72 32 2c 20 72 32  2c 20 6c 73 72 20 23 38  |  r2, r2, lsr #8|
00000390  0d 01 86 1d 20 20 20 20  73 74 72 20 20 20 20 20  |....    str     |
000003a0  72 32 2c 20 5b 72 30 2c  20 23 31 32 5d 0d 01 90  |r2, [r0, #12]...|
000003b0  1d 20 20 20 20 6c 64 72  20 20 20 20 20 72 33 2c  |.    ldr     r3,|
000003c0  20 68 65 78 5f 76 61 6c  75 65 0d 01 9a 1a 20 20  | hex_value....  |
000003d0  20 20 61 6e 64 20 20 20  20 20 72 32 2c 20 72 31  |  and     r2, r1|
000003e0  2c 20 72 33 0d 01 a4 1f  20 20 20 20 6d 6f 76 20  |, r3....    mov |
000003f0  20 20 20 20 72 32 2c 20  72 32 2c 20 6c 73 72 20  |    r2, r2, lsr |
00000400  23 31 36 0d 01 ae 1d 20  20 20 20 73 74 72 20 20  |#16....    str  |
00000410  20 20 20 72 32 2c 20 5b  72 30 2c 20 23 31 36 5d  |   r2, [r0, #16]|
00000420  0d 01 b8 1b 20 20 20 20  6c 64 6d 66 64 20 20 20  |....    ldmfd   |
00000430  72 31 33 21 2c 20 7b 70  63 7d 5e 0d 01 c2 0e 2e  |r13!, {pc}^.....|
00000440  68 65 78 5f 76 61 6c 75  65 0d 01 cc 19 20 20 20  |hex_value....   |
00000450  20 65 71 75 64 20 20 20  20 26 66 66 66 66 30 30  | equd    &ffff00|
00000460  30 30 0d 01 d6 04 0d 01  e0 0d 2e 6b 65 79 5f 63  |00.........key_c|
00000470  6f 64 65 0d 01 ea 23 20  20 20 20 3b 20 20 20 20  |ode...#    ;    |
00000480  20 20 20 30 20 3d 20 70  6c 61 79 20 66 72 6f 6d  |   0 = play from|
00000490  20 73 74 61 72 74 0d 01  f4 20 20 20 20 20 3b 20  | start...     ; |
000004a0  20 20 20 20 20 20 31 20  3d 20 73 74 6f 70 20 70  |      1 = stop p|
000004b0  6c 61 79 69 6e 67 0d 01  fe 20 20 20 20 20 3b 20  |laying...     ; |
000004c0  20 20 20 20 20 20 32 20  3d 20 62 61 63 6b 20 61  |      2 = back a|
000004d0  20 74 72 61 63 6b 0d 02  08 23 20 20 20 20 3b 20  | track...#    ; |
000004e0  20 20 20 20 20 20 33 20  3d 20 66 6f 72 77 61 72  |      3 = forwar|
000004f0  64 20 61 20 74 72 61 63  6b 0d 02 12 1e 20 20 20  |d a track....   |
00000500  20 3b 20 20 20 20 20 20  20 34 20 3d 20 65 6a 65  | ;       4 = eje|
00000510  63 74 20 64 69 73 63 0d  02 a8 1b 20 20 20 20 73  |ct disc....    s|
00000520  74 6d 66 64 20 20 20 72  31 33 21 2c 20 7b 72 31  |tmfd   r13!, {r1|
00000530  34 7d 0d 02 bc 1c 20 20  20 20 6c 64 72 62 20 20  |4}....    ldrb  |
00000540  20 20 72 31 2c 20 5b 72  30 2c 20 23 30 5d 0d 02  |  r1, [r0, #0]..|
00000550  c6 1d 20 20 20 20 73 75  62 73 20 20 20 20 72 31  |..    subs    r1|
00000560  2c 20 72 31 2c 20 23 97  22 30 22 0d 02 d0 1b 20  |, r1, #."0".... |
00000570  20 20 20 6c 64 6d 6c 74  66 64 20 72 31 33 21 2c  |   ldmltfd r13!,|
00000580  20 7b 70 63 7d 5e 0d 02  da 3c 20 20 20 20 63 6d  | {pc}^...<    cm|
00000590  70 20 20 20 20 20 72 31  2c 20 23 28 6b 65 79 5f  |p     r1, #(key_|
000005a0  63 6f 64 65 5f 74 61 62  6c 65 5f 65 6e 64 20 2d  |code_table_end -|
000005b0  20 6b 65 79 5f 63 6f 64  65 5f 74 61 62 6c 65 29  | key_code_table)|
000005c0  2f 34 0d 02 e4 22 20 20  20 20 61 64 64 63 63 20  |/4..."    addcc |
000005d0  20 20 70 63 2c 20 70 63  2c 20 72 31 2c 20 6c 73  |  pc, pc, r1, ls|
000005e0  6c 20 23 32 0d 02 ee 1b  20 20 20 20 6c 64 6d 66  |l #2....    ldmf|
000005f0  64 20 20 20 72 31 33 21  2c 20 7b 70 63 7d 5e 0d  |d   r13!, {pc}^.|
00000600  02 f8 13 2e 6b 65 79 5f  63 6f 64 65 5f 74 61 62  |....key_code_tab|
00000610  6c 65 0d 03 02 1d 20 20  20 20 62 20 20 20 20 20  |le....    b     |
00000620  20 20 73 74 61 72 74 5f  70 6c 61 79 69 6e 67 0d  |  start_playing.|
00000630  03 0c 1c 20 20 20 20 62  20 20 20 20 20 20 20 73  |...    b       s|
00000640  74 6f 70 5f 70 6c 61 79  69 6e 67 0d 03 16 1a 20  |top_playing.... |
00000650  20 20 20 62 20 20 20 20  20 20 20 62 61 63 6b 5f  |   b       back_|
00000660  74 72 61 63 6b 0d 03 20  1d 20 20 20 20 62 20 20  |track.. .    b  |
00000670  20 20 20 20 20 66 6f 72  77 61 72 64 5f 74 72 61  |     forward_tra|
00000680  63 6b 0d 03 2a 1a 20 20  20 20 62 20 20 20 20 20  |ck..*.    b     |
00000690  20 20 65 6a 65 63 74 5f  64 69 73 63 0d 03 34 17  |  eject_disc..4.|
000006a0  2e 6b 65 79 5f 63 6f 64  65 5f 74 61 62 6c 65 5f  |.key_code_table_|
000006b0  65 6e 64 0d 03 3e 1b 20  20 20 20 6c 64 6d 66 64  |end..>.    ldmfd|
000006c0  20 20 20 72 31 33 21 2c  20 7b 70 63 7d 5e 0d 03  |   r13!, {pc}^..|
000006d0  48 04 0d 03 52 12 2e 73  74 61 72 74 5f 70 6c 61  |H...R..start_pla|
000006e0  79 69 6e 67 0d 03 5c 16  20 20 20 20 6d 6f 76 20  |ying..\.    mov |
000006f0  20 20 20 20 72 30 2c 20  23 30 0d 03 66 1f 20 20  |    r0, #0..f.  |
00000700  20 20 61 64 72 20 20 20  20 20 72 31 2c 20 74 72  |  adr     r1, tr|
00000710  61 63 6b 5f 62 6c 6f 63  6b 0d 03 70 21 20 20 20  |ack_block..p!   |
00000720  20 61 64 72 20 20 20 20  20 72 37 2c 20 63 6f 6e  | adr     r7, con|
00000730  74 72 6f 6c 5f 62 6c 6f  63 6b 0d 03 7a 22 20 20  |trol_block..z"  |
00000740  20 20 73 77 69 20 20 20  20 20 22 58 43 44 5f 45  |  swi     "XCD_E|
00000750  6e 71 75 69 72 65 54 72  61 63 6b 22 0d 03 84 1c  |nquireTrack"....|
00000760  20 20 20 20 6c 64 72 62  20 20 20 20 72 30 2c 20  |    ldrb    r0, |
00000770  5b 72 31 2c 20 23 30 5d  0d 03 8e 22 20 20 20 20  |[r1, #0]..."    |
00000780  73 77 69 20 20 20 20 20  22 58 43 44 5f 45 6e 71  |swi     "XCD_Enq|
00000790  75 69 72 65 54 72 61 63  6b 22 0d 03 98 1c 20 20  |uireTrack"....  |
000007a0  20 20 6c 64 72 62 20 20  20 20 72 31 2c 20 5b 72  |  ldrb    r1, [r|
000007b0  31 2c 20 23 34 5d 0d 03  a2 1a 20 20 20 20 61 6e  |1, #4]....    an|
000007c0  64 73 20 20 20 20 72 31  2c 20 72 31 2c 20 23 31  |ds    r1, r1, #1|
000007d0  0d 03 ac 1b 20 20 20 20  6c 64 6d 6e 65 66 64 20  |....    ldmnefd |
000007e0  72 31 33 21 2c 20 7b 70  63 7d 5e 0d 03 b6 18 20  |r13!, {pc}^.... |
000007f0  20 20 20 6d 6f 76 20 20  20 20 20 72 31 2c 20 23  |   mov     r1, #|
00000800  32 35 35 0d 03 c0 1f 20  20 20 20 73 77 69 20 20  |255....    swi  |
00000810  20 20 20 22 58 43 44 5f  50 6c 61 79 54 72 61 63  |   "XCD_PlayTrac|
00000820  6b 22 0d 03 ca 1b 20 20  20 20 6c 64 6d 66 64 20  |k"....    ldmfd |
00000830  20 20 72 31 33 21 2c 20  7b 70 63 7d 5e 0d 03 d4  |  r13!, {pc}^...|
00000840  04 0d 03 de 11 2e 73 74  6f 70 5f 70 6c 61 79 69  |......stop_playi|
00000850  6e 67 0d 03 e8 21 20 20  20 20 61 64 72 20 20 20  |ng...!    adr   |
00000860  20 20 72 37 2c 20 63 6f  6e 74 72 6f 6c 5f 62 6c  |  r7, control_bl|
00000870  6f 63 6b 0d 03 f2 1e 20  20 20 20 73 77 69 20 20  |ock....    swi  |
00000880  20 20 20 22 58 43 44 5f  53 74 6f 70 44 69 73 63  |   "XCD_StopDisc|
00000890  22 0d 03 fc 1b 20 20 20  20 6c 64 6d 66 64 20 20  |"....    ldmfd  |
000008a0  20 72 31 33 21 2c 20 7b  70 63 7d 5e 0d 04 06 04  | r13!, {pc}^....|
000008b0  0d 04 10 0f 2e 62 61 63  6b 5f 74 72 61 63 6b 0d  |.....back_track.|
000008c0  04 1a 1d 20 20 20 20 62  6c 20 20 20 20 20 20 63  |...    bl      c|
000008d0  75 72 72 65 6e 74 5f 74  72 61 63 6b 0d 04 24 1a  |urrent_track..$.|
000008e0  20 20 20 20 73 75 62 20  20 20 20 20 72 30 2c 20  |    sub     r0, |
000008f0  72 30 2c 20 23 31 0d 04  2e 17 20 20 20 20 63 6d  |r0, #1....    cm|
00000900  70 20 20 20 20 20 72 30  2c 20 72 31 30 0d 04 38  |p     r0, r10..8|
00000910  1b 20 20 20 20 6c 64 6d  6c 74 66 64 20 72 31 33  |.    ldmltfd r13|
00000920  21 2c 20 7b 70 63 7d 5e  0d 04 42 18 20 20 20 20  |!, {pc}^..B.    |
00000930  6d 6f 76 20 20 20 20 20  72 31 2c 20 23 32 35 35  |mov     r1, #255|
00000940  0d 04 4c 21 20 20 20 20  61 64 72 20 20 20 20 20  |..L!    adr     |
00000950  72 37 2c 20 63 6f 6e 74  72 6f 6c 5f 62 6c 6f 63  |r7, control_bloc|
00000960  6b 0d 04 56 1f 20 20 20  20 73 77 69 20 20 20 20  |k..V.    swi    |
00000970  20 22 58 43 44 5f 50 6c  61 79 54 72 61 63 6b 22  | "XCD_PlayTrack"|
00000980  0d 04 60 1b 20 20 20 20  6c 64 6d 66 64 20 20 20  |..`.    ldmfd   |
00000990  72 31 33 21 2c 20 7b 70  63 7d 5e 0d 04 6a 04 0d  |r13!, {pc}^..j..|
000009a0  04 74 12 2e 66 6f 72 77  61 72 64 5f 74 72 61 63  |.t..forward_trac|
000009b0  6b 0d 04 7e 1d 20 20 20  20 62 6c 20 20 20 20 20  |k..~.    bl     |
000009c0  20 63 75 72 72 65 6e 74  5f 74 72 61 63 6b 0d 04  | current_track..|
000009d0  88 1a 20 20 20 20 61 64  64 20 20 20 20 20 72 30  |..    add     r0|
000009e0  2c 20 72 30 2c 20 23 31  0d 04 92 17 20 20 20 20  |, r0, #1....    |
000009f0  63 6d 70 20 20 20 20 20  72 30 2c 20 72 31 31 0d  |cmp     r0, r11.|
00000a00  04 9c 1b 20 20 20 20 6c  64 6d 67 74 66 64 20 72  |...    ldmgtfd r|
00000a10  31 33 21 2c 20 7b 70 63  7d 5e 0d 04 a6 18 20 20  |13!, {pc}^....  |
00000a20  20 20 6d 6f 76 20 20 20  20 20 72 31 2c 20 23 32  |  mov     r1, #2|
00000a30  35 35 0d 04 b0 21 20 20  20 20 61 64 72 20 20 20  |55...!    adr   |
00000a40  20 20 72 37 2c 20 63 6f  6e 74 72 6f 6c 5f 62 6c  |  r7, control_bl|
00000a50  6f 63 6b 0d 04 ba 1f 20  20 20 20 73 77 69 20 20  |ock....    swi  |
00000a60  20 20 20 22 58 43 44 5f  50 6c 61 79 54 72 61 63  |   "XCD_PlayTrac|
00000a70  6b 22 0d 04 c4 1b 20 20  20 20 6c 64 6d 66 64 20  |k"....    ldmfd |
00000a80  20 20 72 31 33 21 2c 20  7b 70 63 7d 5e 0d 04 ce  |  r13!, {pc}^...|
00000a90  04 0d 04 d8 0f 2e 65 6a  65 63 74 5f 64 69 73 63  |......eject_disc|
00000aa0  0d 04 e2 21 20 20 20 20  61 64 72 20 20 20 20 20  |...!    adr     |
00000ab0  72 37 2c 20 63 6f 6e 74  72 6f 6c 5f 62 6c 6f 63  |r7, control_bloc|
00000ac0  6b 0d 04 ec 20 20 20 20  20 73 77 69 20 20 20 20  |k...     swi    |
00000ad0  20 22 58 43 44 5f 4f 70  65 6e 44 72 61 77 65 72  | "XCD_OpenDrawer|
00000ae0  22 0d 04 f6 1b 20 20 20  20 6c 64 6d 66 64 20 20  |"....    ldmfd  |
00000af0  20 72 31 33 21 2c 20 7b  70 63 7d 5e 0d 05 00 04  | r13!, {pc}^....|
00000b00  0d 05 0a 12 2e 63 75 72  72 65 6e 74 5f 74 72 61  |.....current_tra|
00000b10  63 6b 0d 05 14 26 20 20  20 20 73 74 6d 66 64 20  |ck...&    stmfd |
00000b20  20 20 72 31 33 21 2c 20  7b 72 31 2c 20 72 37 2d  |  r13!, {r1, r7-|
00000b30  72 39 2c 20 72 31 34 7d  0d 05 1e 16 20 20 20 20  |r9, r14}....    |
00000b40  6d 6f 76 20 20 20 20 20  72 30 2c 20 23 30 0d 05  |mov     r0, #0..|
00000b50  28 1f 20 20 20 20 61 64  72 20 20 20 20 20 72 31  |(.    adr     r1|
00000b60  2c 20 74 72 61 63 6b 5f  62 6c 6f 63 6b 0d 05 32  |, track_block..2|
00000b70  21 20 20 20 20 61 64 72  20 20 20 20 20 72 37 2c  |!    adr     r7,|
00000b80  20 63 6f 6e 74 72 6f 6c  5f 62 6c 6f 63 6b 0d 05  | control_block..|
00000b90  3c 22 20 20 20 20 73 77  69 20 20 20 20 20 22 58  |<"    swi     "X|
00000ba0  43 44 5f 45 6e 71 75 69  72 65 54 72 61 63 6b 22  |CD_EnquireTrack"|
00000bb0  0d 05 46 2b 20 20 20 20  6c 64 72 62 20 20 20 20  |..F+    ldrb    |
00000bc0  72 31 30 2c 20 5b 72 31  2c 20 23 30 5d 20 3b 20  |r10, [r1, #0] ; |
00000bd0  66 69 72 73 74 20 74 72  61 63 6b 0d 05 50 2a 20  |first track..P* |
00000be0  20 20 20 6c 64 72 62 20  20 20 20 72 31 31 2c 20  |   ldrb    r11, |
00000bf0  5b 72 31 2c 20 23 31 5d  20 3b 20 6c 61 73 74 20  |[r1, #1] ; last |
00000c00  74 72 61 63 6b 0d 05 5a  16 20 20 20 20 6d 6f 76  |track..Z.    mov|
00000c10  20 20 20 20 20 72 30 2c  20 23 30 0d 05 64 24 20  |     r0, #0..d$ |
00000c20  20 20 20 73 77 69 20 20  20 20 20 22 58 43 44 5f  |   swi     "XCD_|
00000c30  45 6e 71 75 69 72 65 41  64 64 72 65 73 73 22 0d  |EnquireAddress".|
00000c40  05 6e 28 20 20 20 20 6d  6f 76 20 20 20 20 20 72  |.n(    mov     r|
00000c50  39 2c 20 72 30 20 3b 20  63 75 72 72 65 6e 74 20  |9, r0 ; current |
00000c60  61 64 64 72 65 73 73 0d  05 78 17 20 20 20 20 6d  |address..x.    m|
00000c70  6f 76 20 20 20 20 20 72  30 2c 20 72 31 30 0d 05  |ov     r0, r10..|
00000c80  82 16 20 20 20 20 6d 6f  76 20 20 20 20 20 72 30  |..    mov     r0|
00000c90  2c 20 23 31 0d 05 8c 1f  20 20 20 20 61 64 72 20  |, #1....    adr |
00000ca0  20 20 20 20 72 31 2c 20  74 72 61 63 6b 5f 62 6c  |    r1, track_bl|
00000cb0  6f 63 6b 0d 05 96 17 2e  63 75 72 72 65 6e 74 5f  |ock.....current_|
00000cc0  74 72 61 63 6b 5f 6c 6f  6f 70 0d 05 a0 22 20 20  |track_loop..."  |
00000cd0  20 20 73 77 69 20 20 20  20 20 22 58 43 44 5f 45  |  swi     "XCD_E|
00000ce0  6e 71 75 69 72 65 54 72  61 63 6b 22 0d 05 aa 1c  |nquireTrack"....|
00000cf0  20 20 20 20 6c 64 72 20  20 20 20 20 72 38 2c 20  |    ldr     r8, |
00000d00  5b 72 31 2c 20 23 30 5d  0d 05 b4 16 20 20 20 20  |[r1, #0]....    |
00000d10  63 6d 70 20 20 20 20 20  72 38 2c 20 72 39 0d 05  |cmp     r8, r9..|
00000d20  be 23 20 20 20 20 62 67  74 20 20 20 20 20 66 6f  |.#    bgt     fo|
00000d30  75 6e 64 5f 63 75 72 72  65 6e 74 5f 74 72 61 63  |und_current_trac|
00000d40  6b 0d 05 c8 1a 20 20 20  20 61 64 64 20 20 20 20  |k....    add    |
00000d50  20 72 30 2c 20 72 30 2c  20 23 31 0d 05 d2 17 20  | r0, r0, #1.... |
00000d60  20 20 20 63 6d 70 20 20  20 20 20 72 30 2c 20 72  |   cmp     r0, r|
00000d70  31 31 0d 05 dc 22 20 20  20 20 62 6c 65 20 20 20  |11..."    ble   |
00000d80  20 20 63 75 72 72 65 6e  74 5f 74 72 61 63 6b 5f  |  current_track_|
00000d90  6c 6f 6f 70 0d 05 e6 17  20 20 20 20 6d 6f 76 20  |loop....    mov |
00000da0  20 20 20 20 72 30 2c 20  72 31 31 0d 05 f0 26 20  |    r0, r11...& |
00000db0  20 20 20 6c 64 6d 66 64  20 20 20 72 31 33 21 2c  |   ldmfd   r13!,|
00000dc0  20 7b 72 31 2c 20 72 37  2d 72 39 2c 20 70 63 7d  | {r1, r7-r9, pc}|
00000dd0  5e 0d 05 fa 18 2e 66 6f  75 6e 64 5f 63 75 72 72  |^.....found_curr|
00000de0  65 6e 74 5f 74 72 61 63  6b 0d 06 04 1a 20 20 20  |ent_track....   |
00000df0  20 73 75 62 20 20 20 20  20 72 30 2c 20 72 30 2c  | sub     r0, r0,|
00000e00  20 23 31 0d 06 0e 17 20  20 20 20 63 6d 70 20 20  | #1....    cmp  |
00000e10  20 20 20 72 30 2c 20 72  31 31 0d 06 18 17 20 20  |   r0, r11....  |
00000e20  20 20 6d 6f 76 67 74 20  20 20 72 30 2c 20 72 31  |  movgt   r0, r1|
00000e30  31 0d 06 22 17 20 20 20  20 63 6d 70 20 20 20 20  |1..".    cmp    |
00000e40  20 72 30 2c 20 72 31 30  0d 06 2c 17 20 20 20 20  | r0, r10..,.    |
00000e50  6d 6f 76 6c 74 20 20 20  72 30 2c 20 72 31 30 0d  |movlt   r0, r10.|
00000e60  06 36 26 20 20 20 20 6c  64 6d 66 64 20 20 20 72  |.6&    ldmfd   r|
00000e70  31 33 21 2c 20 7b 72 31  2c 20 72 37 2d 72 39 2c  |13!, {r1, r7-r9,|
00000e80  20 70 63 7d 5e 0d 06 40  04 0d 06 4a 12 2e 63 6f  | pc}^..@...J..co|
00000e90  6e 74 72 6f 6c 5f 62 6c  6f 63 6b 0d 06 54 11 20  |ntrol_block..T. |
00000ea0  20 20 20 65 71 75 64 20  20 20 20 30 0d 06 5e 11  |   equd    0..^.|
00000eb0  20 20 20 20 65 71 75 64  20 20 20 20 30 0d 06 68  |    equd    0..h|
00000ec0  11 20 20 20 20 65 71 75  64 20 20 20 20 30 0d 06  |.    equd    0..|
00000ed0  72 11 20 20 20 20 65 71  75 64 20 20 20 20 30 0d  |r.    equd    0.|
00000ee0  06 7c 11 20 20 20 20 65  71 75 64 20 20 20 20 30  |.|.    equd    0|
00000ef0  0d 06 86 10 2e 74 72 61  63 6b 5f 62 6c 6f 63 6b  |.....track_block|
00000f00  0d 06 90 11 20 20 20 20  65 71 75 64 20 20 20 20  |....    equd    |
00000f10  30 0d 06 9a 11 20 20 20  20 65 71 75 62 20 20 20  |0....    equb   |
00000f20  20 30 0d 06 a4 05 5d 0d  06 ae 05 ed 0d 06 b8 04  | 0....].........|
00000f30  0d 06 c2 34 c8 99 20 22  4f 53 5f 46 69 6c 65 22  |...4.. "OS_File"|
00000f40  2c 20 31 30 2c 20 22 43  44 63 6f 6e 74 72 6f 6c  |, 10, "CDcontrol|
00000f50  22 2c 20 26 66 66 64 2c  20 2c 20 63 6f 64 65 25  |", &ffd, , code%|
00000f60  2c 20 50 25 0d 06 cc 05  e0 0d ff                 |, P%.......|
00000f6b