[4f508e6] | 1 | | ------------------------------------------------------------------------------
|
---|
| 2 | | sedisp.s -- score event display driver
|
---|
| 3 | | Version 43 -- 1988-09-26 -- D.N. Lynx Crowe
|
---|
| 4 |
|
---|
| 5 | | se_disp(ep, sd, gdstb, cf)
|
---|
| 6 | | struct s_entry |ep;
|
---|
| 7 | | short sd;
|
---|
| 8 | | struct gdsel |gdstb[];
|
---|
| 9 | | short cf;
|
---|
| 10 |
|
---|
| 11 | | Displays the event at 'ep', scrolling in direction 'sd', by
|
---|
| 12 | | updating 'gdstb'. Uses the accidental code in 'ac_code', and
|
---|
| 13 | | the note type table 'nsvtab'. Checks 'cf' to determine if
|
---|
| 14 | | we're displaying in the center of the screen.
|
---|
| 15 | | Allocates gdsel events as needed for new events.
|
---|
| 16 | | ------------------------------------------------------------------------------
|
---|
[f40a309] | 17 | .text
|
---|
[4f508e6] | 18 |
|
---|
[f40a309] | 19 | .xdef _se_disp
|
---|
[4f508e6] | 20 |
|
---|
[f40a309] | 21 | .xdef _ac_code
|
---|
| 22 | .xdef numstr
|
---|
[4f508e6] | 23 |
|
---|
[f40a309] | 24 | .xref _dclkmd
|
---|
| 25 | .xref _dsgmodz
|
---|
| 26 | .xref _fromfpu
|
---|
| 27 | .xref _mpcupd
|
---|
| 28 | .xref _vputa
|
---|
| 29 | .xref _vputc
|
---|
| 30 | .xref _vputs
|
---|
[4f508e6] | 31 |
|
---|
[f40a309] | 32 | .xref _angroup
|
---|
| 33 | .xref _ctrsw
|
---|
| 34 | .xref _grpstat
|
---|
| 35 | .xref _ins2grp
|
---|
| 36 | .xref _ndisp
|
---|
| 37 | .xref _obj8
|
---|
| 38 | .xref _gdfsep
|
---|
| 39 | .xref _lastvel
|
---|
| 40 | .xref _nsvtab
|
---|
| 41 | .xref _velflag
|
---|
| 42 | .xref _vrbw08
|
---|
| 43 | .xref _vrbw09
|
---|
| 44 | .xref _vrbw10
|
---|
| 45 | .xref _vrbw11
|
---|
| 46 | .xref _vrbw12
|
---|
| 47 | .xref _vrbw13
|
---|
| 48 | .xref _vrbw14
|
---|
| 49 | .xref _vrbw15
|
---|
| 50 | .xref _vrcw
|
---|
[4f508e6] | 51 |
|
---|
[f40a309] | 52 | .page
|
---|
[4f508e6] | 53 |
|
---|
| 54 | | parameter offsets
|
---|
| 55 | | -----------------
|
---|
| 56 | | for se_disp:
|
---|
| 57 | | ------------
|
---|
| 58 | P_EP = 8 | LONG - event pointer
|
---|
| 59 | P_SD = 12 | WORD - scroll direction
|
---|
| 60 | P_SL = 14 | LONG - slice control table pointer
|
---|
| 61 | P_CF = 18 | WORD - center slice flag
|
---|
| 62 |
|
---|
| 63 | | for vputa:
|
---|
| 64 | | ----------
|
---|
| 65 | ROW = 4 | WORD - 'row' parameter offset
|
---|
| 66 | COL = 6 | WORD - 'col' parameter offset
|
---|
| 67 | ATR = 8 | WORD - 'atr' parameter offset
|
---|
| 68 |
|
---|
| 69 | | Character field attributes for highlighting
|
---|
| 70 | | -------------------------------------------
|
---|
| 71 | AT01 = 0x0054
|
---|
| 72 | AT04 = 0x0053
|
---|
| 73 | AT05 = 0x0054
|
---|
| 74 | AT06 = 0x0053
|
---|
| 75 | AT07 = 0x0054
|
---|
| 76 | AT08 = 0x0053
|
---|
| 77 | AT09 = 0x0054
|
---|
| 78 | AT10 = 0x0053
|
---|
| 79 | AT11 = 0x0052
|
---|
| 80 | AT12 = 0x0052
|
---|
| 81 |
|
---|
| 82 | | Special character equates
|
---|
| 83 | | -------------------------
|
---|
| 84 | SP_M1 = 0xA1 | -1
|
---|
| 85 | SP_P1 = 0xA0 | +1
|
---|
| 86 |
|
---|
[f40a309] | 87 | .page
|
---|
[4f508e6] | 88 |
|
---|
| 89 | | event structure offsets
|
---|
| 90 | | -----------------------
|
---|
| 91 | | offset length
|
---|
| 92 | | ------ ------
|
---|
| 93 | E_TIME = 0 | LONG
|
---|
| 94 | E_SIZE = 4 | BYTE
|
---|
| 95 | E_TYPE = 5 | BYTE
|
---|
| 96 | E_DATA1 = 6 | BYTE
|
---|
| 97 | E_NOTE = 6 | BYTE
|
---|
| 98 | E_DATA2 = 7 | BYTE
|
---|
| 99 | E_GROUP = 7 | BYTE
|
---|
| 100 | E_BAK = 8 | LONG
|
---|
| 101 | E_FWD = 12 | LONG
|
---|
| 102 | E_DN = 16 | LONG
|
---|
| 103 | E_VEL = 16 | WORD
|
---|
| 104 | E_DATA4 = 18 | WORD
|
---|
| 105 | E_UP = 20 | LONG
|
---|
| 106 | E_LFT = 24 | LONG
|
---|
| 107 | E_RGT = 28 | LONG
|
---|
| 108 |
|
---|
| 109 | N_ETYPES = 25 | number of event types
|
---|
| 110 |
|
---|
| 111 | | gdsel structure definitions
|
---|
| 112 | | ---------------------------
|
---|
| 113 | G_NEXT = 0 | long - 'next' field (struct gdsel |)
|
---|
| 114 | G_NOTE = 4 | word - 'note' field (short)
|
---|
| 115 | G_CODE = 6 | word - 'code' field (short)
|
---|
| 116 |
|
---|
| 117 | NATCH_B = 3 | uslice note code: 'begin natural'
|
---|
| 118 | NOTE_E = 6 | uslice note code: 'end note'
|
---|
| 119 |
|
---|
| 120 | NGDSEL = 17 | number of event slots in gdstb
|
---|
| 121 |
|
---|
| 122 | BARFLAG = 4|(NGDSEL-1) | offset to the bar marker flag
|
---|
| 123 |
|
---|
[f40a309] | 124 | .page
|
---|
[4f508e6] | 125 |
|
---|
| 126 | | A few words about se_disp:
|
---|
| 127 | | --------------------------
|
---|
| 128 | | se_disp has to be very fast, so it's written in assembly language,
|
---|
| 129 | | rather than C, which is usually pretty good, but not quite good enough
|
---|
| 130 | | for this application. The faster this routine runs, the higher the
|
---|
| 131 | | tempo we can keep up with. If this code is fast enough, we end up
|
---|
| 132 | | hardware limited by the maximum rate of the timer, and the VSDD update rate.
|
---|
| 133 |
|
---|
| 134 | _se_disp: link a6,#0 | allocate and link stack frame
|
---|
| 135 | movea.l P_EP(a6),a0 | get event pointer 'ep' into a0
|
---|
| 136 | move.b E_TYPE(a0),d1 | get event type into d1.W
|
---|
| 137 | andi.w #0x007F,d1 | mask off new-note flag
|
---|
| 138 | cmp.b #N_ETYPES,d1 | see if it's valid
|
---|
| 139 | blt seds1 | jump if it is
|
---|
| 140 |
|
---|
| 141 | dsexit: unlk a6 | done -- unlink stack frames
|
---|
| 142 | rts | return to caller
|
---|
| 143 |
|
---|
| 144 | seds1: lea sddtab,a1 | get base of dispatch table
|
---|
| 145 | lsl.w #2,d1 | multiplty event by 4 for index
|
---|
| 146 | movea.l 0(a1,d1.W),a2 | get address of event routine
|
---|
| 147 | jmp (a2) | jump to event display routine
|
---|
| 148 |
|
---|
| 149 | | On entry, the individual display routines only depend on a0 pointing at the
|
---|
| 150 | | event they were dispatched for. Registers a6 and a7 have their usual meaning,
|
---|
| 151 | | a6 = frame pointer, a7 = stack pointer.
|
---|
| 152 |
|
---|
| 153 | | d0..d2 are used for scratch, as are a0..a2, and are not saved by this code.
|
---|
| 154 |
|
---|
[f40a309] | 155 | .page
|
---|
[4f508e6] | 156 |
|
---|
| 157 | | dsnbx -- dispatch to begin / end based on sd
|
---|
| 158 | | ----- -----------------------------------
|
---|
| 159 | dsnbx: tst.w P_SD(a7) | check direction
|
---|
| 160 | bne dsne | treat as end if going backward
|
---|
| 161 |
|
---|
| 162 | | dsnb -- display note begin
|
---|
| 163 | | ---- ------------------
|
---|
| 164 | dsnb: move.b E_TYPE(a0),d1 | get event type
|
---|
| 165 | move.w d1,d2 | save in d2
|
---|
| 166 | andi.w #0x007F,d1 | clear new-note flag
|
---|
| 167 | move.b d1,E_TYPE(a0) | store type back in event
|
---|
| 168 | clr.w d0 | get group number
|
---|
| 169 | move.b E_GROUP(a0),d0 | ... in d0
|
---|
| 170 | move.w d0,d1 | save group in d1
|
---|
| 171 | add.w d0,d0 | make d0 a word offset
|
---|
| 172 | lea _grpstat,a1 | check grpstat[grp]
|
---|
| 173 | tst.w 0(a1,d0.W) | ...
|
---|
| 174 | beq dsexit | done if not enabled
|
---|
| 175 |
|
---|
| 176 | tst.w P_CF(a6) | check center slice flag
|
---|
| 177 | beq dsnb0 | jump if not center slice
|
---|
| 178 |
|
---|
| 179 | tst.w _velflag | see if we display velocity
|
---|
| 180 | beq dsnvx | jump if not
|
---|
| 181 |
|
---|
| 182 | move.w d2,-(a7) | save new-note flag on stack
|
---|
| 183 | move.w d1,-(a7) | save group number on stack
|
---|
| 184 | move.w E_VEL(a0),d0 | get velocity
|
---|
| 185 | move.w d1,d2 | point into lastvel[]
|
---|
| 186 | add.w d2,d2 | ...
|
---|
| 187 | lea _lastvel,a1 | ...
|
---|
| 188 | move.w d0,0(a1,d2.W) | update lastvel[group]
|
---|
| 189 | ext.l d0 | scale
|
---|
| 190 | divu #252,d0 | ...
|
---|
| 191 | cmpi.w #100,d0 | convert MS digit
|
---|
| 192 | bcs dsnv0 | ...
|
---|
| 193 |
|
---|
| 194 | move.b #'1',numstr | ...
|
---|
| 195 | subi.w #100,d0 | ...
|
---|
| 196 | bra dsnv1 | ...
|
---|
| 197 |
|
---|
| 198 | dsnv0: move.b #'0',numstr | ...
|
---|
| 199 |
|
---|
| 200 | dsnv1: ext.l d0 | convert middle & LS digits
|
---|
| 201 | divu #10,d0 | ...
|
---|
| 202 | addi.l #0x00300030,d0 | ...
|
---|
| 203 | move.b d0,numstr+1 | ...
|
---|
| 204 | swap d0 | ...
|
---|
| 205 | move.b d0,numstr+2 | ...
|
---|
| 206 | clr.b numstr+3 | terminate string
|
---|
| 207 | move.w d1,d0 | col = group
|
---|
| 208 | asl.w #2,d0 | ... | 5
|
---|
| 209 | add.w d1,d0 | ...
|
---|
| 210 | add.w #6,d0 | ... + 6
|
---|
| 211 | move.l a0,-(a7) | save event pointer on stack
|
---|
| 212 | move.w #AT11,-(a7) | put attribute on stack
|
---|
| 213 | move.l #numstr,-(a7) | put string address on stack
|
---|
| 214 | move.w d0,-(a7) | put column on stack
|
---|
| 215 | move.w #5,-(a7) | put row on stack
|
---|
| 216 | move.l _obj8,-(a7) | put VSDD address on stack
|
---|
| 217 | jsr _vputs | update the screen
|
---|
| 218 | add.l #14,a7 | clean up stack
|
---|
| 219 | movea.l (a7)+,a0 | restore event pointer
|
---|
| 220 |
|
---|
[f40a309] | 221 | .page
|
---|
[4f508e6] | 222 |
|
---|
| 223 | move.w (a7)+,d0 | get group from stack
|
---|
| 224 | cmpi.w #12,d0 | see which byte it's in
|
---|
| 225 | bcc dsnv2 | jump if in MS byte
|
---|
| 226 |
|
---|
| 227 | bset d0,_vrbw12+1 | set group bit in LS byte
|
---|
| 228 | bra dsnv3 | ...
|
---|
| 229 |
|
---|
| 230 | dsnv2: bset d0,_vrbw12 | set group bit in MS byte
|
---|
| 231 |
|
---|
| 232 | dsnv3: bset #4,_vrcw | set video reset type bit
|
---|
| 233 | move.w (a7)+,d2 | get new-note flag from stack
|
---|
| 234 |
|
---|
| 235 | dsnvx: btst.l #7,d2 | check new-note flag
|
---|
| 236 | beq dsexit | done if not set
|
---|
| 237 |
|
---|
| 238 | dsnb0: clr.w d1 | get note number nn (0..127)
|
---|
| 239 | move.b E_NOTE(a0),d1 | ... in d1
|
---|
| 240 | sub.w #21,d1 | subtract base of piano scale
|
---|
| 241 | bmi dsexit | done if not displayable
|
---|
| 242 |
|
---|
| 243 | cmp.w #87,d1 | see if it's too high
|
---|
| 244 | bgt dsexit | done if not displayable
|
---|
| 245 |
|
---|
| 246 | move.l _gdfsep,d0 | quit if no elements left
|
---|
| 247 | beq dsexit | ...
|
---|
| 248 |
|
---|
| 249 | movea.l d0,a1 | a1 = gdsp
|
---|
| 250 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 251 | clr.w d2 | d2 = ep->group
|
---|
| 252 | move.b E_GROUP(a0),d2 | ...
|
---|
| 253 | lsl.w #2,d2 | ... | 4
|
---|
| 254 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 255 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[ep->group]
|
---|
| 256 | move.l a1,0(a2,d2.W) | gdstb[ep->group] = gdsp
|
---|
| 257 | move.w d1,G_NOTE(a1) | gdsp->note = nn
|
---|
| 258 | lea _nsvtab,a2 | a2 points at nsvtab
|
---|
| 259 | tst.b 0(a2,d1.W) | check nsvtab[nn]
|
---|
| 260 | beq dsnb1 | jump if natural note
|
---|
| 261 |
|
---|
| 262 | move.b _ac_code,d1 | setup for an accidental note
|
---|
| 263 | bra dsnb2 | ...
|
---|
| 264 |
|
---|
| 265 | dsnb1: move.b #NATCH_B,d1 | setup for a natural note
|
---|
| 266 |
|
---|
| 267 | dsnb2: move.w d1,G_CODE(a1) | gdsp->code = note type
|
---|
| 268 | bra dsexit | done
|
---|
| 269 |
|
---|
[f40a309] | 270 | .page
|
---|
[4f508e6] | 271 |
|
---|
| 272 | | dsnex -- dispatch to end/begin based on sd
|
---|
| 273 | | ----- ---------------------------------
|
---|
| 274 | dsnex: tst.w P_SD(a7) | check direction
|
---|
| 275 | bne dsnb | treat as begin if going backward
|
---|
| 276 |
|
---|
| 277 | | dsne -- display note end
|
---|
| 278 | | ---- ----------------
|
---|
| 279 | dsne: move.b E_TYPE(a0),d1 | get event type
|
---|
| 280 | move.w d1,d2 | save in d2
|
---|
| 281 | andi.w #0x007F,d1 | clear new-note flag
|
---|
| 282 | move.b d1,E_TYPE(a0) | store type back in event
|
---|
| 283 | clr.w d0 | get group number
|
---|
| 284 | move.b E_GROUP(a0),d0 | ... in d0
|
---|
| 285 | add.w d0,d0 | ... as a word offset
|
---|
| 286 | lea _grpstat,a1 | check grpstat[grp]
|
---|
| 287 | tst.w 0(a1,d0.W) | ...
|
---|
| 288 | beq dsexit | done if not enabled
|
---|
| 289 |
|
---|
| 290 | tst.w P_CF(a6) | check center slice flag
|
---|
| 291 | beq dsne3 | jump if not center slice
|
---|
| 292 |
|
---|
| 293 | btst.l #7,d2 | check new-note flag
|
---|
| 294 | beq dsexit | done if not set
|
---|
| 295 |
|
---|
| 296 | dsne3: move.b E_NOTE(a0),d1 | d1 = note number nn (0..127)
|
---|
| 297 | sub.w #21,d1 | subtract base of piano scale
|
---|
| 298 | bmi dsexit | done if not displayable
|
---|
| 299 |
|
---|
| 300 | cmp.w #87,d1 | see if it's too high
|
---|
| 301 | bgt dsexit | done if not displayable
|
---|
| 302 |
|
---|
| 303 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 304 | clr.w d2 | get group in d2
|
---|
| 305 | move.b E_GROUP(a0),d2 | ...
|
---|
| 306 | lsl.w #2,d2 | ... | 4
|
---|
| 307 | move.l 0(a2,d2.W),d0 | check gdstb[ep->group]
|
---|
[f40a309] | 308 | beq dsexit
|
---|
[4f508e6] | 309 |
|
---|
| 310 | dsne0: movea.l d0,a1 | a1 = gdsp
|
---|
| 311 |
|
---|
| 312 | dsne1: cmp.w G_NOTE(a1),d1 | compare nn to gdsp->note
|
---|
| 313 | bne dsne2 | jump if not the one we want
|
---|
| 314 |
|
---|
| 315 | move.w #NOTE_E,G_CODE(a1) | gdsp->code = NOTE_E (end note)
|
---|
| 316 |
|
---|
| 317 | dsne2: move.l G_NEXT(a1),d0 | get gdsp->next
|
---|
| 318 | beq dsexit | done if next = NULL
|
---|
| 319 |
|
---|
| 320 | bra dsne0 | loop for next one
|
---|
| 321 |
|
---|
[f40a309] | 322 | .page
|
---|
[4f508e6] | 323 |
|
---|
| 324 | | dssbgn -- display section begin
|
---|
| 325 | | ------ ---------------------
|
---|
| 326 | dssbgn: tst.w P_CF(a6) | center update ?
|
---|
| 327 | beq dsbgn0 | jump if not
|
---|
| 328 |
|
---|
| 329 | clr.w d1 | get section number
|
---|
| 330 | move.b E_DATA1(a0),d1 | ... from the event
|
---|
| 331 | addq.w #1,d1 | ... adjusted for display
|
---|
| 332 | ext.l d1 | ... as a long in d1
|
---|
| 333 | divu #10,d1 | divide by 10 for conversion
|
---|
| 334 | add.l #0x00300030,d1 | add '0' for ASCII conversion
|
---|
| 335 | move.b d1,numstr | put MS byte in work area
|
---|
| 336 | swap d1 | swap register halves
|
---|
| 337 | move.b d1,numstr+1 | put LS byte in work area
|
---|
| 338 | clr.b numstr+2 | terminate string
|
---|
| 339 | move.w #AT01,-(a7) | put attribute on stack
|
---|
| 340 | move.l #numstr,-(a7) | put buffer address on stack
|
---|
| 341 | move.w #6,-(a7) | put column on stack
|
---|
| 342 | move.w #0,-(a7) | put row on stack
|
---|
| 343 | move.l _obj8,-(a7) | put sbase on stack
|
---|
| 344 | jsr _vputs | update the screen
|
---|
| 345 | add.l #14,a7 | clean up stack
|
---|
| 346 | bset #4,_vrcw+1 | set video reset type bit
|
---|
| 347 | tst.w _ctrsw | update center for scupd ?
|
---|
| 348 | beq dsexit | done if not
|
---|
| 349 |
|
---|
| 350 | dsbgn0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 351 | beq dsexit | ...
|
---|
| 352 |
|
---|
| 353 | movea.l d0,a1 | a1 = gdsp
|
---|
| 354 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 355 | move.w #48,d2 | d2 = event PRIORITY | 4
|
---|
| 356 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 357 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 358 | move.w #0x1111,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 359 | move.w #0,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 360 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 361 | bra dsexit | done
|
---|
| 362 |
|
---|
[f40a309] | 363 | .page
|
---|
[4f508e6] | 364 |
|
---|
| 365 | | dssend -- display section end
|
---|
| 366 | | ------ -------------------
|
---|
| 367 | dssend: tst.w P_CF(a6) | center update ?
|
---|
| 368 | beq dssend0 | jump if not
|
---|
| 369 |
|
---|
| 370 | tst.w _ctrsw | update center for scupd ?
|
---|
| 371 | beq dsexit | done if not
|
---|
| 372 |
|
---|
| 373 | dssend0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 374 | beq dsexit | ...
|
---|
| 375 |
|
---|
| 376 | movea.l d0,a1 | a1 = gdsp
|
---|
| 377 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 378 | move.w #48,d2 | d2 = event PRIORITY | 4
|
---|
| 379 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 380 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 381 | move.w #0x1111,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 382 | move.w #2,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 383 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 384 | bra dsexit | done
|
---|
| 385 |
|
---|
| 386 | | dsbeat -- display beat
|
---|
| 387 | | ------ ------------
|
---|
| 388 | dsbeat: tst.w P_CF(a6) | center update ?
|
---|
| 389 | bne dsexit | done if so
|
---|
| 390 |
|
---|
| 391 | move.l _gdfsep,d0 | quit if no elements left
|
---|
| 392 | beq dsexit | ...
|
---|
| 393 |
|
---|
| 394 | movea.l d0,a1 | a1 = gdsp
|
---|
| 395 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 396 | move.w #48,d2 | d2 = event PRIORITY | 4
|
---|
| 397 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 398 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 399 | move.w #0x1111,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 400 | move.w #1,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 401 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 402 | bra dsexit | done
|
---|
| 403 |
|
---|
[f40a309] | 404 | .page
|
---|
[4f508e6] | 405 |
|
---|
| 406 | | dstune -- display tuning
|
---|
| 407 | | ------ --------------
|
---|
| 408 | dstune: tst.w P_CF(a6) | center update ?
|
---|
| 409 | beq dstune0 | jump if not
|
---|
| 410 |
|
---|
| 411 | clr.w d1 | get current tuning
|
---|
| 412 | move.b E_DATA1(a0),d1 | ...
|
---|
| 413 | add.w #0x0030,d1 | add '0' for ASCII conversion
|
---|
| 414 | move.w #AT05,-(a7) | put attribute on stack
|
---|
| 415 | move.w d1,-(a7) | put character on stack
|
---|
| 416 | move.w #19,-(a7) | put column on stack
|
---|
| 417 | move.w #1,-(a7) | put row on stack
|
---|
| 418 | move.l _obj8,-(a7) | put sbase on stack
|
---|
| 419 | jsr _vputc | display character
|
---|
| 420 | add.l #12,a7 | clean up stack
|
---|
| 421 | bset #1,_vrcw+1 | set video reset type bit
|
---|
| 422 | tst.w _ctrsw | update center for scupd ?
|
---|
| 423 | beq dsexit | done if not
|
---|
| 424 |
|
---|
| 425 | dstune0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 426 | beq dsexit | ...
|
---|
| 427 |
|
---|
| 428 | movea.l d0,a1 | a1 = gdsp
|
---|
| 429 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 430 | move.w #52,d2 | d2 = event PRIORITY | 4
|
---|
| 431 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 432 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 433 | move.w #0xCCCC,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 434 | move.w #3,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 435 | move.l a1,0(a2,d2.W) | gdstb[priority] = gdsp
|
---|
| 436 | bra dsexit | done
|
---|
| 437 |
|
---|
[f40a309] | 438 | .page
|
---|
[4f508e6] | 439 |
|
---|
| 440 | | dstrns -- display transposition
|
---|
| 441 | | ------ ---------------------
|
---|
| 442 | dstrns: clr.w d0 | get group number
|
---|
| 443 | move.b E_DATA1(a0),d0 | ... in d0
|
---|
| 444 | add.w d0,d0 | ... as a word offset
|
---|
| 445 | lea _grpstat,a1 | check grpstat[grp]
|
---|
| 446 | tst.w 0(a1,d0.W) | ...
|
---|
| 447 | beq dsexit | done if not enabled
|
---|
| 448 |
|
---|
| 449 | tst.w P_CF(a6) | center update
|
---|
| 450 | beq dstrns0 | jump if not
|
---|
| 451 |
|
---|
| 452 | move.w E_LFT(a0),d1 | get transposition value
|
---|
| 453 | bpl dstrns1 | jump if positive
|
---|
| 454 |
|
---|
| 455 | move.b #'-',numstr | note negative sign
|
---|
| 456 | neg.w d1 | make number positive
|
---|
| 457 | bra dstrns2 | ...
|
---|
| 458 |
|
---|
| 459 | dstrns1: move.b #'+',numstr | note positive sign
|
---|
| 460 |
|
---|
| 461 | dstrns2: cmpi.w #1000,d1 | is number GE 1000 ?
|
---|
| 462 | bcs dstrns3 | jump if not
|
---|
| 463 |
|
---|
| 464 | subi.w #1000,d1 | adjust number
|
---|
| 465 | cmpi.b #'-',numstr | was number negative
|
---|
| 466 | bne dstrns4 | jump if not
|
---|
| 467 |
|
---|
| 468 | move.b #SP_M1,numstr | set -1 in numstr
|
---|
| 469 | bra dstrns3 | ...
|
---|
| 470 |
|
---|
| 471 | dstrns4: move.b #SP_P1,numstr | set +1 in numstr
|
---|
| 472 |
|
---|
| 473 | dstrns3: ext.l d1 | make d1 a long
|
---|
| 474 | divu #100,d1 | convert 1st digit
|
---|
| 475 | addi.w #0x0030,d1 | ... to ASCII
|
---|
| 476 | move.b d1,numstr+1 | ... in numstr
|
---|
| 477 | swap d1 | convert 2nd digit
|
---|
| 478 | ext.l d1 | ...
|
---|
| 479 | divu #10,d1 | ...
|
---|
| 480 | addi.w #0x0030,d1 | ... to ASCII
|
---|
| 481 | move.b d1,numstr+2 | ... in numstr
|
---|
| 482 | swap d1 | convert 3rd digit
|
---|
| 483 | addi.w #0x0030,d1 | ... to ASCII
|
---|
| 484 | move.b d1,numstr+3 | ... in numstr
|
---|
| 485 | clr.b numstr+4 | terminate numstr
|
---|
| 486 |
|
---|
[f40a309] | 487 | .page
|
---|
[4f508e6] | 488 |
|
---|
| 489 | move.w d0,d1 | get group number
|
---|
| 490 | asr.w #1,d1 | ... in d1
|
---|
| 491 | move.w d1,-(a7) | save group number on stack
|
---|
| 492 | add.w d0,d0 | calculate column
|
---|
| 493 | add.w d0,d1 | ... = 5 | group
|
---|
| 494 | addi.w #5,d1 | ... + 5
|
---|
| 495 | move.w #AT11,-(a7) | vputs(obj8, 3, col, numstr, atr11)
|
---|
| 496 | move.l #numstr,-(a7) | ...
|
---|
| 497 | move.w d1,-(a7) | ...
|
---|
| 498 | move.w #3,-(a7) | ...
|
---|
| 499 | move.l _obj8,-(a7) | ...
|
---|
| 500 | jsr _vputs | ...
|
---|
| 501 | add.l #14,a7 | ...
|
---|
| 502 | move.w (a7)+,d0 | get group number
|
---|
| 503 | cmpi.w #8,d0 | see which byte it's in
|
---|
| 504 | bcc dstrns5 | jump if in MS byte
|
---|
| 505 |
|
---|
| 506 | bset d0,_vrbw09+1 | set group bit in LS byte
|
---|
| 507 | bra dstrns6 | ...
|
---|
| 508 |
|
---|
| 509 | dstrns5: sub.w #8,d0 | adjust for byte
|
---|
| 510 | bset d0,_vrbw09 | set group bit in MS byte
|
---|
| 511 |
|
---|
| 512 | dstrns6: bset #1,_vrcw | set video reset type bit
|
---|
| 513 | tst.w _ctrsw | update center for scupd ?
|
---|
| 514 | beq dsexit | done if not
|
---|
| 515 |
|
---|
| 516 | dstrns0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 517 | beq dsexit | ...
|
---|
| 518 |
|
---|
| 519 | movea.l d0,a1 | a1 = gdsp
|
---|
| 520 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 521 | move.w #52,d2 | d2 = event PRIORITY | 4
|
---|
| 522 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 523 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 524 | move.w #0x9999,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 525 | move.w #4,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 526 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 527 | bra dsexit | done
|
---|
| 528 |
|
---|
[f40a309] | 529 | .page
|
---|
[4f508e6] | 530 |
|
---|
| 531 | | dsdyn -- display dynamics
|
---|
| 532 | | ----- ----------------
|
---|
| 533 | dsdyn: clr.w d0 | get group number
|
---|
| 534 | move.b E_DATA1(a0),d0 | ... in d0
|
---|
| 535 | add.w d0,d0 | ... as a word offset
|
---|
| 536 | lea _grpstat,a1 | check grpstat[grp]
|
---|
| 537 | tst.w 0(a1,d0.W) | ...
|
---|
| 538 | beq dsexit | done if not enabled
|
---|
| 539 |
|
---|
| 540 | tst.w P_CF(a6) | center update ?
|
---|
| 541 | beq dsdyn00 | jump if not
|
---|
| 542 |
|
---|
| 543 | clr.w d0 | get dynamics
|
---|
| 544 | move.b E_DATA2(a0),d0 | ... in d0
|
---|
| 545 | move.w d0,-(a7) | save dyanmics
|
---|
| 546 | clr.w d1 | get group number
|
---|
| 547 | move.b E_DATA1(a0),d1 | ... in d1
|
---|
| 548 | move.w d1,-(a7) | save group number
|
---|
| 549 | move.w (a7),d0 | col = group number
|
---|
| 550 | add.w d0,d0 | ... | 5
|
---|
| 551 | add.w d0,d0 | ...
|
---|
| 552 | move.w (a7)+,d2 | ... (d2 = group number)
|
---|
| 553 | add.w d2,d0 | ...
|
---|
| 554 | add.w #6,d0 | ... + 6
|
---|
| 555 | move.w (a7)+,d1 | get dynamics
|
---|
| 556 | add.w #0x0030,d1 | add '0' for ASCII conversion
|
---|
| 557 | move.w d2,-(a7) | save group number
|
---|
| 558 | move.w #AT11,-(a7) | put attribute on stack
|
---|
| 559 | move.w d1,-(a7) | put digit on stack
|
---|
| 560 | move.w d0,-(a7) | put column on stack
|
---|
| 561 | move.w #4,-(a7) | put row on stack
|
---|
| 562 | move.l _obj8,-(a7) | put object address on stack
|
---|
| 563 | jsr _vputc | update the screen
|
---|
| 564 | add.l #12,a7 | clean up stack
|
---|
| 565 | move.w (a7)+,d0 | get group number
|
---|
| 566 | cmp.w #8,d0 | see which word it's in
|
---|
| 567 | bcc dsdyn1 | jump if in MS word
|
---|
| 568 |
|
---|
| 569 | bset d0,_vrbw10+1 | set group bit in LS byte
|
---|
| 570 | bra dsdyn2 | ...
|
---|
| 571 |
|
---|
| 572 | dsdyn1: sub.w #8,d0 | adjust for for byte
|
---|
| 573 | bset d0,_vrbw10 | set group bit in MS byte
|
---|
| 574 |
|
---|
| 575 | dsdyn2: bset #2,_vrcw | set video reset type bit
|
---|
| 576 | tst.w _ctrsw | update center for scupd ?
|
---|
| 577 | beq dsexit | done if not
|
---|
| 578 |
|
---|
[f40a309] | 579 | .page
|
---|
[4f508e6] | 580 | dsdyn00: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 581 | beq dsexit | ...
|
---|
| 582 |
|
---|
| 583 | movea.l d0,a1 | a1 = gdsp
|
---|
| 584 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 585 | move.w #52,d2 | d2 = event PRIORITY | 4
|
---|
| 586 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 587 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 588 | move.w #0x9999,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 589 | move.w #5,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 590 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 591 | bra dsexit | done
|
---|
| 592 |
|
---|
[f40a309] | 593 | .page
|
---|
[4f508e6] | 594 |
|
---|
| 595 | | dslocn -- display location
|
---|
| 596 | | ------ ----------------
|
---|
| 597 | dslocn: clr.w d0 | get group number
|
---|
| 598 | move.b E_DATA1(a0),d0 | ... in d0
|
---|
| 599 | add.w d0,d0 | ... as a word offset
|
---|
| 600 | lea _grpstat,a1 | check grpstat[grp]
|
---|
| 601 | tst.w 0(a1,d0.W) | ...
|
---|
| 602 | beq dsexit | done if not enabled
|
---|
| 603 |
|
---|
| 604 | tst.w P_CF(a6) | center update ?
|
---|
| 605 | beq dsloc00 | jump if not
|
---|
| 606 |
|
---|
| 607 | clr.w d0 | get location
|
---|
| 608 | move.b E_DATA2(a0),d0 | ... in d0
|
---|
| 609 | move.w d0,-(a7) | save location
|
---|
| 610 | clr.w d1 | get group number
|
---|
| 611 | move.b E_DATA1(a0),d1 | ... in d1
|
---|
| 612 | move.w d1,-(a7) | save group number
|
---|
| 613 | move.w (a7),d0 | col = group number
|
---|
| 614 | add.w d0,d0 | ... | 5
|
---|
| 615 | add.w d0,d0 | ...
|
---|
| 616 | move.w (a7)+,d2 | ... (d2 = group number)
|
---|
| 617 | add.w d2,d0 | ...
|
---|
| 618 | add.w #8,d0 | ... + 8
|
---|
| 619 | move.w (a7)+,d1 | get location
|
---|
| 620 | add.w #0x0031,d1 | add '0' for ASCII conversion
|
---|
| 621 | move.w d2,-(a7) | save group number
|
---|
| 622 | move.w #AT11,-(a7) | put attribute on stack
|
---|
| 623 | move.w d1,-(a7) | put character on stack
|
---|
| 624 | move.w d0,-(a7) | put column on stack
|
---|
| 625 | move.w #4,-(a7) | put row on stack
|
---|
| 626 | move.l _obj8,-(a7) | put object address on stack
|
---|
| 627 | jsr _vputc | update the screen
|
---|
| 628 | add.l #12,a7 | clean up stack
|
---|
| 629 | move.w (a7)+,d0 | get group number
|
---|
| 630 | cmp.w #8,d0 | see which word it's in
|
---|
| 631 | bcc dslocn1 | jump if in MS word
|
---|
| 632 |
|
---|
| 633 | bset d0,_vrbw11+1 | set group bit in LS byte
|
---|
| 634 | bra dslocn2 | ...
|
---|
| 635 |
|
---|
| 636 | dslocn1: sub.w #8,d0 | adjust for for byte
|
---|
| 637 | bset d0,_vrbw11 | set group bit in MS byte
|
---|
| 638 |
|
---|
| 639 | dslocn2: bset #3,_vrcw | set video reset type bit
|
---|
| 640 | tst.w _ctrsw | update center for scupd ?
|
---|
| 641 | beq dsexit | done if not
|
---|
| 642 |
|
---|
[f40a309] | 643 | .page
|
---|
[4f508e6] | 644 | dsloc00: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 645 | beq dsexit | ...
|
---|
| 646 |
|
---|
| 647 | movea.l d0,a1 | a1 = gdsp
|
---|
| 648 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 649 | move.w #52,d2 | d2 = event PRIORITY | 4
|
---|
| 650 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 651 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 652 | move.w #0x9999,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 653 | move.w #5,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 654 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 655 | bra dsexit | done
|
---|
| 656 |
|
---|
[f40a309] | 657 | .page
|
---|
[4f508e6] | 658 |
|
---|
| 659 | | dsanrs -- display analog resolution
|
---|
| 660 | | ------ -------------------------
|
---|
| 661 | dsanrs: move.b E_DATA1(a0),d1 | get var / group
|
---|
| 662 | move.w d1,d0 | extract group number
|
---|
| 663 | andi.w #0x000F,d0 | ... in d0
|
---|
| 664 | add.w d0,d0 | ... as a word offset
|
---|
| 665 | lea _grpstat,a1 | check grpstat[grp]
|
---|
| 666 | tst.w 0(a1,d0.W) | ...
|
---|
| 667 | beq dsexit | done if not enabled
|
---|
| 668 |
|
---|
| 669 | tst.w P_CF(a6) | center update ?
|
---|
| 670 | beq dsanrs0 | jump if not
|
---|
| 671 |
|
---|
| 672 | move.w _angroup,d2 | see if we display
|
---|
| 673 | bmi dsexit | jump if not
|
---|
| 674 |
|
---|
| 675 | subq.w #1,d2 | adust selected group number
|
---|
| 676 | move.w d1,d0 | extract group from event
|
---|
| 677 | andi.w #0x000F,d0 | ...
|
---|
| 678 | cmp.w d0,d2 | see if we display
|
---|
| 679 | bne dsexit | jump if not
|
---|
| 680 |
|
---|
| 681 | lsr.w #4,d1 | extract variable number
|
---|
| 682 | andi.w #0x000F,d1 | ...
|
---|
| 683 | move.w d1,-(a7) | save variable number
|
---|
| 684 | move.w d1,d0 | calculate display offset
|
---|
| 685 | lsl.w #3,d0 | ... (var | 9) + 6
|
---|
| 686 | add.w d0,d1 | ... in d1
|
---|
| 687 | addq.w #6,d1 | ...
|
---|
| 688 | move.b E_DATA2(a0),d0 | get resolution
|
---|
| 689 | addi.w #0x0030,d0 | convert for display
|
---|
| 690 | move.w #AT12,-(a7) | put attribute on stack
|
---|
| 691 | move.w d0,-(a7) | put character on stack
|
---|
| 692 | move.w d1,-(a7) | put column on stack
|
---|
| 693 | move.w #7,-(a7) | put row on stack
|
---|
| 694 | move.l _obj8,-(a7) | put sbase on stack
|
---|
| 695 | jsr _vputc | update the screen
|
---|
| 696 | add.l #12,a7 | clean up stack
|
---|
| 697 | move.w (a7)+,d0 | get variable number
|
---|
| 698 | bset d0,_vrbw13+1 | set variable bit
|
---|
| 699 | bset #5,_vrcw | set video reset type bit
|
---|
| 700 | tst.w _ctrsw | update center for scupd ?
|
---|
| 701 | beq dsexit | done if not
|
---|
| 702 |
|
---|
[f40a309] | 703 | .page
|
---|
[4f508e6] | 704 | dsanrs0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 705 | beq dsexit | ...
|
---|
| 706 |
|
---|
| 707 | movea.l d0,a1 | a1 = gdsp
|
---|
| 708 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 709 | move.w #52,d2 | d2 = event PRIORITY | 4
|
---|
| 710 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 711 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 712 | move.w #0x9999,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 713 | move.w #6,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 714 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 715 | bra dsexit | done
|
---|
| 716 |
|
---|
[f40a309] | 717 | .page
|
---|
[4f508e6] | 718 |
|
---|
| 719 | | dsanvl -- display analog value
|
---|
| 720 | | ------ --------------------
|
---|
| 721 | dsanvl: move.w _angroup,d2 | see if we display
|
---|
| 722 | bmi dsexit | jump if not
|
---|
| 723 |
|
---|
| 724 | move.b E_DATA1(a0),d1 | get var / group
|
---|
| 725 | move.w d1,d0 | extract group number
|
---|
| 726 | andi.w #0x000F,d0 | ... in d0
|
---|
| 727 | add.w d0,d0 | ... as a word offset
|
---|
| 728 | lea _grpstat,a1 | check grpstat[grp]
|
---|
| 729 | tst.w 0(a1,d0.W) | ...
|
---|
| 730 | beq dsexit | done if not enabled
|
---|
| 731 |
|
---|
| 732 | tst.w P_CF(a6) | center update ?
|
---|
| 733 | beq dsanvl0 | jump if not
|
---|
| 734 |
|
---|
| 735 | subq.w #1,d2 | adust group number
|
---|
| 736 | move.w d1,d0 | extract group
|
---|
| 737 | andi.w #0x000F,d0 | ...
|
---|
| 738 | cmp.w d0,d2 | see if we display
|
---|
| 739 | bne dsexit | jump if not
|
---|
| 740 |
|
---|
| 741 | lsr.w #4,d1 | extract variable number
|
---|
| 742 | andi.w #0x000F,d1 | ...
|
---|
| 743 | move.w d1,-(a7) | save variable number
|
---|
| 744 | move.w d1,d0 | calculate display offset
|
---|
| 745 | lsl.w #3,d0 | ... (var | 9) + 8
|
---|
| 746 | add.w d0,d1 | ... in d1
|
---|
| 747 | addi.w #8,d1 | ...
|
---|
| 748 | move.w E_DN(a0),d0 | get value
|
---|
| 749 | asr.w #5,d0 | adjust to low 11 bits
|
---|
| 750 | bpl dsanvl1 | jump if positive
|
---|
| 751 |
|
---|
| 752 | move.b #'-',numstr | set sign = '-'
|
---|
| 753 | neg.w d0 | make value positive
|
---|
[f40a309] | 754 | bra dsanvl2
|
---|
[4f508e6] | 755 |
|
---|
| 756 | dsanvl1: move.b #'+',numstr | set sign = '+'
|
---|
| 757 |
|
---|
[f40a309] | 758 | .page
|
---|
[4f508e6] | 759 | dsanvl2: ext.l d0 | convert MS digit
|
---|
| 760 | divu #1000,d0 | ...
|
---|
| 761 | add.w #0x0030,d0 | ...
|
---|
| 762 | move.b d0,numstr+1 | ...
|
---|
| 763 | swap d0 | convert middle digit
|
---|
| 764 | ext.l d0 | ...
|
---|
| 765 | divu #100,d0 | ...
|
---|
| 766 | add.w #0x0030,d0 | ...
|
---|
| 767 | move.b d0,numstr+2 | ...
|
---|
| 768 | move.b #'.',numstr+3 | insert decimal point
|
---|
| 769 | swap d0 | convert LS digit
|
---|
| 770 | ext.l d0 | ...
|
---|
| 771 | divu #10,d0 | ...
|
---|
| 772 | add.w #0x0030,d0 | ...
|
---|
| 773 | move.b d0,numstr+4 | ...
|
---|
| 774 | clr.b numstr+5 | terminate string
|
---|
| 775 | move.w #AT12,-(a7) | put attribute on stack
|
---|
| 776 | move.l #numstr,-(a7) | put buffer address on stack
|
---|
| 777 | move.w d1,-(a7) | put column on stack
|
---|
| 778 | move.w #7,-(a7) | put row on stack
|
---|
| 779 | move.l _obj8,-(a7) | put sbase on stack
|
---|
| 780 | jsr _vputs | update the screen
|
---|
| 781 | add.l #14,a7 | clean up stack
|
---|
| 782 | move.w (a7)+,d0 | get variable number
|
---|
| 783 | bset d0,_vrbw14+1 | set variable bit
|
---|
| 784 | bset #6,_vrcw | set video reset type bit
|
---|
| 785 | tst.w _ctrsw | update center for scupd ?
|
---|
| 786 | beq dsexit | done if not
|
---|
| 787 |
|
---|
| 788 | dsanvl0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 789 | beq dsexit | ...
|
---|
| 790 |
|
---|
| 791 | movea.l d0,a1 | a1 = gdsp
|
---|
| 792 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 793 | move.w #52,d2 | d2 = event PRIORITY | 4
|
---|
| 794 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 795 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 796 | move.w #0x9999,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 797 | move.w #6,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 798 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 799 | bra dsexit | done
|
---|
| 800 |
|
---|
[f40a309] | 801 | .page
|
---|
[4f508e6] | 802 |
|
---|
| 803 | | dsasgn -- display assignment
|
---|
| 804 | | ------ ------------------
|
---|
| 805 | dsasgn: tst.w P_CF(a6) | center update ?
|
---|
| 806 | beq dsasgn0 | jump if not
|
---|
| 807 |
|
---|
| 808 | move.l a0,-(a7) | stash a0
|
---|
| 809 | jsr _mpcupd | update changed stuff
|
---|
| 810 | movea.l (a7)+,a0 | restore a0
|
---|
| 811 | clr.w d1 | get assignment
|
---|
| 812 | move.b E_DATA1(a0),d1 | ... from the event
|
---|
| 813 | ext.l d1 | ... as a long in d1
|
---|
| 814 | divu #10,d1 | divide by 10 for conversion
|
---|
| 815 | add.l #0x00300030,d1 | add '0' for ASCII conversion
|
---|
| 816 | move.b d1,numstr | put MS byte in work area
|
---|
| 817 | swap d1 | swap register halves
|
---|
| 818 | move.b d1,numstr+1 | put LS byte in work area
|
---|
| 819 | clr.b numstr+2 | terminate string
|
---|
| 820 | move.w #AT04,-(a7) | put attribute on stack
|
---|
| 821 | move.l #numstr,-(a7) | put buffer address on stack
|
---|
| 822 | move.w #11,-(a7) | put column on stack
|
---|
| 823 | move.w #1,-(a7) | put row on stack
|
---|
| 824 | move.l _obj8,-(a7) | put sbase on stack
|
---|
| 825 | jsr _vputs | update the screen
|
---|
| 826 | add.l #14,a7 | clean up stack
|
---|
| 827 | bset #0,_vrcw+1 | set video reset type bit
|
---|
| 828 | tst.w _ctrsw | update center for scupd ?
|
---|
[7848656] | 829 | beq dsexit | done if not
|
---|
[4f508e6] | 830 |
|
---|
| 831 | dsasgn0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 832 | beq dsexit | ...
|
---|
| 833 |
|
---|
| 834 | movea.l d0,a1 | a1 = gdsp
|
---|
| 835 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 836 | move.w #56,d2 | d2 = event PRIORITY | 4
|
---|
| 837 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 838 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 839 | move.w #0x3333,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 840 | move.w #3,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 841 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 842 | bra dsexit | done
|
---|
| 843 |
|
---|
[f40a309] | 844 | .page
|
---|
[4f508e6] | 845 |
|
---|
| 846 | | dstmpo -- display tempo
|
---|
| 847 | | ------ -------------
|
---|
| 848 | dstmpo: tst.w P_CF(a6) | center update ?
|
---|
| 849 | beq dstmpo0 | jump if not
|
---|
| 850 |
|
---|
| 851 | clr.w d1 | get tempo
|
---|
| 852 | move.b E_DATA1(a0),d1 | ... from event
|
---|
| 853 | ext.l d1 | ... as a long in d1
|
---|
| 854 | divu #10,d1 | divide by 10 for conversion
|
---|
| 855 | swap d1 | swap register halves
|
---|
| 856 | add.w #0x0030,d1 | add '0' for ASCII conversion
|
---|
| 857 | move.b d1,numstr+2 | put LS byte in work area
|
---|
| 858 | swap d1 | swap register halves
|
---|
| 859 | ext.l d1 | divide again
|
---|
| 860 | divu #10,d1 | ...
|
---|
| 861 | add.l #0x00300030,d1 | add '0' for ASCII conversion
|
---|
| 862 | move.b d1,numstr | put MS byte in work area
|
---|
| 863 | swap d1 | swap register halves
|
---|
| 864 | move.b d1,numstr+1 | put middle byte in work area
|
---|
| 865 | clr.b numstr+3 | terminate string
|
---|
| 866 | move.w #AT06,-(a7) | put attribute on stack
|
---|
| 867 | move.l #numstr,-(a7) | put buffer address on stack
|
---|
| 868 | move.w #27,-(a7) | put column on stack
|
---|
| 869 | move.w #1,-(a7) | put row on stack
|
---|
| 870 | move.l _obj8,-(a7) | put sbase on stack
|
---|
| 871 | jsr _vputs | display tempo
|
---|
| 872 | add.l #14,a7 | clean up stack
|
---|
| 873 | bset #2,_vrcw+1 | set video reset type bit
|
---|
| 874 | tst.w _ctrsw | update center for scupd ?
|
---|
| 875 | beq dsexit | done if not
|
---|
| 876 |
|
---|
| 877 | dstmpo0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 878 | beq dsexit | ...
|
---|
| 879 |
|
---|
| 880 | movea.l d0,a1 | a1 = gdsp
|
---|
| 881 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 882 | move.w #56,d2 | d2 = event PRIORITY | 4
|
---|
| 883 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 884 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 885 | move.w #0x3333,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 886 | move.w #4,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 887 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 888 | bra dsexit | done
|
---|
| 889 |
|
---|
[f40a309] | 890 | .page
|
---|
[4f508e6] | 891 |
|
---|
| 892 | | dsstop -- display stop
|
---|
| 893 | | ------ ------------
|
---|
| 894 | dsstop: tst.w P_CF(a6) | center update ?
|
---|
| 895 | beq dsstop0 | jump if not
|
---|
| 896 |
|
---|
| 897 | jsr _dclkmd | show that clock is stopped
|
---|
| 898 | move.w #AT08,-(a7) | put attribute on stack
|
---|
| 899 | move.w #40,-(a7) | put 1st column on stack
|
---|
| 900 | move.w #1,-(a7) | put row on stack
|
---|
| 901 | move.l _obj8,-(a7) | put sbase on stack
|
---|
| 902 | jsr _vputa | hilite first column
|
---|
| 903 | move.w #41,COL(a7) | put 2nd column on stack
|
---|
| 904 | jsr _vputa | hilite second column
|
---|
| 905 | move.w #42,COL(a7) | put 3rd column on stack
|
---|
| 906 | jsr _vputa | hilite third column
|
---|
| 907 | move.w #43,COL(a7) | put 4th column on stack
|
---|
| 908 | jsr _vputa | hilite fourth column
|
---|
| 909 | add.l #10,a7 | clean up stack
|
---|
| 910 | bset #7,_vrcw | set video reset type bits
|
---|
| 911 | bset #0,_vrbw15 | ...
|
---|
| 912 | tst.w _ctrsw | update center for scupd ?
|
---|
| 913 | beq dsexit | done if not
|
---|
| 914 |
|
---|
| 915 | dsstop0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 916 | beq dsexit | ...
|
---|
| 917 |
|
---|
| 918 | movea.l d0,a1 | a1 = gdsp
|
---|
| 919 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 920 | move.w #56,d2 | d2 = event PRIORITY | 4
|
---|
| 921 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 922 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 923 | move.w #0x3333,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 924 | move.w #5,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 925 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 926 | bra dsexit | done
|
---|
| 927 |
|
---|
[f40a309] | 928 | .page
|
---|
[4f508e6] | 929 |
|
---|
| 930 | | dsnext -- display next
|
---|
| 931 | | ------ ------------
|
---|
| 932 | dsnext: tst.w P_CF(a6) | center update ?
|
---|
| 933 | beq dsnext0 | jump if not
|
---|
| 934 |
|
---|
| 935 | move.w #AT08,-(a7) | put attribute on stack
|
---|
| 936 | move.w #45,-(a7) | put 1st column on stack
|
---|
| 937 | move.w #1,-(a7) | put row on stack
|
---|
| 938 | move.l _obj8,-(a7) | put sbase on stack
|
---|
| 939 | jsr _vputa | hilite first column
|
---|
| 940 | move.w #46,COL(a7) | put 2nd column on stack
|
---|
| 941 | jsr _vputa | hilite second column
|
---|
| 942 | move.w #47,COL(a7) | put 3rd column on stack
|
---|
| 943 | jsr _vputa | hilite third column
|
---|
| 944 | move.w #48,COL(a7) | put 4th column on stack
|
---|
| 945 | jsr _vputa | hilite fourth column
|
---|
| 946 | add.l #10,a7 | clean up stack
|
---|
| 947 | bset #7,_vrcw | set video reset type bits
|
---|
| 948 | bset #1,_vrbw15 | ...
|
---|
| 949 | tst.w _ctrsw | update center for scupd ?
|
---|
| 950 | beq dsexit | done if not
|
---|
| 951 |
|
---|
| 952 | dsnext0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 953 | beq dsexit | ...
|
---|
| 954 |
|
---|
| 955 | movea.l d0,a1 | a1 = gdsp
|
---|
| 956 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 957 | move.w #56,d2 | d2 = event PRIORITY | 4
|
---|
| 958 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 959 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 960 | move.w #0x3333,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 961 | move.w #5,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 962 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 963 | bra dsexit | done
|
---|
| 964 |
|
---|
[f40a309] | 965 | .page
|
---|
[4f508e6] | 966 |
|
---|
| 967 | | dsgrp -- display group status
|
---|
| 968 | | ----- --------------------
|
---|
| 969 | dsgrp: tst.w P_CF(a6) | center update ?
|
---|
| 970 | beq dsgrp0 | jump if not
|
---|
| 971 |
|
---|
| 972 | tst.w _ctrsw | update center for scupd ?
|
---|
| 973 | beq dsexit | done if not
|
---|
| 974 |
|
---|
| 975 | dsgrp0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 976 | beq dsexit | ...
|
---|
| 977 |
|
---|
| 978 | movea.l d0,a1 | a1 = gdsp
|
---|
| 979 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 980 | move.w #60,d2 | d2 = event PRIORITY | 4
|
---|
| 981 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 982 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 983 | move.w #0x9999,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 984 | move.w #3,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 985 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 986 | bra dsexit | done
|
---|
| 987 |
|
---|
[f40a309] | 988 | .page
|
---|
[4f508e6] | 989 |
|
---|
| 990 | | dsinst -- display instrument
|
---|
| 991 | | ------ ------------------
|
---|
| 992 | dsinst: clr.w d0 | get group number
|
---|
| 993 | move.b E_DATA1(a0),d0 | ... in d0
|
---|
| 994 | add.w d0,d0 | ... as a word offset
|
---|
| 995 | lea _grpstat,a1 | check grpstat[grp]
|
---|
| 996 | tst.w 0(a1,d0.W) | ...
|
---|
| 997 | beq dsexit | done if not enabled
|
---|
| 998 |
|
---|
| 999 | tst.w P_CF(a6) | center update ?
|
---|
| 1000 | beq dsins00 | jump if not
|
---|
| 1001 |
|
---|
| 1002 | lea _ins2grp,a1 | point at ins2grp[]
|
---|
| 1003 | clr.w d0 | get instrument number
|
---|
| 1004 | move.b E_DATA2(a0),d0 | ... in d0
|
---|
| 1005 | move.w d0,-(a7) | save instrument number
|
---|
| 1006 | clr.w d1 | get group number
|
---|
| 1007 | move.b E_DATA1(a0),d1 | ... in d1
|
---|
| 1008 | move.w d1,-(a7) | save group number
|
---|
| 1009 | move.w (a7),d0 | col = group number
|
---|
| 1010 | add.w d0,d0 | ... | 5
|
---|
| 1011 | add.w d0,d0 | ...
|
---|
| 1012 | move.w (a7)+,d2 | ... (d2 = group number)
|
---|
| 1013 | add.w d2,d0 | ...
|
---|
| 1014 | add.w #7,d0 | ... + 7
|
---|
| 1015 | clr.l d1 | get instrument number
|
---|
| 1016 | move.w (a7)+,d1 | ... as a long in d1
|
---|
| 1017 | divu #10,d1 | divide by 10 for conversion
|
---|
| 1018 | add.l #0x00300030,d1 | add '0' for ASCII conversion
|
---|
| 1019 | move.b d1,numstr | put MS byte in work area
|
---|
| 1020 | swap d1 | swap register halves
|
---|
| 1021 | move.b d1,numstr+1 | put LS byte in work area
|
---|
| 1022 | clr.b numstr+2 | terminate string
|
---|
| 1023 | move.w d2,-(a7) | save group number
|
---|
| 1024 | move.w #AT11,-(a7) | put attribute on stack
|
---|
| 1025 | move.l #numstr,-(a7) | put buffer address on stack
|
---|
| 1026 | move.w d0,-(a7) | put column on stack
|
---|
| 1027 | move.w #2,-(a7) | put row on stack
|
---|
| 1028 | move.l _obj8,-(a7) | put object address on stack
|
---|
| 1029 | jsr _vputs | update the screen
|
---|
| 1030 | add.l #14,a7 | clean up stack
|
---|
| 1031 |
|
---|
[f40a309] | 1032 | .page
|
---|
[4f508e6] | 1033 | move.w (a7)+,d0 | get group number
|
---|
| 1034 | cmp.w #8,d0 | see which word it's in
|
---|
| 1035 | bcc dsinst1 | jump if in MS word
|
---|
| 1036 |
|
---|
| 1037 | bset d0,_vrbw08+1 | set group bit in LS byte
|
---|
| 1038 | bra dsinst2 | ...
|
---|
| 1039 |
|
---|
| 1040 | dsinst1: sub.w #8,d0 | adjust for for byte
|
---|
| 1041 | bset d0,_vrbw08 | set group bit in MS byte
|
---|
| 1042 |
|
---|
| 1043 | dsinst2: bset #0,_vrcw | set video reset type bit
|
---|
| 1044 | tst.w _ctrsw | update center for scupd ?
|
---|
| 1045 | beq dsexit | done if not
|
---|
| 1046 |
|
---|
| 1047 | dsins00: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 1048 | beq dsexit | ...
|
---|
| 1049 |
|
---|
| 1050 | movea.l d0,a1 | a1 = gdsp
|
---|
| 1051 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 1052 | move.w #60,d2 | d2 = event PRIORITY | 4
|
---|
| 1053 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 1054 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 1055 | move.w #0x9999,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 1056 | move.w #3,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 1057 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 1058 | bra dsexit | done
|
---|
| 1059 |
|
---|
[f40a309] | 1060 | .page
|
---|
[4f508e6] | 1061 |
|
---|
| 1062 | | dsintp -- display interpolation
|
---|
| 1063 | | ------ ---------------------
|
---|
| 1064 | dsintp: tst.w P_CF(a6) | center update ?
|
---|
| 1065 | beq dsintp0 | jump if not
|
---|
| 1066 |
|
---|
| 1067 | move.w E_DATA1(a0),-(a7) | get interpolate value
|
---|
| 1068 | jsr _fromfpu | convert to milliseconds
|
---|
| 1069 | tst.w (a7)+ | ...
|
---|
| 1070 | andi.l #0x0000FFFF,d0 | clear high bits
|
---|
| 1071 | divu #10000,d0 | convert 1st digit
|
---|
| 1072 | addi.w #0x0030,d0 | ... to ASCII
|
---|
| 1073 | move.b d0,numstr | ... in numstr
|
---|
| 1074 | swap d0 | convert 2nd digit
|
---|
| 1075 | ext.l d0 | ...
|
---|
| 1076 | divu #1000,d0 | ...
|
---|
| 1077 | addi.w #0x0030,d0 | ... to ASCII
|
---|
| 1078 | move.b d0,numstr+1 | ... in numstr
|
---|
| 1079 | move.b #'.',numstr+2 | insert decimal point
|
---|
| 1080 | swap d0 | convert 3rd digit
|
---|
| 1081 | ext.l d0 | ...
|
---|
| 1082 | divu #100,d0 | ...
|
---|
| 1083 | addi.w #0x0030,d0 | ... to ASCII
|
---|
| 1084 | move.b d0,numstr+3 | ... in numstr
|
---|
| 1085 | clr.b numstr+4 | terminate numstr
|
---|
| 1086 | move.w #AT07,-(a7) | vputs(obj8, 1, 35, numstr, AT07)
|
---|
| 1087 | move.l #numstr,-(a7) | ...
|
---|
| 1088 | move.w #35,-(a7) | ...
|
---|
| 1089 | move.w #1,-(a7) | ...
|
---|
| 1090 | move.l _obj8,-(a7) | ...
|
---|
| 1091 | jsr _vputs | ...
|
---|
| 1092 | add.l #14,a7 | ...
|
---|
| 1093 | bset #3,_vrcw+1 | set video reset bit
|
---|
| 1094 | tst.w _ctrsw | update center for scupd ?
|
---|
| 1095 | beq dsexit | done if not
|
---|
| 1096 |
|
---|
| 1097 | dsintp0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 1098 | beq dsexit | ...
|
---|
| 1099 |
|
---|
| 1100 | movea.l d0,a1 | a1 = gdsp
|
---|
| 1101 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 1102 | move.w #60,d2 | d2 = event PRIORITY | 4
|
---|
| 1103 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 1104 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 1105 | move.w #0xCCCC,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 1106 | move.w #4,G_CODE(a1) | gdsp->code = PATTERN
|
---|
| 1107 | move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 1108 | bra dsexit | done
|
---|
| 1109 |
|
---|
[f40a309] | 1110 | .page
|
---|
[4f508e6] | 1111 |
|
---|
| 1112 | | dspnch -- display punch in/out
|
---|
| 1113 | | ------ --------------------
|
---|
| 1114 | dspnch: tst.w P_CF(a6) | center update ?
|
---|
| 1115 | beq dspnch0 | jump if not
|
---|
| 1116 |
|
---|
| 1117 | tst.w E_DATA1(a0) | punch in ?
|
---|
| 1118 | beq dspnch1 | jump if not
|
---|
| 1119 |
|
---|
| 1120 | move.w #AT09,-(a7) | put attribute on stack
|
---|
| 1121 | move.w #50,-(a7) | put 1st col on stack
|
---|
| 1122 | move.w #1,-(a7) | put row on stack
|
---|
| 1123 | move.l _obj8,-(a7) | put object address on stack
|
---|
| 1124 | jsr _vputa | highlight 1st column
|
---|
| 1125 | move.w #51,COL(a7) | put 2nd col on stack
|
---|
| 1126 | jsr _vputa | highlight 2nd col
|
---|
| 1127 | add.l #10,a7 | clean up stack
|
---|
| 1128 | bset #5,_vrcw+1 | set video reset bit
|
---|
| 1129 | bra dspnch2 | go do maker update
|
---|
| 1130 |
|
---|
| 1131 | dspnch1: move.w #AT09,-(a7) | put attribute on stack
|
---|
| 1132 | move.w #53,-(a7) | put 1st col on stack
|
---|
| 1133 | move.w #1,-(a7) | put row on stack
|
---|
| 1134 | move.l _obj8,-(a7) | put object address on stack
|
---|
| 1135 | jsr _vputa | highlight 1st column
|
---|
| 1136 | move.w #54,COL(a7) | put 2nd col on stack
|
---|
| 1137 | jsr _vputa | highlight 2nd column
|
---|
| 1138 | move.w #55,COL(a7) | put 3rd col on stack
|
---|
| 1139 | jsr _vputa | highlight 3rd column
|
---|
| 1140 | add.l #10,a7 | clean up stack
|
---|
| 1141 | bset #6,_vrcw+1 | set video reset bit
|
---|
| 1142 |
|
---|
| 1143 | dspnch2: jsr _dsgmodz | display updated modes
|
---|
| 1144 | tst.w _ctrsw | update center for scupd ?
|
---|
| 1145 | beq dsexit | done if not
|
---|
| 1146 |
|
---|
| 1147 | dspnch0: move.l _gdfsep,d0 | quit if no elements left
|
---|
| 1148 | beq dsexit | ...
|
---|
| 1149 |
|
---|
| 1150 | movea.l d0,a1 | a1 = gdsp
|
---|
| 1151 | move.l G_NEXT(a1),_gdfsep | gdfsep = gdsp->next
|
---|
| 1152 | move.w #60,d2 | d2 = event PRIORITY | 4
|
---|
| 1153 | movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 1154 | move.l 0(a2,d2.W),G_NEXT(a1) | gdsp->next = gdstb[pri]
|
---|
| 1155 | move.w #0xCCCC,G_NOTE(a1) | gdsp->note = COLOR
|
---|
| 1156 | tst.w E_DATA1(a0) | see which kind we have
|
---|
| 1157 | bne dspnchi | jump if 'punch in'
|
---|
| 1158 |
|
---|
| 1159 | move.w #6,G_CODE(a1) | gdsp->code = 'out' PATTERN
|
---|
[f40a309] | 1160 | bra dspnchx
|
---|
[4f508e6] | 1161 |
|
---|
| 1162 | dspnchi: move.w #5,G_CODE(a1) | gdsp->code = 'in' PATTERN
|
---|
| 1163 |
|
---|
| 1164 | dspnchx: move.l a1,0(a2,d2.W) | gdstb[pri] = gdsp
|
---|
| 1165 | bra dsexit | done
|
---|
| 1166 |
|
---|
[f40a309] | 1167 | .page
|
---|
[4f508e6] | 1168 |
|
---|
| 1169 | | dsbar -- display a bar marker
|
---|
| 1170 | | ----- --------------------
|
---|
| 1171 | dsbar: tst.w P_CF(a6) | center update ?
|
---|
| 1172 | beq dsbar0 | jump if not
|
---|
| 1173 |
|
---|
| 1174 | tst.w _ctrsw | update center for scupd ?
|
---|
| 1175 | beq dsexit | done if not
|
---|
| 1176 |
|
---|
| 1177 | dsbar0: movea.l P_SL(a6),a2 | a2 points at gdstb
|
---|
| 1178 | move.l #-1,BARFLAG(a2) | set the bar marker flag
|
---|
| 1179 | bra dsexit | done
|
---|
| 1180 |
|
---|
[f40a309] | 1181 | .page
|
---|
[4f508e6] | 1182 |
|
---|
| 1183 | | ==============================================================================
|
---|
[f40a309] | 1184 | .data
|
---|
[4f508e6] | 1185 | | ==============================================================================
|
---|
| 1186 |
|
---|
| 1187 | | sddtab -- score display dispatch table -- MUST match score.h definitions
|
---|
| 1188 | | ------ ---------------------------- ------------------------------
|
---|
| 1189 | sddtab: dc.l dsexit | 0 null
|
---|
| 1190 | dc.l dsexit | 1 score begin
|
---|
| 1191 | dc.l dssbgn | 2 section begin
|
---|
| 1192 | dc.l dssend | 3 section end
|
---|
| 1193 | dc.l dsinst | 4 instrument change
|
---|
| 1194 | dc.l dsnbx | 5 note begin
|
---|
| 1195 | dc.l dsnex | 6 note end
|
---|
| 1196 | dc.l dsstop | 7 stop
|
---|
| 1197 | dc.l dsintp | 8 interpolate
|
---|
| 1198 | dc.l dstmpo | 9 tempo
|
---|
| 1199 | dc.l dstune | 10 tuning
|
---|
| 1200 | dc.l dsgrp | 11 group status
|
---|
| 1201 | dc.l dslocn | 12 location
|
---|
| 1202 | dc.l dsdyn | 13 dynamics
|
---|
| 1203 | dc.l dsanvl | 14 analog value
|
---|
| 1204 | dc.l dsanrs | 15 analog resolution
|
---|
| 1205 | dc.l dsasgn | 16 I/O assign
|
---|
| 1206 | dc.l dstrns | 17 transposition
|
---|
| 1207 | dc.l dsexit | 18 repeat
|
---|
| 1208 | dc.l dspnch | 19 punch in/out
|
---|
| 1209 | dc.l dsexit | 20 polyphonic pressure
|
---|
| 1210 | dc.l dsexit | 21 score end
|
---|
| 1211 | dc.l dsexit | 22 channel pressure
|
---|
| 1212 | dc.l dsbar | 23 bar marker
|
---|
| 1213 | dc.l dsnext | 24 next score
|
---|
| 1214 |
|
---|
| 1215 | | ==============================================================================
|
---|
[f40a309] | 1216 | .bss
|
---|
[4f508e6] | 1217 | | ==============================================================================
|
---|
| 1218 |
|
---|
| 1219 | | globals:
|
---|
| 1220 | | --------
|
---|
| 1221 | _ac_code: ds.b 1 | accidental code
|
---|
| 1222 |
|
---|
| 1223 | | locals:
|
---|
| 1224 | | -------
|
---|
| 1225 | numstr: ds.b 65 | video display update work area
|
---|
| 1226 |
|
---|
| 1227 | | ------------------------------------------------------------------------------
|
---|
| 1228 |
|
---|
[f40a309] | 1229 | .end
|
---|