These are the offsets of important address you can find inside the asr-x's operating system memory. 1) It will be fun to create our own presets for the FX and have them there when you power-on, no? 2) It would be cool to change the LFO shapes, right?!?! 3) It might also be interesting to change the graphics around, eg. replace the * =* ==* ===* with G NG ING KING RKING ORKING WORKING, etc. 4) Also, for humorous effect you can change the data in the strings. change **EMPTY** to -NADA! :(- If you find any more useful info, esp. FX parameter locations, i/o address of peripherals, etc, please mail us. Addr. Information -------------------- 0x00a9a strange routine, called often. It saves the status register in d0. Enables only interrupt #1, goes into supervisor state. reads word from $be00030 if negative, it writes d0 to $be00032. (WHY!) then it adds one to $be00030. and returns. 0x00c8a The code makes three jsr's in a row here. The first one is to print out the power-on message. the other two?? jsr($972a) - disp poweron msg jsr($a9da) - ? jsr($ae92) - ? then more jumps to jsr($16622) jsr($61e56) jsr($6ddc6) jsr($976fa) jsr($157da) jsr($15e1a) jsr($f9cb2) jsr($6de1a) jsr($1c756) 0x0a9da This code just seems to clear a whole bunch of registers...locations: start at $be000B0. 0x0ae92 This code clears some registers in the range $be47e00. 0x0972a This is apparently the code that prints the string ENSONIQ ASR-X to the LCD screen at power-up" it does a bsr (like call subroutine) to 0x96ea, saves some registers. From there, it does jsr's to ($A9A), ($9BEE), and ($AB2). The entry point is 0x0972a, this is called from 0x00c8a. 0x096ea<->0x09779 0x098e1 The string: "ENSONIQ ASR-X ..Resampler w/ Effects" 0x1d753 50us 100us 200 400, etc. 0x1d833 5Hz 10Hz 15 20 30 40, etc. 0x1d883 0.0sec 0.1 0.2 0.3, etc. 0x1da23 0.0ms 0.2 0.4, etc. [tons more strings of numbers] 0x1e0ba -99% -98 -97, etc 0x1e573 Off -49.5dB -49.0, etc. [tons more strings of numbers] 0x1f163 11 Sys 1/1T Sys 1/2 Sys, etc. 0x1f66c Triangle Sine Sawtooth Square Asymm, etc. 0x1f6aa -180deg -178 -176, etc. 0x2066a 'A' 'E' 'I' 'O' etc. AA AE AH AO EH ER IH IY IH UW B D F G J K L M 0x2088a Off FullModAmt Velocidy Vel+Pressure etc. 0x20f52 L----|----R -L---|---R-, etc. 0x2b6e0 Strings dealing with effects!!! (test mode?) 0x2e452 "Scanning seqs" etc. 0x2f8c0 "Pad Xpose=Kit Mapper" etc. 0x30271 "ENSONIQ ASR-X O.S. Version:" 0x32262 "System/MIDI" +rest of Global/System Menu 0x332ea "Edit insert effect" 0x3e1a2 Record Click menu options 0x3e23e Sequence Process menu options 0x41f08 **EMPTY** 0x41a30 Memory Manager Menu options (what is polyphony meter?) 0x47972 Quantize values (tighten, randomize, etc.) 0x4bef0 Sample Edit Functions 0x4bf60 the famous/dreaded * =* ==* ===* ====* =====* 0x4df48 Sampling messages (Sampling in Progress, etc.) 0x4fb90 disk formatting messages 0x57716 save type menu 0x836a0 diagnostic error messages!!! (otto chip?) 0x5c740 bunch of error messages... Possible LFO locatons --------------------- (triangle waveform) 0x5e4a8 a 256 8-bit signed waveform that goes 01 03 05 to 7f, then to 0, then down to 81, then back up to 01 again....all by steps of 02. 0x5e5a8 Another trianglularish waveform. 5/17/99 MIDI FILES ------------------------------------- MTrk It is now clear that much of the X's internals utilize MIDI files. Also, there are five instances of the string MTrk (midi track header) in the ROM There are also six instances of MThd, the midi file header. It is believed some of these are for the demo song "Gizmo Bop." And also, it is believed that at least on of the MTrk instances is a "blank track." The reason this blank track MTrk header is signficant: It may contain the default, annoying MIDI events which reset the controllers at the beginning of each event, and prevent the machine being truly groovy in a way. time: 00000000:controller: (0xb0,0x07,0x7f) Volume (coarse). time: 00000000:controller: (0xb0,0x0a,0x40) Pan position (coarse). time: 00000000:controller: (0xb0,0x01,0x00) Modulation Wheel (coarse). time: 00000000:controller: (0xb0,0x0b,0x7f) Expression (coarse). time: 00000000:controller: (0xb0,0x46,0x00) Sound Variation. time: 00000000:pitch wheel: (0xe0,0x00,0x40). 0x8c4ec instance #1 of MTrk. in an array with other instesting headers: MSet MThd MSng MSeq 0x949e4 instance #2 of MTrk 0x96e04 instance #3 of MTrk. next to Mse, MSng, MSeq, MTrk and MPly again. 0x9f3ba instance #4 of MTrk. alone by itself...the next four numbers 00000000 don't constitute a proper length. seems to be surrounded by code. 0xc81b6 instance #5 of MTrk. This is Track #0 in Gizmo Bop. Note: Gizmo Bop is a type 0, 1 track MIDI file embedded in the ROM image. It's start address is 0xc81a7. It's end address is 0xca9b3. length = 0x280c. MThd 0x8c4d0 Instance #1 of MThd. In array with other chunk headers (MSet Mthd MSng MSeq MTrk) 0x90bfc instance #2 of MThd. Seems to be located in middle of nowhere, surrounded by code 0x949d2 instances #3 of MThd. in array with other chunk headers. (MThd MSeq MSng MTrk) [ note Mset, Mply is not in this group ] 0x96dec instance #4 of MThd. in array with others (MThd MSet MSng MSeq MTrk MPly) 0xa95fa instance #5 of MThd. in short array..MThd MSeq MSng odd, it's located near a text array of fractional values. 0xc81a7 instance #6 of MThd. This is the header for the Gizmo Bop. 0x9e186 apparently an instruction that access 0009f3ba, which is the location of a lone "MTrk" string. Could this be code where a new track is created? If so, could we modify the initialization of the string? the following codes: Not sure what's going on here, but the number 4 is pushed onto the stack, then a pointer to the string "MTrk" is pushed onto the stack. Then another mysterious value is pushed onto the stack and F8352 is called. my guess is either strncmp, strncat, or strncpy, since all of those involve two arguments, with the second one being a string, and the last arg (first on stack) being a number. Also 4 is the length of the string "MTrk." Also, since the subroutine (F8352) is located near the end of memory, it is most likely part of the standard C lib. hopefully soon, we can disassemble that subroutine. Note also, nothing is done (immediately) with the return value from the call, which suggests strncat or strncpy over strncmp. 000186 287C 0BE4 81B4 movea.l #$BE481B4,a4 00018C 2014 move.l (a4),d0 _ 00018E D0B9 0BE4 8068 add.l ($BE48068),d0 _ 000194 2D40 FFBC move.l d0,-68(a6) _ 000198 7004 moveq #4,d0 _ 00019A 2F00 move.l d0,-(a7) _ 00019C 41F9 0009 F3BA lea ($9F3BA),a0 _ 0001A2 2F08 move.l a0,-(a7) _ 0001A4 2F2E FFBC move.l -68(a6),-(a7) _ 0001A8 4EB9 000F 8352 jsr ($F8352) _ perhaps 12 is the offset for track length in the data structure representing a MIDI track? 0001AE 4FEF 000C lea 12(a7),a7 _ 0001B2 2F0D move.l a5,-(a7) _ 0001B4 4EB9 0008 FF32 jsr ($8FF32) _ also intriguing is adding four to a7...could a7 be the addr for the length of the MIDI Track, as it's being written to? 0001BA 588F addq.l #4,a7 _ 0001BC 2640 movea.l d0,a3 _ 0001BE 202D 00D8 move.l 216(a5),d0 _ 0001C2 2040 movea.l d0,a0 _ 0001C4 2E28 000C move.l 12(a0),d7 _ 0001C8 2F0A move.l a2,-(a7) _ 0001CA 2F00 move.l d0,-(a7) _ 0001CC 486E FFBC pea -68(a6) _ 0001D0 2F0D move.l a5,-(a7) _ 0001D2 6100 FB7A bsr -1158 _ Is bsr the end of that routine? who calls it? 0001D6 4FEF 0010 lea 16(a7),a7 _ 0001DA 206E FFC8 movea.l -56(a6),a0 _ 0001DE 4868 0008 pea 8(a0) _ 0001E2 2F2E FFBC move.l -68(a6),-(a7) _ 0001E6 206D 00D8 movea.l 216(a5),a0 _ 0001EA 2F10 move.l (a0),-(a7) _ 0001EC 4EB9 0008 FAD6 jsr ($8FAD6) _ 0001F2 4FEF 000C lea 12(a7),a7 _ 0001F6 202E FFC8 move.l -56(a6),d0 _ 0001FA 9087 sub.l d7,d0 _ 0001FC 2E00 move.l d0,d7 _ 0001FE DF94 add.l d7,(a4) _ 000200 207C 0BE4 82A0 movea.l #$BE482A0,a0 _ 000206 7000 moveq #0,d0 _ 000208 3015 move.w (a5),d0 _ 00020A 49F0 0C00 lea 0(a0,d0.l),a4 _ 00020E DF94 add.l d7,(a4) _ 000210 2B54 005C move.l (a4),92(a5) _ 000214 4EB9 0009 447E jsr ($9447E) _ 00021A 2F0B move.l a3,-(a7) _ 00021C 2F0D move.l a5,-(a7) 00021E 4EB9 0008 FE7E jsr ($8FE7E) _ 000224 508F addq.l #8,a7 _ 000226 4A2A 0022 tst.b 34(a2) String Manipulation Function ---------------------------- 0x0F8352 compares addr's....makes call in some cases to $F83AA. don't know what's there.