************************************************************************* * BSVC-Template fuer Aufgabe 5-4 * * Eigenen Quelltext ab Start eintragen. * * TRAP #15 ruft den simulierten Interupt-Handler fuer das OS auf. * Ueber d0 und a1 werden Parameter an das OS uebergeben. * * d0 = #2 : Liest einen nullterminierten String aus der Eingabe nach a1. * d0 = #14: Schreibe ein nullterminierten String von a1 in die Ausgabe. * d0 = #9 : System anhalten. * * Dieses Template unterstuetzt keine direkten Eingaben. Deshalb bitte das * Label Input nutzen um eine Eingabe zu simulieren. Die Ausgabe erfolgt * ab dem Label Output. * Autor: André Klonz ************************************************************************* org $0 dc.l $1000 * Stackpointer nach RESET dc.l Start * Startadresse nach RESET org $1000 Start nop * Quelltext einfuegen move.l #9,d0 Task9 setzen (System anhalten) trap #15 OS aufrufen * nicht "end Start" verwenden, da das den Uebersetzer hier beenden wuerde ************************************************************************* * Betriebssystem-Aufrufe simulieren: org $0100 Input dc.b 'Insert your text here.',0 org $0200 Output ds.b 200 Vector15 org $00BC dc.l OSSIMULATION org $0400 OSSIMULATION cmp.b #2,d0 Ist Task=2 ? beq Task2 Wenn ja springe zu Task2 cmp.b #14,d0 ist Task=14 ? beq Task14 wenn ja springe zu Task14 jmp EndOS sonst springe zu EndOS Task2 move.l a1,-(SP) Arbeitsregister sichern move.l a0,-(SP) lea Input,a0 a0 auf Input setzen in_loop move.b (a0)+,(a1) Werte von (a0) nach (a1) kopieren cmp.b #0,(a1)+ 0 mit (a1) vergleichen, a1++ bne in_loop wenn ungleich 0 zu in_loop springen move.l (SP)+,a0 Arbeitsregister wieder vom Stack holen move.l (SP)+,a1 rtr Interrupt verlassen Task14 move.l a0,-(SP) Arbeitsregister sichern move.l a1,-(SP) lea Output,a0 A0 auf Output setzen out_loop move.b (a1)+,(a0) (a1) nach (a0) kopieren, a1++ cmp.b #0,(a0)+ 0 mit (a0) vergleichen, a0++ bne out_loop wenn != 0 zu out_loop springen move.l (SP)+,a1 Arbeitsegister wieder vom Stack holen move.l (SP)+,a0 rtr Interrupt verlassen EndOS nop end Start