Hardware > Hardware (Classic 16-/32-Bit)
Unterschiede zw. TOS 2.06 und TOS 1.62 auf einem 1040STE
Thorsten Otto:
@dbsys : versuch doch bitte mal angehängte gepatchte Version (insbesondere mit EmuTOS, aber ruhig auch mit anderen TOS).
Zur Info: die problematische Stelle wurde so gepatcht, daß sie auch mit EmuTOS gefunden werden sollte. Intern wird dort der komplette ACIA handler ersetzt. Hintergrund ist wohl der, daß MROS Midi-Daten selber auswerten will (hätte man wohl auch über midisys machen können), bei Tastatur-Daten wird dann zur ursprünglichen Stelle im TOS gesprungen. Die gefundene Addresse wird dort mit der Addresse des Tastatur-IOREC Pointers in a0 aufgerufen, das sollte eigentlich auch unter EmuTOS funktionieren.
Es gibt noch drei weitere Stellen, in denen ähnliches gemacht wird. Eine Stelle, die den etv_timer Code ersetzt. Diese ist hier ebenfalls gepatcht, und zwar so daß der interrupt nicht modifiziert wird. Hoffe das funktioniert, wird aber in einer für CT60 gepatchten Version ebenfalls so gemacht.
Dann gibt es noch zwei Stellen, die den USER_BUT und USER_MOT handler vom VDI ersetzen. Diese sollten (da sie ebenfalls in Assembler programmiert sind) auch in EmuTOS gefunden werden, und wurden deshalb so gelassen wie sie sind.
Ansonsten wäre es gut, wenn du mal alles was du an Entwickler-Dokumentation hast, rauskramen könntest. Insbesondere wäre es interessant zu wissen, welche Funktionen über Trap #8 und Trap #10 zur Verfügung gestellt werden.
dbsys:
@Thorsten Otto vielen Dank für das gepatchte MROS. Ich finde es klasse, daß Du mal in den Code geschaut hast!
Wir sollten @cyberish informieren, damit er das gepatchte MROS auf seiner EmuTOS Installation ausprobieren kann, denn ich selbst betreibe (noch) keinen EmuTOS Rechner.
Ich teste aber gerne mal auf einem 1040ST mit TOS 1.04 und einem 1040STE mit TOS 2.06. Am kommenden Wochenende komme ich eventuell schon dazu und berichte dann.
Leider besitze ich keine Entwickler-Dokumentation von Steinberg.
cyberish:
@Thorsten Otto
Klasse, vielen Dank für den Patch. - I.d.F. hat Tango MROS 345 unter EmuTOS 1.3 geladen, MIDI Daten kommen an und gehen weg! Jedoch stürzt das Programm ab, sobald die Maus bewegt wird. - s.h. Bildschirmfotos: Jeweils nach dem Absturz durch das Bewegen der Maus.
dbsys:
--- Zitat von: cyberish am Do 06.02.2025, 11:16:36 ---@Thorsten Otto
Klasse, vielen Dank für den Patch. - I.d.F. hat Tango MROS 345 unter EmuTOS 1.3 geladen, MIDI Daten kommen an und gehen weg! Jedoch stürzt das Programm ab, sobald die Maus bewegt wird. - s.h. Bildschirmfotos: Jeweils nach dem Absturz durch das Bewegen der Maus.
--- Ende Zitat ---
Immerhin startet Tango schon mal....
Thorsten Otto:
Der Absturz dürfte dann wohl in den Routinen liegen die MROS noch patcht. Hab mal die entsprechenden Stellen extrahiert (vlt. hat @czietz eine Idee was da schief geht?)
--- Code: ---install_cur_motv:
[00011aa2] 247a 08bc movea.l linevars(pc),a2
[00011aa6] 45ea ffce lea.l -50(a2),a2 /* lea user_mot(a2),a2 */
[00011aaa] 2052 movea.l (a2),a0 /* get original user_motv */
[00011aac] 23c8 0001 1b02 move.l a0,new_user_mot-4 /* save it */
install_cur_motv_2:
[00011ab2] 0ca8 5842 5241 fff4 cmpi.l #$58425241,-12(a0) /* XBRA chain? */
[00011aba] 6606 bne.s install_cur_motv_1 /* no */
[00011abc] 2068 fffc movea.l -4(a0),a0 /* continue searching */
[00011ac0] 60f0 bra.s install_cur_motv_2
install_cur_motv_1:
[00011ac2] 43fa 006a lea.l old_motv_code(pc),a1
[00011ac6] 47fa 003e lea.l new_user_mot(pc),a3
[00011aca] 41e8 000c lea.l 12(a0),a0 /* skip the lea gstack,a7 in original code */
[00011ace] 323c 007a move.w #123-1,d1
install_any_motv_2:
[00011ad2] 3018 move.w (a0)+,d0 /* get opcode */
[00011ad4] b07c 2e79 cmp.w #$2E79,d0 /* movea.l abs.l opcode at end of routine? */
[00011ad8] 6708 beq.s install_any_motv_1
[00011ada] 32c0 move.w d0,(a1)+ /* copy old code */
[00011adc] 51c9 fff4 dbf d1,install_any_motv_2
[00011ae0] 4e75 rts
install_any_motv_1:
[00011ae2] 22fc 4e71 4e71 move.l #$4E714E71,(a1)+ /* write 3 nops */
[00011ae8] 32fc 4e71 move.w #$4E71,(a1)+
[00011aec] 41e8 0004 lea.l 4(a0),a0 /* skip remaining opcode of orginal routine */
install_any_motv_3:
[00011af0] 32d8 move.w (a0)+,(a1)+ /* copy rest of old code if any */
[00011af2] 51c9 fffc dbf d1,install_any_motv_3
[00011af6] 248b move.l a3,(a2) /* set new vector */
[00011af8] 4e75 rts
dc.l 'XBRA'
dc.l 'MROS'
dc.l 0
new_user_mot:
[00011b06] 4af9 0001 1c2e tas.b $00011C2E
[00011b0c] 661e bne.s new_user_mot_1
[00011b0e] 23df 0001 1c30 move.l (a7)+,$00011C30
[00011b14] 027c f4ff andi.w #$F4FF,sr
[00011b18] 6100 0014 bsr.w old_motv_code
[00011b1c] 007c 0700 ori.w #$0700,sr
[00011b20] 4279 0001 1c2e clr.w $00011C2E
[00011b26] 2f39 0001 1c30 move.l $00011C30,-(a7)
new_user_mot_1:
[00011b2c] 4e75 rts
old_motv_code: ds.w 123
--- Ende Code ---
Der user_mot vector in den linea-variable zeigt ursprünglich auf die far_mchange routine: https://github.com/emutos/emutos/blob/69d289251f119e19031265ea6f9ea41ac394c303/aes/gemdosif.S#L327-L349 (siegt in TOS 2.x praktisch genauso aus). Was der patch macht hat zur Folge daß
- die routine nicht mehr auf einem eigenen Stack ausgeführt wird (der ist aber eh sehr klein, und wenn das in TOS funktioniert, sollte es auch in EmuTOS kein Problem sein)
- Interrupts werden während dieser Zeit zugelassen, und erst hinterher wieder gesperrt. Ich vermute mal daß hier irgendwas schief geht.
Warum das überhaupt gemacht wird, kann ich nur vermuten. Möglicherweise gehen sonst MIDI Daten verloren. Allerdings halt ich das zulassen von Interrupts an dieser Stelle auch für gefährlich (siehe auch https://github.com/emutos/emutos/blob/69d289251f119e19031265ea6f9ea41ac394c303/aes/gemdisp.c#L48, das ist die C-Routine die vom ursprünglichen Code aufgerufen wird). Man könnte aber mal ausprobieren was passiert wenn man diese Routinen auspatcht. Ist in der angehängten Version der Fall.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln