Changeset 4f508e6 in buchla-68k for ram/sedisp.s
- Timestamp:
- 07/01/2017 02:34:46 PM (7 years ago)
- Branches:
- master
- Children:
- 08e1da1
- Parents:
- f40a309
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ram/sedisp.s
rf40a309 r4f508e6 1 *------------------------------------------------------------------------------2 *sedisp.s -- score event display driver3 *Version 43 -- 1988-09-26 -- D.N. Lynx Crowe4 * 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', by12 *updating 'gdstb'. Uses the accidental code in 'ac_code', and13 *the note type table 'nsvtab'. Checks 'cf' to determine if14 *we're displaying in the center of the screen.15 *Allocates gdsel events as needed for new events.16 *------------------------------------------------------------------------------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 | ------------------------------------------------------------------------------ 17 17 .text 18 * 18 19 19 .xdef _se_disp 20 * 20 21 21 .xdef _ac_code 22 22 .xdef numstr 23 * 23 24 24 .xref _dclkmd 25 25 .xref _dsgmodz … … 29 29 .xref _vputc 30 30 .xref _vputs 31 * 31 32 32 .xref _angroup 33 33 .xref _ctrsw … … 49 49 .xref _vrbw15 50 50 .xref _vrcw 51 * 52 .page 53 * 54 *parameter offsets55 *-----------------56 *for se_disp:57 *------------58 P_EP .equ 8 *LONG - event pointer59 P_SD .equ 12 *WORD - scroll direction60 P_SL .equ 14 *LONG - slice control table pointer61 P_CF .equ 18 *WORD - center slice flag62 * 63 *for vputa:64 *----------65 ROW .equ 4 *WORD - 'row' parameter offset66 COL .equ 6 *WORD - 'col' parameter offset67 ATR .equ 8 *WORD - 'atr' parameter offset68 * 69 *Character field attributes for highlighting70 *-------------------------------------------71 AT01 .equ $005472 AT04 .equ $005373 AT05 .equ $005474 AT06 .equ $005375 AT07 .equ $005476 AT08 .equ $005377 AT09 .equ $005478 AT10 .equ $005379 AT11 .equ $005280 AT12 .equ $005281 * 82 *Special character equates83 *-------------------------84 SP_M1 .equ $A1 *-185 SP_P1 .equ $A0 *+186 * 87 .page 88 * 89 *event structure offsets90 *-----------------------91 *offset length92 *------ ------93 E_TIME .equ 0 *LONG94 E_SIZE .equ 4 *BYTE95 E_TYPE .equ 5 *BYTE96 E_DATA1 .equ 6 *BYTE97 E_NOTE .equ 6 *BYTE98 E_DATA2 .equ 7 *BYTE99 E_GROUP .equ 7 *BYTE100 E_BAK .equ 8 *LONG101 E_FWD .equ 12 *LONG102 E_DN .equ 16 *LONG103 E_VEL .equ 16 *WORD104 E_DATA4 .equ 18 *WORD105 E_UP .equ 20 *LONG106 E_LFT .equ 24 *LONG107 E_RGT .equ 28 *LONG108 * 109 N_ETYPES .equ 25 *number of event types110 * 111 *gdsel structure definitions112 *---------------------------113 G_NEXT .equ 0 * long - 'next' field (struct gdsel *)114 G_NOTE .equ 4 *word - 'note' field (short)115 G_CODE .equ 6 *word - 'code' field (short)116 * 117 NATCH_B .equ 3 *uslice note code: 'begin natural'118 NOTE_E .equ 6 *uslice note code: 'end note'119 * 120 NGDSEL .equ 17 *number of event slots in gdstb121 * 122 BARFLAG .equ 4*(NGDSEL-1) *offset to the bar marker flag123 * 124 .page 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 enough130 *for this application. The faster this routine runs, the higher the131 *tempo we can keep up with. If this code is fast enough, we end up132 *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 frame135 movea.l P_EP(a6),a0 *get event pointer 'ep' into a0136 move.b E_TYPE(a0),d1 *get event type into d1.W137 andi.w # $007F,d1 *mask off new-note flag138 cmp.b #N_ETYPES,d1 *see if it's valid139 blt seds1 *jump if it is140 * 141 dsexit: unlk a6 *done -- unlink stack frames142 rts *return to caller143 * 144 seds1: lea sddtab,a1 *get base of dispatch table145 lsl.w #2,d1 *multiplty event by 4 for index146 movea.l 0(a1,d1.W),a2 *get address of event routine147 jmp (a2) *jump to event display routine148 * 149 *On entry, the individual display routines only depend on a0 pointing at the150 *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 * 155 .page 156 * 157 *dsnbx -- dispatch to begin / end based on sd158 *----- -----------------------------------159 dsnbx: tst.w P_SD(a7) *check direction160 bne dsne *treat as end if going backward161 * 162 *dsnb -- display note begin163 *---- ------------------164 dsnb: move.b E_TYPE(a0),d1 *get event type165 move.w d1,d2 *save in d2166 andi.w # $007F,d1 *clear new-note flag167 move.b d1,E_TYPE(a0) *store type back in event168 clr.w d0 *get group number169 move.b E_GROUP(a0),d0 *... in d0170 move.w d0,d1 *save group in d1171 add.w d0,d0 *make d0 a word offset172 lea _grpstat,a1 *check grpstat[grp]173 tst.w 0(a1,d0.W) *...174 beq dsexit *done if not enabled175 * 176 tst.w P_CF(a6) *check center slice flag177 beq dsnb0 *jump if not center slice178 * 179 tst.w _velflag *see if we display velocity180 beq dsnvx *jump if not181 * 182 move.w d2,-(a7) *save new-note flag on stack183 move.w d1,-(a7) *save group number on stack184 move.w E_VEL(a0),d0 *get velocity185 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 *scale190 divu #252,d0 *...191 cmpi.w #100,d0 *convert MS digit192 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 digits201 divu #10,d0 *...202 addi.l # $00300030,d0 *...203 move.b d0,numstr+1 *...204 swap d0 *...205 move.b d0,numstr+2 *...206 clr.b numstr+3 *terminate string207 move.w d1,d0 *col = group208 asl.w #2,d0 * ... *5209 add.w d1,d0 *...210 add.w #6,d0 *... + 6211 move.l a0,-(a7) *save event pointer on stack212 move.w #AT11,-(a7) *put attribute on stack213 move.l #numstr,-(a7) *put string address on stack214 move.w d0,-(a7) *put column on stack215 move.w #5,-(a7) *put row on stack216 move.l _obj8,-(a7) *put VSDD address on stack217 jsr _vputs *update the screen218 add.l #14,a7 *clean up stack219 movea.l (a7)+,a0 *restore event pointer220 * 221 .page 222 * 223 move.w (a7)+,d0 *get group from stack224 cmpi.w #12,d0 *see which byte it's in225 bcc dsnv2 *jump if in MS byte226 * 227 bset d0,_vrbw12+1 *set group bit in LS byte228 bra dsnv3 *...229 * 230 dsnv2: bset d0,_vrbw12 *set group bit in MS byte231 * 232 dsnv3: bset #4,_vrcw *set video reset type bit233 move.w (a7)+,d2 *get new-note flag from stack234 * 235 dsnvx: btst.l #7,d2 *check new-note flag236 beq dsexit *done if not set237 * 238 dsnb0: clr.w d1 *get note number nn (0..127)239 move.b E_NOTE(a0),d1 *... in d1240 sub.w #21,d1 *subtract base of piano scale241 bmi dsexit *done if not displayable242 * 243 cmp.w #87,d1 *see if it's too high244 bgt dsexit *done if not displayable245 * 246 move.l _gdfsep,d0 *quit if no elements left247 beq dsexit *...248 * 249 movea.l d0,a1 *a1 = gdsp250 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next251 clr.w d2 *d2 = ep->group252 move.b E_GROUP(a0),d2 *...253 lsl.w #2,d2 * ... *4254 movea.l P_SL(a6),a2 *a2 points at gdstb255 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] = gdsp257 move.w d1,G_NOTE(a1) *gdsp->note = nn258 lea _nsvtab,a2 *a2 points at nsvtab259 tst.b 0(a2,d1.W) *check nsvtab[nn]260 beq dsnb1 *jump if natural note261 * 262 move.b _ac_code,d1 *setup for an accidental note263 bra dsnb2 *...264 * 265 dsnb1: move.b #NATCH_B,d1 *setup for a natural note266 * 267 dsnb2: move.w d1,G_CODE(a1) *gdsp->code = note type268 bra dsexit *done269 * 270 .page 271 * 272 *dsnex -- dispatch to end/begin based on sd273 *----- ---------------------------------274 dsnex: tst.w P_SD(a7) *check direction275 bne dsnb *treat as begin if going backward276 * 277 *dsne -- display note end278 *---- ----------------279 dsne: move.b E_TYPE(a0),d1 *get event type280 move.w d1,d2 *save in d2281 andi.w # $007F,d1 *clear new-note flag282 move.b d1,E_TYPE(a0) *store type back in event283 clr.w d0 *get group number284 move.b E_GROUP(a0),d0 *... in d0285 add.w d0,d0 *... as a word offset286 lea _grpstat,a1 *check grpstat[grp]287 tst.w 0(a1,d0.W) *...288 beq dsexit *done if not enabled289 * 290 tst.w P_CF(a6) *check center slice flag291 beq dsne3 *jump if not center slice292 * 293 btst.l #7,d2 *check new-note flag294 beq dsexit *done if not set295 * 296 dsne3: move.b E_NOTE(a0),d1 *d1 = note number nn (0..127)297 sub.w #21,d1 *subtract base of piano scale298 bmi dsexit *done if not displayable299 * 300 cmp.w #87,d1 *see if it's too high301 bgt dsexit *done if not displayable302 * 303 movea.l P_SL(a6),a2 *a2 points at gdstb304 clr.w d2 *get group in d2305 move.b E_GROUP(a0),d2 *...306 lsl.w #2,d2 * ... *4307 move.l 0(a2,d2.W),d0 *check gdstb[ep->group]51 52 .page 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 87 .page 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 124 .page 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 155 .page 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 221 .page 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 270 .page 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] 308 308 beq dsexit 309 * 310 dsne0: movea.l d0,a1 *a1 = gdsp311 * 312 dsne1: cmp.w G_NOTE(a1),d1 *compare nn to gdsp->note313 bne dsne2 *jump if not the one we want314 * 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->next318 beq dsexit *done if next = NULL319 * 320 bra dsne0 *loop for next one321 * 322 .page 323 * 324 *dssbgn -- display section begin325 *------ ---------------------326 dssbgn: tst.w P_CF(a6) *center update ?327 beq dsbgn0 *jump if not328 * 329 clr.w d1 *get section number330 move.b E_DATA1(a0),d1 *... from the event331 addq.w #1,d1 *... adjusted for display332 ext.l d1 *... as a long in d1333 divu #10,d1 *divide by 10 for conversion334 add.l # $00300030,d1 *add '0' for ASCII conversion335 move.b d1,numstr *put MS byte in work area336 swap d1 *swap register halves337 move.b d1,numstr+1 *put LS byte in work area338 clr.b numstr+2 *terminate string339 move.w #AT01,-(a7) *put attribute on stack340 move.l #numstr,-(a7) *put buffer address on stack341 move.w #6,-(a7) *put column on stack342 move.w #0,-(a7) *put row on stack343 move.l _obj8,-(a7) *put sbase on stack344 jsr _vputs *update the screen345 add.l #14,a7 *clean up stack346 bset #4,_vrcw+1 *set video reset type bit347 tst.w _ctrsw *update center for scupd ?348 beq dsexit *done if not349 * 350 dsbgn0: move.l _gdfsep,d0 *quit if no elements left351 beq dsexit *...352 * 353 movea.l d0,a1 *a1 = gdsp354 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next355 move.w #48,d2 * d2 = event PRIORITY *4356 movea.l P_SL(a6),a2 *a2 points at gdstb357 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]358 move.w # $1111,G_NOTE(a1) *gdsp->note = COLOR359 move.w #0,G_CODE(a1) *gdsp->code = PATTERN360 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp361 bra dsexit *done362 * 363 .page 364 * 365 *dssend -- display section end366 *------ -------------------367 dssend: tst.w P_CF(a6) *center update ?368 beq dssend0 *jump if not369 * 370 tst.w _ctrsw *update center for scupd ?371 beq dsexit *done if not372 * 373 dssend0: move.l _gdfsep,d0 *quit if no elements left374 beq dsexit *...375 * 376 movea.l d0,a1 *a1 = gdsp377 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next378 move.w #48,d2 * d2 = event PRIORITY *4379 movea.l P_SL(a6),a2 *a2 points at gdstb380 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]381 move.w # $1111,G_NOTE(a1) *gdsp->note = COLOR382 move.w #2,G_CODE(a1) *gdsp->code = PATTERN383 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp384 bra dsexit *done385 * 386 *dsbeat -- display beat387 *------ ------------388 dsbeat: tst.w P_CF(a6) *center update ?389 bne dsexit *done if so390 * 391 move.l _gdfsep,d0 *quit if no elements left392 beq dsexit *...393 * 394 movea.l d0,a1 *a1 = gdsp395 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next396 move.w #48,d2 * d2 = event PRIORITY *4397 movea.l P_SL(a6),a2 *a2 points at gdstb398 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]399 move.w # $1111,G_NOTE(a1) *gdsp->note = COLOR400 move.w #1,G_CODE(a1) *gdsp->code = PATTERN401 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp402 bra dsexit *done403 * 404 .page 405 * 406 *dstune -- display tuning407 *------ --------------408 dstune: tst.w P_CF(a6) *center update ?409 beq dstune0 *jump if not410 * 411 clr.w d1 *get current tuning412 move.b E_DATA1(a0),d1 *...413 add.w # $0030,d1 *add '0' for ASCII conversion414 move.w #AT05,-(a7) *put attribute on stack415 move.w d1,-(a7) *put character on stack416 move.w #19,-(a7) *put column on stack417 move.w #1,-(a7) *put row on stack418 move.l _obj8,-(a7) *put sbase on stack419 jsr _vputc *display character420 add.l #12,a7 *clean up stack421 bset #1,_vrcw+1 *set video reset type bit422 tst.w _ctrsw *update center for scupd ?423 beq dsexit *done if not424 * 425 dstune0: move.l _gdfsep,d0 *quit if no elements left426 beq dsexit *...427 * 428 movea.l d0,a1 *a1 = gdsp429 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next430 move.w #52,d2 * d2 = event PRIORITY *4431 movea.l P_SL(a6),a2 *a2 points at gdstb432 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]433 move.w # $CCCC,G_NOTE(a1) *gdsp->note = COLOR434 move.w #3,G_CODE(a1) *gdsp->code = PATTERN435 move.l a1,0(a2,d2.W) *gdstb[priority] = gdsp436 bra dsexit *done437 * 438 .page 439 * 440 *dstrns -- display transposition441 *------ ---------------------442 dstrns: clr.w d0 *get group number443 move.b E_DATA1(a0),d0 *... in d0444 add.w d0,d0 *... as a word offset445 lea _grpstat,a1 *check grpstat[grp]446 tst.w 0(a1,d0.W) *...447 beq dsexit *done if not enabled448 * 449 tst.w P_CF(a6) *center update450 beq dstrns0 *jump if not451 * 452 move.w E_LFT(a0),d1 *get transposition value453 bpl dstrns1 *jump if positive454 * 455 move.b #'-',numstr *note negative sign456 neg.w d1 *make number positive457 bra dstrns2 *...458 * 459 dstrns1: move.b #'+',numstr *note positive sign460 * 461 dstrns2: cmpi.w #1000,d1 *is number GE 1000 ?462 bcs dstrns3 *jump if not463 * 464 subi.w #1000,d1 *adjust number465 cmpi.b #'-',numstr *was number negative466 bne dstrns4 *jump if not467 * 468 move.b #SP_M1,numstr *set -1 in numstr469 bra dstrns3 *...470 * 471 dstrns4: move.b #SP_P1,numstr *set +1 in numstr472 * 473 dstrns3: ext.l d1 *make d1 a long474 divu #100,d1 *convert 1st digit475 addi.w # $0030,d1 *... to ASCII476 move.b d1,numstr+1 *... in numstr477 swap d1 *convert 2nd digit478 ext.l d1 *...479 divu #10,d1 *...480 addi.w # $0030,d1 *... to ASCII481 move.b d1,numstr+2 *... in numstr482 swap d1 *convert 3rd digit483 addi.w # $0030,d1 *... to ASCII484 move.b d1,numstr+3 *... in numstr485 clr.b numstr+4 *terminate numstr486 * 487 .page 488 * 489 move.w d0,d1 *get group number490 asr.w #1,d1 *... in d1491 move.w d1,-(a7) *save group number on stack492 add.w d0,d0 *calculate column493 add.w d0,d1 * ... = 5 *group494 addi.w #5,d1 *... + 5495 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 number503 cmpi.w #8,d0 *see which byte it's in504 bcc dstrns5 *jump if in MS byte505 * 506 bset d0,_vrbw09+1 *set group bit in LS byte507 bra dstrns6 *...508 * 509 dstrns5: sub.w #8,d0 *adjust for byte510 bset d0,_vrbw09 *set group bit in MS byte511 * 512 dstrns6: bset #1,_vrcw *set video reset type bit513 tst.w _ctrsw *update center for scupd ?514 beq dsexit *done if not515 * 516 dstrns0: move.l _gdfsep,d0 *quit if no elements left517 beq dsexit *...518 * 519 movea.l d0,a1 *a1 = gdsp520 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next521 move.w #52,d2 * d2 = event PRIORITY *4522 movea.l P_SL(a6),a2 *a2 points at gdstb523 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]524 move.w # $9999,G_NOTE(a1) *gdsp->note = COLOR525 move.w #4,G_CODE(a1) *gdsp->code = PATTERN526 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp527 bra dsexit *done528 * 529 .page 530 * 531 *dsdyn -- display dynamics532 *----- ----------------533 dsdyn: clr.w d0 *get group number534 move.b E_DATA1(a0),d0 *... in d0535 add.w d0,d0 *... as a word offset536 lea _grpstat,a1 *check grpstat[grp]537 tst.w 0(a1,d0.W) *...538 beq dsexit *done if not enabled539 * 540 tst.w P_CF(a6) *center update ?541 beq dsdyn00 *jump if not542 * 543 clr.w d0 *get dynamics544 move.b E_DATA2(a0),d0 *... in d0545 move.w d0,-(a7) *save dyanmics546 clr.w d1 *get group number547 move.b E_DATA1(a0),d1 *... in d1548 move.w d1,-(a7) *save group number549 move.w (a7),d0 *col = group number550 add.w d0,d0 * ... *5551 add.w d0,d0 *...552 move.w (a7)+,d2 *... (d2 = group number)553 add.w d2,d0 *...554 add.w #6,d0 *... + 6555 move.w (a7)+,d1 *get dynamics556 add.w # $0030,d1 *add '0' for ASCII conversion557 move.w d2,-(a7) *save group number558 move.w #AT11,-(a7) *put attribute on stack559 move.w d1,-(a7) *put digit on stack560 move.w d0,-(a7) *put column on stack561 move.w #4,-(a7) *put row on stack562 move.l _obj8,-(a7) *put object address on stack563 jsr _vputc *update the screen564 add.l #12,a7 *clean up stack565 move.w (a7)+,d0 *get group number566 cmp.w #8,d0 *see which word it's in567 bcc dsdyn1 *jump if in MS word568 * 569 bset d0,_vrbw10+1 *set group bit in LS byte570 bra dsdyn2 *...571 * 572 dsdyn1: sub.w #8,d0 *adjust for for byte573 bset d0,_vrbw10 *set group bit in MS byte574 * 575 dsdyn2: bset #2,_vrcw *set video reset type bit576 tst.w _ctrsw *update center for scupd ?577 beq dsexit *done if not578 * 579 .page 580 dsdyn00: move.l _gdfsep,d0 *quit if no elements left581 beq dsexit *...582 * 583 movea.l d0,a1 *a1 = gdsp584 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next585 move.w #52,d2 * d2 = event PRIORITY *4586 movea.l P_SL(a6),a2 *a2 points at gdstb587 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]588 move.w # $9999,G_NOTE(a1) *gdsp->note = COLOR589 move.w #5,G_CODE(a1) *gdsp->code = PATTERN590 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp591 bra dsexit *done592 * 593 .page 594 * 595 *dslocn -- display location596 *------ ----------------597 dslocn: clr.w d0 *get group number598 move.b E_DATA1(a0),d0 *... in d0599 add.w d0,d0 *... as a word offset600 lea _grpstat,a1 *check grpstat[grp]601 tst.w 0(a1,d0.W) *...602 beq dsexit *done if not enabled603 * 604 tst.w P_CF(a6) *center update ?605 beq dsloc00 *jump if not606 * 607 clr.w d0 *get location608 move.b E_DATA2(a0),d0 *... in d0609 move.w d0,-(a7) *save location610 clr.w d1 *get group number611 move.b E_DATA1(a0),d1 *... in d1612 move.w d1,-(a7) *save group number613 move.w (a7),d0 *col = group number614 add.w d0,d0 * ... *5615 add.w d0,d0 *...616 move.w (a7)+,d2 *... (d2 = group number)617 add.w d2,d0 *...618 add.w #8,d0 *... + 8619 move.w (a7)+,d1 *get location620 add.w # $0031,d1 *add '0' for ASCII conversion621 move.w d2,-(a7) *save group number622 move.w #AT11,-(a7) *put attribute on stack623 move.w d1,-(a7) *put character on stack624 move.w d0,-(a7) *put column on stack625 move.w #4,-(a7) *put row on stack626 move.l _obj8,-(a7) *put object address on stack627 jsr _vputc *update the screen628 add.l #12,a7 *clean up stack629 move.w (a7)+,d0 *get group number630 cmp.w #8,d0 *see which word it's in631 bcc dslocn1 *jump if in MS word632 * 633 bset d0,_vrbw11+1 *set group bit in LS byte634 bra dslocn2 *...635 * 636 dslocn1: sub.w #8,d0 *adjust for for byte637 bset d0,_vrbw11 *set group bit in MS byte638 * 639 dslocn2: bset #3,_vrcw *set video reset type bit640 tst.w _ctrsw *update center for scupd ?641 beq dsexit *done if not642 * 643 .page 644 dsloc00: move.l _gdfsep,d0 *quit if no elements left645 beq dsexit *...646 * 647 movea.l d0,a1 *a1 = gdsp648 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next649 move.w #52,d2 * d2 = event PRIORITY *4650 movea.l P_SL(a6),a2 *a2 points at gdstb651 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]652 move.w # $9999,G_NOTE(a1) *gdsp->note = COLOR653 move.w #5,G_CODE(a1) *gdsp->code = PATTERN654 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp655 bra dsexit *done656 * 657 .page 658 * 659 *dsanrs -- display analog resolution660 *------ -------------------------661 dsanrs: move.b E_DATA1(a0),d1 *get var / group662 move.w d1,d0 *extract group number663 andi.w # $000F,d0 *... in d0664 add.w d0,d0 *... as a word offset665 lea _grpstat,a1 *check grpstat[grp]666 tst.w 0(a1,d0.W) *...667 beq dsexit *done if not enabled668 * 669 tst.w P_CF(a6) *center update ?670 beq dsanrs0 *jump if not671 * 672 move.w _angroup,d2 *see if we display673 bmi dsexit *jump if not674 * 675 subq.w #1,d2 *adust selected group number676 move.w d1,d0 *extract group from event677 andi.w # $000F,d0 *...678 cmp.w d0,d2 *see if we display679 bne dsexit *jump if not680 * 681 lsr.w #4,d1 *extract variable number682 andi.w # $000F,d1 *...683 move.w d1,-(a7) *save variable number684 move.w d1,d0 *calculate display offset685 lsl.w #3,d0 * ... (var *9) + 6686 add.w d0,d1 *... in d1687 addq.w #6,d1 *...688 move.b E_DATA2(a0),d0 *get resolution689 addi.w # $0030,d0 *convert for display690 move.w #AT12,-(a7) *put attribute on stack691 move.w d0,-(a7) *put character on stack692 move.w d1,-(a7) *put column on stack693 move.w #7,-(a7) *put row on stack694 move.l _obj8,-(a7) *put sbase on stack695 jsr _vputc *update the screen696 add.l #12,a7 *clean up stack697 move.w (a7)+,d0 *get variable number698 bset d0,_vrbw13+1 *set variable bit699 bset #5,_vrcw *set video reset type bit700 tst.w _ctrsw *update center for scupd ?701 beq dsexit *done if not702 * 703 .page 704 dsanrs0: move.l _gdfsep,d0 *quit if no elements left705 beq dsexit *...706 * 707 movea.l d0,a1 *a1 = gdsp708 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next709 move.w #52,d2 * d2 = event PRIORITY *4710 movea.l P_SL(a6),a2 *a2 points at gdstb711 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]712 move.w # $9999,G_NOTE(a1) *gdsp->note = COLOR713 move.w #6,G_CODE(a1) *gdsp->code = PATTERN714 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp715 bra dsexit *done716 * 717 .page 718 * 719 *dsanvl -- display analog value720 *------ --------------------721 dsanvl: move.w _angroup,d2 *see if we display722 bmi dsexit *jump if not723 * 724 move.b E_DATA1(a0),d1 *get var / group725 move.w d1,d0 *extract group number726 andi.w # $000F,d0 *... in d0727 add.w d0,d0 *... as a word offset728 lea _grpstat,a1 *check grpstat[grp]729 tst.w 0(a1,d0.W) *...730 beq dsexit *done if not enabled731 * 732 tst.w P_CF(a6) *center update ?733 beq dsanvl0 *jump if not734 * 735 subq.w #1,d2 *adust group number736 move.w d1,d0 *extract group737 andi.w # $000F,d0 *...738 cmp.w d0,d2 *see if we display739 bne dsexit *jump if not740 * 741 lsr.w #4,d1 *extract variable number742 andi.w # $000F,d1 *...743 move.w d1,-(a7) *save variable number744 move.w d1,d0 *calculate display offset745 lsl.w #3,d0 * ... (var *9) + 8746 add.w d0,d1 *... in d1747 addi.w #8,d1 *...748 move.w E_DN(a0),d0 *get value749 asr.w #5,d0 *adjust to low 11 bits750 bpl dsanvl1 *jump if positive751 * 752 move.b #'-',numstr *set sign = '-'753 neg.w d0 *make value positive309 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 322 .page 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 363 .page 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 404 .page 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 438 .page 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 487 .page 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 529 .page 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 579 .page 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 593 .page 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 643 .page 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 657 .page 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 703 .page 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 717 .page 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 754 754 bra dsanvl2 755 * 756 dsanvl1: move.b #'+',numstr *set sign = '+'757 * 758 .page 759 dsanvl2: ext.l d0 *convert MS digit760 divu #1000,d0 *...761 add.w # $0030,d0 *...762 move.b d0,numstr+1 *...763 swap d0 *convert middle digit764 ext.l d0 *...765 divu #100,d0 *...766 add.w # $0030,d0 *...767 move.b d0,numstr+2 *...768 move.b #'.',numstr+3 *insert decimal point769 swap d0 *convert LS digit770 ext.l d0 *...771 divu #10,d0 *...772 add.w # $0030,d0 *...773 move.b d0,numstr+4 *...774 clr.b numstr+5 *terminate string775 move.w #AT12,-(a7) *put attribute on stack776 move.l #numstr,-(a7) *put buffer address on stack777 move.w d1,-(a7) *put column on stack778 move.w #7,-(a7) *put row on stack779 move.l _obj8,-(a7) *put sbase on stack780 jsr _vputs *update the screen781 add.l #14,a7 *clean up stack782 move.w (a7)+,d0 *get variable number783 bset d0,_vrbw14+1 *set variable bit784 bset #6,_vrcw *set video reset type bit785 tst.w _ctrsw *update center for scupd ?786 beq dsexit *done if not787 * 788 dsanvl0: move.l _gdfsep,d0 *quit if no elements left789 beq dsexit *...790 * 791 movea.l d0,a1 *a1 = gdsp792 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next793 move.w #52,d2 * d2 = event PRIORITY *4794 movea.l P_SL(a6),a2 *a2 points at gdstb795 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]796 move.w # $9999,G_NOTE(a1) *gdsp->note = COLOR797 move.w #6,G_CODE(a1) *gdsp->code = PATTERN798 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp799 bra dsexit *done800 * 801 .page 802 * 803 *dsasgn -- display assignment804 *------ ------------------805 dsasgn: tst.w P_CF(a6) *center update ?806 beq dsasgn0 *jump if not807 * 808 move.l a0,-(a7) *stash a0809 jsr _mpcupd *update changed stuff810 movea.l (a7)+,a0 *restore a0811 clr.w d1 *get assignment812 move.b E_DATA1(a0),d1 *... from the event813 ext.l d1 *... as a long in d1814 divu #10,d1 *divide by 10 for conversion815 add.l # $00300030,d1 *add '0' for ASCII conversion816 move.b d1,numstr *put MS byte in work area817 swap d1 *swap register halves818 move.b d1,numstr+1 *put LS byte in work area819 clr.b numstr+2 *terminate string820 move.w #AT04,-(a7) *put attribute on stack821 move.l #numstr,-(a7) *put buffer address on stack822 move.w #11,-(a7) *put column on stack823 move.w #1,-(a7) *put row on stack824 move.l _obj8,-(a7) *put sbase on stack825 jsr _vputs *update the screen826 add.l #14,a7 *clean up stack827 bset #0,_vrcw+1 *set video reset type bit828 tst.w _ctrsw *update center for scupd ?829 beq dsexit *done if not830 * 831 dsasgn0: move.l _gdfsep,d0 *quit if no elements left832 beq dsexit *...833 * 834 movea.l d0,a1 *a1 = gdsp835 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next836 move.w #56,d2 * d2 = event PRIORITY *4837 movea.l P_SL(a6),a2 *a2 points at gdstb838 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]839 move.w # $3333,G_NOTE(a1) *gdsp->note = COLOR840 move.w #3,G_CODE(a1) *gdsp->code = PATTERN841 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp842 bra dsexit *done843 * 844 .page 845 * 846 *dstmpo -- display tempo847 *------ -------------848 dstmpo: tst.w P_CF(a6) *center update ?849 beq dstmpo0 *jump if not850 * 851 clr.w d1 *get tempo852 move.b E_DATA1(a0),d1 *... from event853 ext.l d1 *... as a long in d1854 divu #10,d1 *divide by 10 for conversion855 swap d1 *swap register halves856 add.w # $0030,d1 *add '0' for ASCII conversion857 move.b d1,numstr+2 *put LS byte in work area858 swap d1 *swap register halves859 ext.l d1 *divide again860 divu #10,d1 *...861 add.l # $00300030,d1 *add '0' for ASCII conversion862 move.b d1,numstr *put MS byte in work area863 swap d1 *swap register halves864 move.b d1,numstr+1 *put middle byte in work area865 clr.b numstr+3 *terminate string866 move.w #AT06,-(a7) *put attribute on stack867 move.l #numstr,-(a7) *put buffer address on stack868 move.w #27,-(a7) *put column on stack869 move.w #1,-(a7) *put row on stack870 move.l _obj8,-(a7) *put sbase on stack871 jsr _vputs *display tempo872 add.l #14,a7 *clean up stack873 bset #2,_vrcw+1 *set video reset type bit874 tst.w _ctrsw *update center for scupd ?875 beq dsexit *done if not876 * 877 dstmpo0: move.l _gdfsep,d0 *quit if no elements left878 beq dsexit *...879 * 880 movea.l d0,a1 *a1 = gdsp881 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next882 move.w #56,d2 * d2 = event PRIORITY *4883 movea.l P_SL(a6),a2 *a2 points at gdstb884 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]885 move.w # $3333,G_NOTE(a1) *gdsp->note = COLOR886 move.w #4,G_CODE(a1) *gdsp->code = PATTERN887 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp888 bra dsexit *done889 * 890 .page 891 * 892 *dsstop -- display stop893 *------ ------------894 dsstop: tst.w P_CF(a6) *center update ?895 beq dsstop0 *jump if not896 * 897 jsr _dclkmd *show that clock is stopped898 move.w #AT08,-(a7) *put attribute on stack899 move.w #40,-(a7) *put 1st column on stack900 move.w #1,-(a7) *put row on stack901 move.l _obj8,-(a7) *put sbase on stack902 jsr _vputa *hilite first column903 move.w #41,COL(a7) *put 2nd column on stack904 jsr _vputa *hilite second column905 move.w #42,COL(a7) *put 3rd column on stack906 jsr _vputa *hilite third column907 move.w #43,COL(a7) *put 4th column on stack908 jsr _vputa *hilite fourth column909 add.l #10,a7 *clean up stack910 bset #7,_vrcw *set video reset type bits911 bset #0,_vrbw15 *...912 tst.w _ctrsw *update center for scupd ?913 beq dsexit *done if not914 * 915 dsstop0: move.l _gdfsep,d0 *quit if no elements left916 beq dsexit *...917 * 918 movea.l d0,a1 *a1 = gdsp919 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next920 move.w #56,d2 * d2 = event PRIORITY *4921 movea.l P_SL(a6),a2 *a2 points at gdstb922 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]923 move.w # $3333,G_NOTE(a1) *gdsp->note = COLOR924 move.w #5,G_CODE(a1) *gdsp->code = PATTERN925 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp926 bra dsexit *done927 * 928 .page 929 * 930 *dsnext -- display next931 *------ ------------932 dsnext: tst.w P_CF(a6) *center update ?933 beq dsnext0 *jump if not934 * 935 move.w #AT08,-(a7) *put attribute on stack936 move.w #45,-(a7) *put 1st column on stack937 move.w #1,-(a7) *put row on stack938 move.l _obj8,-(a7) *put sbase on stack939 jsr _vputa *hilite first column940 move.w #46,COL(a7) *put 2nd column on stack941 jsr _vputa *hilite second column942 move.w #47,COL(a7) *put 3rd column on stack943 jsr _vputa *hilite third column944 move.w #48,COL(a7) *put 4th column on stack945 jsr _vputa *hilite fourth column946 add.l #10,a7 *clean up stack947 bset #7,_vrcw *set video reset type bits948 bset #1,_vrbw15 *...949 tst.w _ctrsw *update center for scupd ?950 beq dsexit *done if not951 * 952 dsnext0: move.l _gdfsep,d0 *quit if no elements left953 beq dsexit *...954 * 955 movea.l d0,a1 *a1 = gdsp956 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next957 move.w #56,d2 * d2 = event PRIORITY *4958 movea.l P_SL(a6),a2 *a2 points at gdstb959 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]960 move.w # $3333,G_NOTE(a1) *gdsp->note = COLOR961 move.w #5,G_CODE(a1) *gdsp->code = PATTERN962 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp963 bra dsexit *done964 * 965 .page 966 * 967 *dsgrp -- display group status968 *----- --------------------969 dsgrp: tst.w P_CF(a6) *center update ?970 beq dsgrp0 *jump if not971 * 972 tst.w _ctrsw *update center for scupd ?973 beq dsexit *done if not974 * 975 dsgrp0: move.l _gdfsep,d0 *quit if no elements left976 beq dsexit *...977 * 978 movea.l d0,a1 *a1 = gdsp979 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next980 move.w #60,d2 * d2 = event PRIORITY *4981 movea.l P_SL(a6),a2 *a2 points at gdstb982 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]983 move.w # $9999,G_NOTE(a1) *gdsp->note = COLOR984 move.w #3,G_CODE(a1) *gdsp->code = PATTERN985 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp986 bra dsexit *done987 * 988 .page 989 * 990 *dsinst -- display instrument991 *------ ------------------992 dsinst: clr.w d0 *get group number993 move.b E_DATA1(a0),d0 *... in d0994 add.w d0,d0 *... as a word offset995 lea _grpstat,a1 *check grpstat[grp]996 tst.w 0(a1,d0.W) *...997 beq dsexit *done if not enabled998 * 999 tst.w P_CF(a6) *center update ?1000 beq dsins00 *jump if not1001 * 1002 lea _ins2grp,a1 *point at ins2grp[]1003 clr.w d0 *get instrument number1004 move.b E_DATA2(a0),d0 *... in d01005 move.w d0,-(a7) *save instrument number1006 clr.w d1 *get group number1007 move.b E_DATA1(a0),d1 *... in d11008 move.w d1,-(a7) *save group number1009 move.w (a7),d0 *col = group number1010 add.w d0,d0 * ... *51011 add.w d0,d0 *...1012 move.w (a7)+,d2 *... (d2 = group number)1013 add.w d2,d0 *...1014 add.w #7,d0 *... + 71015 clr.l d1 *get instrument number1016 move.w (a7)+,d1 *... as a long in d11017 divu #10,d1 *divide by 10 for conversion1018 add.l # $00300030,d1 *add '0' for ASCII conversion1019 move.b d1,numstr *put MS byte in work area1020 swap d1 *swap register halves1021 move.b d1,numstr+1 *put LS byte in work area1022 clr.b numstr+2 *terminate string1023 move.w d2,-(a7) *save group number1024 move.w #AT11,-(a7) *put attribute on stack1025 move.l #numstr,-(a7) *put buffer address on stack1026 move.w d0,-(a7) *put column on stack1027 move.w #2,-(a7) *put row on stack1028 move.l _obj8,-(a7) *put object address on stack1029 jsr _vputs *update the screen1030 add.l #14,a7 *clean up stack1031 * 1032 .page 1033 move.w (a7)+,d0 *get group number1034 cmp.w #8,d0 *see which word it's in1035 bcc dsinst1 *jump if in MS word1036 * 1037 bset d0,_vrbw08+1 *set group bit in LS byte1038 bra dsinst2 *...1039 * 1040 dsinst1: sub.w #8,d0 *adjust for for byte1041 bset d0,_vrbw08 *set group bit in MS byte1042 * 1043 dsinst2: bset #0,_vrcw *set video reset type bit1044 tst.w _ctrsw *update center for scupd ?1045 beq dsexit *done if not1046 * 1047 dsins00: move.l _gdfsep,d0 *quit if no elements left1048 beq dsexit *...1049 * 1050 movea.l d0,a1 *a1 = gdsp1051 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next1052 move.w #60,d2 * d2 = event PRIORITY *41053 movea.l P_SL(a6),a2 *a2 points at gdstb1054 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]1055 move.w # $9999,G_NOTE(a1) *gdsp->note = COLOR1056 move.w #3,G_CODE(a1) *gdsp->code = PATTERN1057 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp1058 bra dsexit *done1059 * 1060 .page 1061 * 1062 *dsintp -- display interpolation1063 *------ ---------------------1064 dsintp: tst.w P_CF(a6) *center update ?1065 beq dsintp0 *jump if not1066 * 1067 move.w E_DATA1(a0),-(a7) *get interpolate value1068 jsr _fromfpu *convert to milliseconds1069 tst.w (a7)+ *...1070 andi.l # $0000FFFF,d0 *clear high bits1071 divu #10000,d0 *convert 1st digit1072 addi.w # $0030,d0 *... to ASCII1073 move.b d0,numstr *... in numstr1074 swap d0 *convert 2nd digit1075 ext.l d0 *...1076 divu #1000,d0 *...1077 addi.w # $0030,d0 *... to ASCII1078 move.b d0,numstr+1 *... in numstr1079 move.b #'.',numstr+2 *insert decimal point1080 swap d0 *convert 3rd digit1081 ext.l d0 *...1082 divu #100,d0 *...1083 addi.w # $0030,d0 *... to ASCII1084 move.b d0,numstr+3 *... in numstr1085 clr.b numstr+4 *terminate numstr1086 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 bit1094 tst.w _ctrsw *update center for scupd ?1095 beq dsexit *done if not1096 * 1097 dsintp0: move.l _gdfsep,d0 *quit if no elements left1098 beq dsexit *...1099 * 1100 movea.l d0,a1 *a1 = gdsp1101 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next1102 move.w #60,d2 * d2 = event PRIORITY *41103 movea.l P_SL(a6),a2 *a2 points at gdstb1104 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]1105 move.w # $CCCC,G_NOTE(a1) *gdsp->note = COLOR1106 move.w #4,G_CODE(a1) *gdsp->code = PATTERN1107 move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp1108 bra dsexit *done1109 * 1110 .page 1111 * 1112 *dspnch -- display punch in/out1113 *------ --------------------1114 dspnch: tst.w P_CF(a6) *center update ?1115 beq dspnch0 *jump if not1116 * 1117 tst.w E_DATA1(a0) *punch in ?1118 beq dspnch1 *jump if not1119 * 1120 move.w #AT09,-(a7) *put attribute on stack1121 move.w #50,-(a7) *put 1st col on stack1122 move.w #1,-(a7) *put row on stack1123 move.l _obj8,-(a7) *put object address on stack1124 jsr _vputa *highlight 1st column1125 move.w #51,COL(a7) *put 2nd col on stack1126 jsr _vputa *highlight 2nd col1127 add.l #10,a7 *clean up stack1128 bset #5,_vrcw+1 *set video reset bit1129 bra dspnch2 *go do maker update1130 * 1131 dspnch1: move.w #AT09,-(a7) *put attribute on stack1132 move.w #53,-(a7) *put 1st col on stack1133 move.w #1,-(a7) *put row on stack1134 move.l _obj8,-(a7) *put object address on stack1135 jsr _vputa *highlight 1st column1136 move.w #54,COL(a7) *put 2nd col on stack1137 jsr _vputa *highlight 2nd column1138 move.w #55,COL(a7) *put 3rd col on stack1139 jsr _vputa *highlight 3rd column1140 add.l #10,a7 *clean up stack1141 bset #6,_vrcw+1 *set video reset bit1142 * 1143 dspnch2: jsr _dsgmodz *display updated modes1144 tst.w _ctrsw *update center for scupd ?1145 beq dsexit *done if not1146 * 1147 dspnch0: move.l _gdfsep,d0 *quit if no elements left1148 beq dsexit *...1149 * 1150 movea.l d0,a1 *a1 = gdsp1151 move.l G_NEXT(a1),_gdfsep *gdfsep = gdsp->next1152 move.w #60,d2 * d2 = event PRIORITY *41153 movea.l P_SL(a6),a2 *a2 points at gdstb1154 move.l 0(a2,d2.W),G_NEXT(a1) *gdsp->next = gdstb[pri]1155 move.w # $CCCC,G_NOTE(a1) *gdsp->note = COLOR1156 tst.w E_DATA1(a0) *see which kind we have1157 bne dspnchi *jump if 'punch in'1158 * 1159 move.w #6,G_CODE(a1) *gdsp->code = 'out' PATTERN755 756 dsanvl1: move.b #'+',numstr | set sign = '+' 757 758 .page 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 801 .page 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 ? 829 beq dsexit | done if not 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 844 .page 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 890 .page 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 928 .page 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 965 .page 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 988 .page 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 1032 .page 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 1060 .page 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 1110 .page 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 1160 1160 bra dspnchx 1161 * 1162 dspnchi: move.w #5,G_CODE(a1) *gdsp->code = 'in' PATTERN1163 * 1164 dspnchx: move.l a1,0(a2,d2.W) *gdstb[pri] = gdsp1165 bra dsexit *done1166 * 1167 .page 1168 * 1169 *dsbar -- display a bar marker1170 *----- --------------------1171 dsbar: tst.w P_CF(a6) *center update ?1172 beq dsbar0 *jump if not1173 * 1174 tst.w _ctrsw *update center for scupd ?1175 beq dsexit *done if not1176 * 1177 dsbar0: movea.l P_SL(a6),a2 *a2 points at gdstb1178 move.l #-1,BARFLAG(a2) *set the bar marker flag1179 bra dsexit *done1180 * 1181 .page 1182 * 1183 *==============================================================================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 1167 .page 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 1181 .page 1182 1183 | ============================================================================== 1184 1184 .data 1185 *==============================================================================1186 * 1187 *sddtab -- score display dispatch table -- MUST match score.h definitions1188 *------ ---------------------------- ------------------------------1189 sddtab: dc.l dsexit *0 null1190 dc.l dsexit *1 score begin1191 dc.l dssbgn *2 section begin1192 dc.l dssend *3 section end1193 dc.l dsinst *4 instrument change1194 dc.l dsnbx *5 note begin1195 dc.l dsnex *6 note end1196 dc.l dsstop *7 stop1197 dc.l dsintp *8 interpolate1198 dc.l dstmpo *9 tempo1199 dc.l dstune *10 tuning1200 dc.l dsgrp *11 group status1201 dc.l dslocn *12 location1202 dc.l dsdyn *13 dynamics1203 dc.l dsanvl *14 analog value1204 dc.l dsanrs *15 analog resolution1205 dc.l dsasgn *16 I/O assign1206 dc.l dstrns *17 transposition1207 dc.l dsexit *18 repeat1208 dc.l dspnch *19 punch in/out1209 dc.l dsexit *20 polyphonic pressure1210 dc.l dsexit *21 score end1211 dc.l dsexit *22 channel pressure1212 dc.l dsbar *23 bar marker1213 dc.l dsnext *24 next score1214 * 1215 *==============================================================================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 | ============================================================================== 1216 1216 .bss 1217 *==============================================================================1218 * 1219 *globals:1220 *--------1221 _ac_code: ds.b 1 *accidental code1222 * 1223 *locals:1224 *-------1225 numstr: ds.b 65 *video display update work area1226 * 1227 *------------------------------------------------------------------------------1228 * 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 1229 1229 .end
Note:
See TracChangeset
for help on using the changeset viewer.