home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0644.ZIP / CCE_0644.PD / FPU_EMU / LFED_4.LST < prev    next >
File List  |  1992-05-19  |  50KB  |  728 lines

  1. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page   1
  2. Source File: D:\PC\FPU_EMU\LFED_4.S
  3.  
  4.    1                                    ;---------------------------------------------------------------------
  5.    2                                    ;Programm-/Routinen-Name:    Line-F Emulation Driver / LFED
  6.    3                                    ;                         Version 1.00
  7.    4                                    ;Datum: 15.02.92
  8.    5  
  9.    6                                    ;Aufgabe/Kurzdoku: Line-F-Emulator für die Benutzung eines MC68881
  10.    7                                    ;in einem Atari ST/STE mit MC68000 (also auch der SFP004-Karte).
  11.    8                                    ;Mit LFED ist die Nutzung der FPU in vollem Umfang gewährleistet und
  12.    9                                    ;kann von jedem Programm angesprochen werden, welches FPU-Unterstützung
  13.   10                                    ;verlangt. MC68030 (TT) optimierte Programme sind hiervon natürlich
  14.   11                                    ;ausgenommen, da der MC68000 dessen InstructionSet nicht versteht!
  15.   12  
  16.   13                                    ;Wird ein MC68882 als FPU genutzt, müssen einige kleinere Anpassungen
  17.   14                                    ;vorgenommen werden, da dieser an verschiedenen Stellen Übertragungen
  18.   15                                    ;des PC's erwartet.
  19.   16  
  20.   17                                    ;Author: Roger Butenuth (c't 04/90 Seite 430 ff.)
  21.   18                                    ;         Michael Hauschild (XBRA-Erweiterungen und alle folgenden
  22.   19                                    ;         Versionen)  
  23.   20  
  24.   21                                    ;    (c)    Smart Systems '92
  25.   22                                    ;        Windhornstraße 2 / 3016 Seelze 1
  26.   23                                    ;        Telefon (05137) 9 20 09
  27.   24  
  28.   25                                    ;Dokumentation: 
  29.   26  
  30.   27                                    ;Der Treiber installiert sich unter Beachtung des XBRA-Protokolls, 
  31.   28                                    ;d.h. er erkennt sein Vorhandensein und gibt eine Meldung aus, falls
  32.   29                                    ;versucht wird, ihn erneut zu installieren.
  33.   30  
  34.   31                                    ;Nicht unterstützte FPU-Befehle:
  35.   32  
  36.   33                                    ;    FTRAP, FSAVE, FRESTORE
  37.   34  
  38.   35                                    ;Erkannte BUGS in Version 1.00:
  39.   36  
  40.   37                                    ;    FMOVE (An),FP0-FPn  ... dieser ist eigentlich kein BUG !
  41.   38  
  42.   39                                    ;    Es tritt ein BUS-Error beim Terminieren von Programmen auf, die
  43.   40                                    ;    die FPU nutzen und für das Terminieren die C-Funktion return() 
  44.   41                                    ;    verwenden. Der Grund hierfür ist ein Restore der FPU-Register
  45.   42                                    ;    mit FMOVEM (diese werden am Programmbegin gesichert). Man kann
  46.   43                                    ;    dieses SAUBER umgehen, indem man aus FPU-nutzenden Funktionen
  47.   44                                    ;    mit exit() zurückkehrt - dann sollte auch kein Bus-Error mehr
  48.   45                                    ;    auftreten (siehe FPU_TST2.C oder auch BGIDEMO.C)
  49.   46  
  50.   47                                    ;ACHTUNG: bei den Assembler-Options muß -S Flag gesetzt werden 
  51.   48                                    ;(wegen ReTurn from Exception / RTE) ! 
  52.   49  
  53.   50                                    ;Letzte Änderung:
  54.   51                                    ;    19.05.92    Freigabe der Version 1.00, da der BUG mit FMOVE und
  55.   52                                    ;                return(0) gefixt ist!
  56.   53  
  57.   54                                    ;---------------------------------------------------------------------
  58.   55                                    ;-------------- macro - definitions ----------------------------------
  59.   56  
  60. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page   2
  61. Source File: D:\PC\FPU_EMU\LFED_4.S
  62.  
  63.   57                                    .MACRO Supexec
  64.   58                                        move.w        #38,-(sp)        ;Supexec()
  65.   59                                        trap        #14                ;XBIOS
  66.   60                                        addq.l        #6,sp            ;Stack aufräumen
  67.   61                                    .ENDM            
  68.   62                                            
  69.   63                                    ;-------------- set FPU-register-addresses ---------------------------
  70.   64                                        
  71.   65                                    response     equ     $fffa40    ;in a6 (Coprozessor-Basisregister)
  72.   66                                    control        equ        $02        ;Alle weiteren Register relativ zu
  73.   67                                    save        equ        $04        ;response
  74.   68                                    restore        equ        $06        
  75.   69                                    command        equ        $0a        ;in a5
  76.   70                                    condition    equ        $0e
  77.   71                                    operand        equ        $10        ;in a4
  78.   72                                    reg_selec    equ        $14
  79.   73                                    ins_add        equ        $18
  80.   74                                    lineF        equ        $2c        ;Line-F / TRAP-No. 11
  81.   75  
  82.   76                                    ;-------------- start of code ----------------------------------------
  83.   77  
  84.   78                                                .TEXT
  85.   79 00000000' 4879 00000000'                       pea.l        Install            ;Installations-Routine
  86.   80                                                Supexec                        ;SVC
  87.   58 00000006' 3F3C 0026               +    move.w        #38,-(sp)        ;Supexec()
  88.   59 0000000A' 4E4E                    +    trap        #14                ;XBIOS
  89.   60 0000000C' 5C8F                    +    addq.l        #6,sp            ;Stack aufräumen
  90.   81 0000000E' B2BC 4C46 4544                       cmp.l        #"LFED",d1        ;ist "LFED" ?
  91.   82 00000014' 6700 0424                            beq            Terminate        ;ja -> dann terminieren
  92.   83                                                
  93.   84 00000018' 4879 00000000`           start:        pea.l        titel            ;Titel-Daten holen
  94.   85 0000001E' 3F3C 0009                            move.w        #9,-(sp)        ;Cconws 
  95.   86 00000022' 4E41                                 trap        #1                ;GEMDOS-Call
  96.   87 00000024' 5C8F                                 addq.l        #6,sp            ;Stack-Korrektur
  97.   88                                        
  98.   89 00000026' 4879 00000000'                       pea            setvec            ;Im Supervisormodus Vektor setzen
  99.   90                                                Supexec                        ;SVC
  100.   58 0000002C' 3F3C 0026               +    move.w        #38,-(sp)        ;Supexec()
  101.   59 00000030' 4E4E                    +    trap        #14                ;XBIOS
  102.   60 00000032' 5C8F                    +    addq.l        #6,sp            ;Stack aufräumen
  103.   91                                                            
  104.   92 00000034' 206F 0004                            movea.l        4(sp),a0        ;Basepageadresse holen
  105.   93 00000038' 223C 0000 0100                       move.l        #$100,d1        ;Basepagelänge
  106.   94 0000003E' D2A8 000C                            add.l        $0c(a0),d1        ;+Textlänge
  107.   95 00000042' D2A8 0014                            add.l        $14(a0),d1        ;+Datenlänge
  108.   96 00000046' D2A8 001C                            add.l        $1c(a0),d1        ;+BSS-Länge
  109.   97 0000004A' 2F01                                 move.l        d1,-(sp)        ;Länge des belegten Speichers
  110.   98 0000004C' 3F3C 0031                            move.w        #$31,-(sp)        ;an GEMDOS melden
  111.   99 00000050' 4E41                                 trap        #1
  112.  100                                                
  113.  101 00000052' 23F8 002C 00000000'      setvec:        move.l        lineF,oldtrap    ;Alten Line-F-Vektor retten
  114.  102 0000005A' 21FC 00000000'002C                   move.l        #newtrap,lineF    ;Neuen Line-F-Vektor setzen
  115.  103 00000062' 4E75                                 rts
  116.  104                                                
  117.  105 00000064' 5842 5241                xb_magic:    .dc.b        "XBRA"            ;XBRA-Struktur vor neuem Trap
  118.  106 00000068' 4C46 4544                xb_id:        .dc.b        "LFED"            ;XBRA-Kennung
  119. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page   3
  120. Source File: D:\PC\FPU_EMU\LFED_4.S
  121.  
  122.  107  
  123.  108 0000006C' 0000 0000                oldtrap:    .dc.l        0                ;Platz für alten Line-F-Vektor
  124.  109  
  125.  110                                    ;-------------- lineF-handler -----------------------------------------
  126.  111  
  127.  112 00000070' 23C1 00000000"           newtrap:    move.l        d1,rd1            ;D1 retten (nur für eigenen Trap)
  128.  113 00000076' 222F 0002                            move.l        2(sp),d1        ;PC nach D1
  129.  114 0000007A' B2BC 00FC 0000                       cmp.l        #$fc0000,d1        ;PC-ROM-Anfang
  130.  115 00000080' 6D 08                                blt.s        my_trap            ;PC<ROM-Anfang -> kam aus dem RAM
  131.  116 00000082' 2079 00000000'                       movea.l        oldtrap,a0        ;Adresse der alten Trap-Routine
  132.  117 00000088' 4ED0                                 jmp            (a0)            ;Alte Routine anspringen
  133.  118  
  134.  119 0000008A' 2239 00000000"           my_trap:    move.l        rd1,d1            ;D1 zurückholen
  135.  120 00000090' 48F9 7FFF 00000000"                  movem.l        d0-a6,dregs        ;Register retten
  136.  121 00000098' 4E68                                 move.l        usp,a0            ;USP retten
  137.  122 0000009A' 23C8 00000000"                       move.l        a0,rusp            ;über Umweg
  138.  123 000000A0' 4DF9 00FF FA40                       lea            response,a6        ;#response nach A6
  139.  124 000000A6' 4BEE 000A                            lea            command(a6),a5    ;#command  nach A5
  140.  125 000000AA' 49EE 0010                            lea            operand(a6),a4    ;#operand  nach A4
  141.  126 000000AE' 47F9 00000000"                       lea            dregs,a3        ;#dregs    nach A3
  142.  127 000000B4' 206F 0002                            movea.l        2(sp),a0        ;PC nach A0
  143.  128 000000B8' 3210                                 move.w        (a0),d1            ;Kommando nach D1
  144.  129 000000BA'                          again:                ;-------- Einsprung für weitere FPU-Befehle
  145.  130 000000BA' C27C 01C0                            and.w        #%0000000111000000,d1    ;Spezialteil ausmaskieren
  146.  131 000000BE' 6600 012C                            bne            spezial            ;Ein Bit gesetzt->Spezialbefehl
  147.  132 000000C2' 3228 0002                            move.w        2(a0),d1        ;zweiten Befehlsteil in D1 merken
  148.  133 000000C6' 3A81                                 move.w        d1,(a5)            ;Befehl in FPU schreiben (A3==#command)
  149.  134 000000C8'                          do_ca:                ;-------- Einsprung für weiter Nachfragen an FPU
  150.  135 000000C8' 3016                                 move.w        (a6),d0            ;Response lesen
  151.  136 000000CA' 0800 000C                            btst        #12,d0            ;erstes Modusbit testen
  152.  137 000000CE' 6600 00C0                            bne            rw_1x            ;==1 -> springen
  153.  138 000000D2' 0800 000B                            btst        #11,d0            ;zweites Modusbit testen
  154.  139 000000D6' 67 3A                                beq.s        rw_00            ;==0 -> springen
  155.  140                                                ;-------- %xxx01, Null-Primitive/Transfer Single CPU-Register
  156.  141 000000D8' 0800 000A                            btst        #10,d0            ;Register übertragen?
  157.  142 000000DC' 66 28                                bne.s        rw_sngl            ;JA -> Transfer Single CPU-Register
  158.  143 000000DE' 0800 000F                            btst        #15,d0            ;CA (Come Again) gesetzt?
  159.  144 000000E2' 66 E4                                bne.s        do_ca            ;JA -> weiter fragen, sonst fertig
  160.  145 000000E4' 5888                                 addq.l        #4,a0            ;A0 um reine Befehlslänge weiter
  161.  146                                                        ;(Alles andere wurde in calc_add erledigt)
  162.  147 000000E6' 3210                                 move.w        (a0),d1            ;erstes Befehlswort holen
  163.  148 000000E8' 3001                                 move.w        d1,d0            ;und nach D0
  164.  149 000000EA' C07C F000                            and.w        #$f000,d0        ;wieder COP-Befehl?
  165.  150 000000EE' 0A40 F000                            eor.w        #$f000,d0
  166.  151 000000F2' 67 C6                                beq.s        again            ;JA -> direkt weiter machen
  167.  152 000000F4' 2F48 0002                            move.l        a0,2(sp)        ;neuen PC eintragen
  168.  153 000000F8' 2079 00000000"                       movea.l        rusp,a0            ;USP wieder restaurieren
  169.  154 000000FE' 4E60                                 move.l        a0,usp            ;wieder über Umweg
  170.  155 00000100' 4CD3 7FFF                            movem.l        (a3),d0-a6        ;Register restaurieren
  171.  156 00000104' 4E73                                 rte                            ;Trap beenden
  172.  157  
  173.  158 00000106' C27C 0070                rw_sngl:    and.w        #%1110000,d1    ;Registernummer ausmaskieren (nur Dn)
  174.  159 0000010A' E449                                 lsr.w        #2,d1            ;D1=Nummer*4
  175.  160 0000010C' 28B3 1000                            move.l        (a3,d1.w),(a4)    ;Register übertragen (a4==#operand,a3==#dregs)
  176.  161 00000110' 60 B6                                bra.s        do_ca            ;danach kommt immer noch etwas
  177.  162                                                
  178. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page   4
  179. Source File: D:\PC\FPU_EMU\LFED_4.S
  180.  
  181.  163 00000112'                          rw_00:        ;-------- %xxx00, Transfer multiple coprocessor registers
  182.  164 00000112' 6100 01DE                            bsr         calc_add        ;Operandenadresse nach A1 holen
  183.  165 00000116' 382E 0014                            move.w        reg_selec(a6),d4    ;Registerliste nach D4 holen
  184.  166 0000011A' 0800 000D                            btst        #13,d0            ;Dr-Bit testen
  185.  167 0000011E' 67 36                                beq.s        w_00            ;==0 -> Daten in FPU schreiben
  186.  168                                                            
  187.  169 00000120' 0800 000C                            btst        #12,d0            ;Predekrementmodus?
  188.  170 00000124' 67 12                                beq.s        r_pred            ;==0 -> ja, springen
  189.  171                                                
  190.  172 00000126' 7007                                 moveq        #7,d0            ;Schleifenzähler für 8 Bits
  191.  173                                                
  192.  174 00000128' E34C                     .l_1:        lsl.w        #1,d4            ;ein Bit ins Carry
  193.  175 0000012A' 64 06                                bcc.s        .l_2             ;nur bei Bit==1 etwas machen
  194.  176 0000012C' 22D4                                 move.l        (a4),(a1)+        ;1 (A4==#operand)
  195.  177 0000012E' 22D4                                 move.l        (a4),(a1)+        ;2
  196.  178 00000130' 22D4                                 move.l        (a4),(a1)+        ;3 Langworte für jedes Register
  197.  179 00000132' 51C8 FFF4                .l_2:        dbra        d0,.l_1            ;für alle 8 Bits
  198.  180  
  199.  181 00000136' 6090                                 bra            do_ca            ;nochmal FPU befragen
  200.  182                                                
  201.  183 00000138' 7007                     r_pred:        moveq        #7,d0            ;Schleifenzähler für 8 Bits
  202.  184  
  203.  185 0000013A' E34C                     .l_1:        lsl.w        #1,d4            ;ein Bit ins Carry
  204.  186 0000013C' 64 0A                                bcc.s        .l_2            ;nur bei Bit==1 etwas machen
  205.  187 0000013E' 22D4                                 move.l        (a4),(a1)+        ;1 (A4==#operand)
  206.  188 00000140' 22D4                                 move.l        (a4),(a1)+        ;2
  207.  189 00000142' 22D4                                 move.l        (a4),(a1)+        ;3 Langworte für jedes Register
  208.  190 00000144' 92FC 0018                            suba.w        #24,a1            ;Dekrement durchführen
  209.  191 00000148' 51C8 FFF0                .l_2:        dbra        d0,.l_1            ;für alle 8 Bits
  210.  192  
  211.  193 0000014C' D2FC 000C                            adda.w        #12,a1            ;A1 wieder auf letztes Register
  212.  194 00000150' 2489                                 move.l        a1,(a2)            ;A1 als Registerinhalt abspeichern
  213.  195  
  214.  196 00000152' 6000 FF74                            bra            do_ca            ;Nochmal FPU fragen
  215.  197                                                
  216.  198 00000156' 3010                     w_00:        move.w        (a0),d0            ;erstes Befehlswort holen
  217.  199 00000158' C038 0038                            and.b        %111000,d0        ;Adressierungsart maskieren
  218.  200 0000015C' B038 0018                            cmp.b        %011000,d0        ;Gleich (An)+ ?
  219.  201 00000160' 67 14                                beq.s        w_post            ;JA -> Postinkrementmodus
  220.  202  
  221.  203 00000162' 7007                                 moveq        #7,d0            ;Schleifenzähler für 8 Bits
  222.  204  
  223.  205 00000164' E34C                     .l_1:        lsl.w        #1,d4            ;ein Bit ins Carry
  224.  206 00000166' 64 06                                bcc.s        .l_2            ;nur bei Bit==1 etwas machen
  225.  207 00000168' 2899                                 move.l        (a1)+,(a4)        ;1 (A4==#operand)
  226.  208 0000016A' 2899                                 move.l        (a1)+,(a4)        ;2
  227.  209 0000016C' 2899                                 move.l        (a1)+,(a4)        ;3 Langworte für jedes Register
  228.  210 0000016E' 51C8 FFF4                .l_2:        dbra        d0,.l_1            ;für alle 8 Bits
  229.  211  
  230.  212 00000172' 6000 FF54                            bra            do_ca            ;Nochmal FPU fragen
  231.  213                                                
  232.  214 00000176' 92FC 000C                w_post:        suba.w        #12,a1            ;Inkrement von calc_add aufheben
  233.  215  
  234.  216 0000017A' 7007                                 moveq        #7,d0            ;Schleifenzähler für 8 Bits
  235.  217  
  236.  218 0000017C' E34C                     .l_1:        lsl.w        #1,d4            ;ein Bit ins Carry
  237. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page   5
  238. Source File: D:\PC\FPU_EMU\LFED_4.S
  239.  
  240.  219 0000017E' 64 06                                bcc.s        .l_2            ;nur bei Bit==1 etwas machen
  241.  220 00000180' 2899                                 move.l        (a1)+,(a4)        ;1 (A4==#operand)
  242.  221 00000182' 2899                                 move.l        (a1)+,(a4)        ;2
  243.  222 00000184' 2899                                 move.l        (a1)+,(a4)        ;3 Langworte für jedes Register
  244.  223 00000186' 51C8 FFF4                .l_2:        dbra        d0,.l_1            ;für alle 8 Bits
  245.  224 0000018A' 2489                                 move.l        a1,(a2)            ;A1 als Registerinhalt abspeichern
  246.  225                                                
  247.  226 0000018C' 6000 FF3A                            bra            do_ca            ;Nochmal FPU fragen
  248.  227                                                
  249.  228 00000190' 0800 000B                rw_1x:        btst        #11,d0            ;zweites Modusbit testen
  250.  229 00000194' 66 52                                bne.s        rw_11            ;==1 -> springen (Trap, Error)
  251.  230 00000196' 0800 000D                            btst        #13,d0            ;DR-Bit testen
  252.  231 0000019A' 67 26                                beq.s        w_10            ;==0 -> Daten an FPU schreiben
  253.  232                                                ;--------  %xx110, evaluate effective address and transfer data
  254.  233 0000019C' 6100 0154                            bsr            calc_add        ;Operandenadresse berechnen
  255.  234                                                                            ;A1=Operandenadresse, d1.l=Operandenlänge
  256.  235 000001A0' B27C 0002                            cmp.w        #2,d1            ;Länge-2
  257.  236 000001A4' 6F 0A                                ble.s        r_bw            ;<=2 -> Wort- oder Byteoperand
  258.  237                                                
  259.  238 000001A6' 22D4                     r_11:        move.l        (a4),(a1)+        ;ein Langwort lesen (a4==#operand)
  260.  239 000001A8' 5981                                 subq.l        #4,d1            ;und runterzählen
  261.  240 000001AA' 6E FA                                bgt.s        r_11            ;>0 -> weiter übertragen
  262.  241 000001AC' 6000 FF1A                            bra            do_ca            ;Nochmal FPU befragen
  263.  242                                                
  264.  243 000001B0' 0801 0000                r_bw:        btst        #0,d1            ;Byte?
  265.  244 000001B4' 66 06                                bne.s        r_byte            ;JA!
  266.  245 000001B6' 3294                                 move.w        (a4),(a1)        ;Word-Operand lesen (A4==#operand)
  267.  246 000001B8' 6000 FF0E                            bra            do_ca            ;Nochmal FPU befragen
  268.  247                                                
  269.  248 000001BC' 1294                     r_byte:        move.b        (a4),(a1)        ;Byteoperand lesen (A4==#operand)
  270.  249 000001BE' 6000 FF08                            bra            do_ca            ;Nochmal FPU befragen
  271.  250                                                
  272.  251 000001C2'                          w_10:        ;--------  %xx010, evaluate effective address and transfer data
  273.  252 000001C2' 6100 012E                            bsr            calc_add        ;Operandenadresse berechnen
  274.  253                                                                            ;A1=Operandenadresse, d1.l=Operandenlänge
  275.  254 000001C6' B27C 0002                            cmp.w        #2,d1            ;Länge-2
  276.  255 000001CA' 6F 0A                                ble.s        w_bw            ;<=2 -> Wort- oder Byteoperan
  277.  256                                                
  278.  257 000001CC' 2899                     w_11:        move.l        (a1)+,(a4)        ;Langwort schreiben (a4==#operand)
  279.  258 000001CE' 5981                                 subq.l        #4,d1            ;und runterzählen
  280.  259 000001D0' 6E FA                                bgt.s        w_11            ;>0 -> weiter übertragen
  281.  260 000001D2' 6000 FEF4                            bra            do_ca            ;Nochmal FPU befragen
  282.  261                                                
  283.  262 000001D6' 0801 0000                w_bw:        btst        #0,d1            ;Byte?
  284.  263 000001DA' 66 06                                bne.s        w_byte            ;JA!
  285.  264 000001DC' 3891                                 move.w        (a1),(a4)        ;Word schreiben (A4==#operand)
  286.  265 000001DE' 6000 FEE8                            bra            do_ca            ;Nochmal FPU befragen
  287.  266                                                
  288.  267 000001E2' 1891                     w_byte:        move.b        (a1),(a4)        ;Byte schreiben (A4==#operand)
  289.  268 000001E4' 6000 FEE2                            bra            do_ca            ;Nochmal FPU befragen
  290.  269                                                
  291.  270 000001E8'                          rw_11:        ;-------- %xxx11, take pre-instruction exception
  292.  271 000001E8' 6000 00F8                            bra         cop_error        ;Error-Handler anspringen
  293.  272                                                ;(hier sollte man eine genauere Fehleranalyse machen)!
  294.  273                                                
  295.  274 000001EC'                          spezial:                ;Sprungbefehle etc.
  296. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page   6
  297. Source File: D:\PC\FPU_EMU\LFED_4.S
  298.  
  299.  275 000001EC' B27C 0040                            cmp.w        #%001000000,d1    ;FScc, FDBcc oder FTRAPcc
  300.  276 000001F0' 67 14                                beq.s        s_trap
  301.  277 000001F2' B27C 0080                            cmp.w        #%010000000,d1    ;Branch mit 16Bit-Offset
  302.  278 000001F6' 6700 0096                            beq            s_br16
  303.  279 000001FA' 0A41 00C0                            eor.w        #%011000000,d1    ;Branch mit 32Bit-Offset
  304.  280 000001FE' 6700 00B8                            beq            s_br32
  305.  281 00000202' 6000 00DE                            bra            cop_error        ;FSAVE/FRESTORE nicht unterstützt
  306.  282                                                
  307.  283 00000206' 3010                     s_trap:        move.w        (a0),d0            ;erstes Befehlswort nach D0
  308.  284 00000208' 3200                                 move.w        d0,d1            ;und nach D1 retten
  309.  285 0000020A' C07C 0038                            and.w        #%111000,d0        ;wichtige Bits ausmaskieren
  310.  286 0000020E' B07C 0008                            cmp.w        #%001000,d0        ;FDBcc?
  311.  287 00000212' 67 34                                beq.s        s_fdbcc            ;JA -> springen
  312.  288 00000214' B07C 0038                            cmp.w        #%111000,d0        ;FTRAP?
  313.  289 00000218' 6700 00C8                            beq            cop_error        ;JA -> Fehler (s.o.)
  314.  290                                                                            ;sonst FScc
  315.  291 0000021C' 3D68 0002 000E                       move.w        2(a0),condition(a6)    ;Bedingung an FPU schicken
  316.  292 00000222' 7001                                 moveq        #1,d0            ;Operandenlänge=1 (für calc_add)
  317.  293 00000224' 6100 00CC                            bsr            calc_add        ;Operandenlänge berechnen
  318.  294                                                
  319.  295 00000228' 3016                     .l_1:        move.w        (a6),d0            ;Response lesen
  320.  296 0000022A' 0800 0008                            btst        #8,d0            ;IA-Bit testen
  321.  297 0000022E' 67 0E                                beq.s        .l_2            ;==0 -> fertig
  322.  298 00000230' C07C 1800                            and.w        #%1100000000000,d0    ;Bit 11 und 12 ausmaskieren
  323.  299 00000234' 0A40 1800                            eor.w        #%1100000000000,d0    ;Beide gesetzt?
  324.  300 00000238' 66 EE                                bne.s        .l_1            ;nicht Beide ==1 -> warten
  325.  301 0000023A' 6000 00A6                            bra            cop_error        ;sonst Exception aufgetreten
  326.  302                                                
  327.  303 0000023E' 0800 0000                .l_2:        btst        #0,d0            ;Antwortbit testen
  328.  304 00000242' 56D1                                 sne            (a1)            ;je nach Bit setzen/löschen
  329.  305 00000244' 6000 FE82                            bra            do_ca            ;nochmal FPU befragen
  330.  306                                                
  331.  307 00000248' 3D68 0002 000E           s_fdbcc:    move.w        2(a0),condition(a6)    ;Bedingung an FPU schicken
  332.  308 0000024E' C27C 0007                            and.w        #%111,d1        ;Registernummer maskieren (D1=(A0))
  333.  309 00000252' E549                                 lsl.w        #2,d1            ;D1=Nummer*4
  334.  310 00000254' 43F3 1000                            lea            (a3,d1.w),a1    ;A1 enthält Adresse des Datenregisters
  335.  311 00000258' 2211                                 move.l        (a1),d1            ;Dn holen
  336.  312 0000025A' 5341                                 subq.w        #1,d1            ;Dn=Dn-1
  337.  313 0000025C' 2281                                 move.l        d1,(a1)            ;Dn zurückschreiben
  338.  314 0000025E' 2448                                 movea.l        a0,a2            ;alten PC nach A2 holen
  339.  315 00000260' 5488                                 addq.l        #2,a0            ;PC 2 weiter (für "nicht springen")
  340.  316                                                            
  341.  317 00000262' 3016                     .l_1:        move.w        (a6),d0            ;Response lesen
  342.  318 00000264' 0800 0008                            btst        #8,d0            ;IA-Bit testen
  343.  319 00000268' 67 0C                                beq.s        .l_2            ;==0 -> fertig
  344.  320 0000026A' C07C 1800                            and.w        #%1100000000000,d0    ;Bit 11 und 12 ausmaskieren
  345.  321 0000026E' 0A40 1800                            eor.w        #%1100000000000,d0    ;Beide gesetzt?
  346.  322 00000272' 66 EE                                bne.s        .l_1            ;nicht Beide ==1 -> warten
  347.  323 00000274' 606C                                 bra            cop_error        ;sonst Exception aufgetreten
  348.  324                                                
  349.  325 00000276' 0800 0000                .l_2:        btst        #0,d0            ;Antwortbit testen
  350.  326 0000027A' 6600 FE4C                            bne            do_ca            ;TRUE -> das war's schon
  351.  327 0000027E' D4EA 0004                            adda.w        4(a2),a2        ;16Bit Sprungdist. add. (A2=PC)
  352.  328 00000282' 5241                                 addq.w        #1,d1            ;Dn==1 ?
  353.  329 00000284' 6700 FE42                            beq            do_ca            ;JA -> kein Sprung (Schleifenende)
  354.  330 00000288' 204A                                 movea.l        a2,a0            ;sonst "Sprung" (neuen PC laden)
  355. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page   7
  356. Source File: D:\PC\FPU_EMU\LFED_4.S
  357.  
  358.  331 0000028A' 6000 FE3C                            bra            do_ca            ;nochmal FPU befragen
  359.  332                                                
  360.  333 0000028E' 3D50 000E                s_br16:        move.w        (a0),condition(a6)    ;Bedingung an FPU schicken
  361.  334  
  362.  335 00000292' 3016                     .l_1:        move.w        (a6),d0            ;Response lesen
  363.  336 00000294' 0800 0008                            btst        #8,d0            ;IA-Bit testen
  364.  337 00000298' 67 0C                                beq.s        .l_2            ;==0 -> fertig
  365.  338 0000029A' C07C 1800                            and.w        #%1100000000000,d0    ;Bit 11 und 12 ausmaskieren
  366.  339 0000029E' 0A40 1800                            eor.w        #%1100000000000,d0    ;Beide gesetzt?
  367.  340 000002A2' 66 EE                                bne.s        .l_1            ;nicht Beide ==1 -> warten
  368.  341 000002A4' 603C                                 bra            cop_error        ;sonst Exception aufgetreten
  369.  342                                                
  370.  343 000002A6' 0800 0000                .l_2:        btst        #0,d0            ;Antwortbit testen
  371.  344 000002AA' 6700 FE1C                            beq            do_ca            ;FALSE -> das war's schon
  372.  345 000002AE' D0E8 0002                            adda.w        2(a0),a0        ;16Bit Sprungdistanz addieren
  373.  346 000002B2' 5588                                 subq.l        #2,a0            ;ein Wort zurück (weil später
  374.  347                                                ;noch addiert wird und nur 2 addiert werden müßte)
  375.  348 000002B4' 6000 FE12                            bra            do_ca            ;nochmal FPU befragen
  376.  349                                                
  377.  350 000002B8' 3D50 000E                s_br32:        move.w        (a0),condition(a6)    ;Bedingung an FPU schicken
  378.  351  
  379.  352 000002BC' 3016                     .l_1:        move.w        (a6),d0            ;Response lesen
  380.  353 000002BE' 0800 0008                            btst        #8,d0            ;IA-Bit testen
  381.  354 000002C2' 67 0E                                beq.s        .l_2            ;==0 -> fertig
  382.  355 000002C4' C07C 1800                            and.w        #%1100000000000,d0    ;Bit 11 und 12 ausmaskieren
  383.  356 000002C8' 0A40 1800                            eor.w        #%1100000000000,d0    ;Beide gesetzt?
  384.  357 000002CC' 66 EE                                bne.s        .l_1            ;nicht Beide ==1 -> warten
  385.  358 000002CE' 6012                                 bra            cop_error        ;sonst Exception aufgetreten
  386.  359 000002D0' 5488                                 addq.l        #2,a0            ;Befehl ist 3 Worte lang
  387.  360                                                                            ;(nun: (A0)=Distanz)            
  388.  361 000002D2' 0800 0000                .l_2:        btst        #0,d0            ;Antwortbit testen
  389.  362 000002D6' 6700 FDF0                            beq            do_ca            ;TRUE -> das war's schon
  390.  363 000002DA' D1D0                                 adda.l        (a0),a0            ;32Bit Sprungdistanz addieren
  391.  364 000002DC' 5988                                 subq.l        #4,a0            ;ein Wort zurück (weil später
  392.  365                                                ;noch addiert wird und nur 2 addiert werden müßte)
  393.  366 000002DE' 6000 FDE8                            bra            do_ca            ;nochmal FPU befragen
  394.  367                                                
  395.  368 000002E2'                          cop_error:        ;Error_Handler für einen TRAP der FPU (sehr einfach gehalten).
  396.  369                                                    ;Es wird ein Reset der FPU durchgeführt und das aktuelle
  397.  370                                                    ;Programm terminiert. Return-Code = 881.
  398.  371 000002E2' 3D7C 0000 0002                       move.w        #0,control(a6)    ;FPU-Reset (kein clr.w verwenden!)
  399.  372 000002E8' 3F3C 0371                            move.w        #881,-(sp)        ;Return-Code
  400.  373 000002EC' 3F3C 004C                            move.w        #$4c,-(sp)        ;Funktion Pterm(881)
  401.  374 000002F0' 4E41                                 trap        #1                ;des GEMDOS aufrufen
  402.  375                                                
  403.  376 000002F2'                          calc_add:
  404.  377                                        ;Operandenadresse berechnen. A0 muß die Adresse des Line-F-Befehls 
  405.  378                                        ;enthalten, D0 im unteren Byte die Operandenlänge. Die zu berechnende
  406.  379                                        ;Adresse wird in A1 abgelegt. A0 wird um die Länge der zusätzlichen
  407.  380                                        ;Daten erhöht. Zusätzlichen wird in D1 die Länge des Operanden zurück-
  408.  381                                        ;gegeben (in Bytes, als Langwort). D2, D3, A2 werden zerstört. Bei den
  409.  382                                        ;Adressierungsarten -(An), (An)+ steht in A2 ein Zeiger auf die Stelle,
  410.  383                                        ;in der der Inhalt des Adressregisters An steht (wird für FMOVEM 
  411.  384                                        ;gebraucht).
  412.  385                                        
  413.  386 000002F2' 4281                                 clr.l        d1                ;Länge als Langwort löschen
  414. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page   8
  415. Source File: D:\PC\FPU_EMU\LFED_4.S
  416.  
  417.  387 000002F4' 1200                                 move.b        d0,d1            ;und Byte einkopieren
  418.  388 000002F6' 3410                                 move.w        (a0),d2            ;Erstes Befehlswort nach D2
  419.  389 000002F8' 3602                                 move.w        d2,d3            ;und nach D3 retten
  420.  390 000002FA' C67C 0038                            and.w        #%111000,d3        ;Adressierungsart ausmaskieren
  421.  391 000002FE' E24B                                 lsr.w        #1,d3            ;D3=Adressierungsart*4 (Langworte!)
  422.  392 00000300' 43F9 00000000`                       lea            cs_tab,a1        ;Sprungtabellenadresse nach A1
  423.  393 00000306' 2271 3000                            move.l        (a1,d3.w),a1    ;Adresse der Routine nach A1
  424.  394 0000030A' 4ED1                                 jmp            (a1)            ;und Routine anspringen
  425.  395                                                
  426.  396 0000030C'                          c_drd:        ;%000    Data Register Direct:        Dn
  427.  397 0000030C'                          c_ard:        ;%001    Address Register Direct:    An
  428.  398 0000030C' 43D3                                 lea            (a3),a1            ;A1 auf Registerfeld
  429.  399 0000030E' C47C 000F                            and.w        #%1111,d2        ;Registernummer ausmaskieren
  430.  400                                                ;(und ein Bit vom Modus, 0 für Daten-, 1 für Adressregister)
  431.  401 00000312' E54A                                 lsl.w        #2,d2            ;D2="Registernummer"*4 (+Modusbit!)
  432.  402 00000314' 5842                                 addq.w        #4,d2            ;+4 (für Operandenlänge)
  433.  403 00000316' 9441                                 sub.w        d1,d2            ;wahre Länge abziehen
  434.  404 00000318' D2C2                                 adda.w        d2,a1            ;Offset auf Registerfeldanfang add.
  435.  405 0000031A' 4E75                                 rts
  436.  406                                                
  437.  407 0000031C'                          c_ari:        ;%010    Address Register Indirect:    (An)
  438.  408 0000031C' C47C 0007                            and.w        #%111,d2        ;Registernummer ausmaskieren
  439.  409 00000320' E54A                                 lsl.w        #2,d2            ;D2="Registernummer"*4 
  440.  410 00000322' 2273 2020                            move.l        32(a3,d2.w),a1    ;Adresse nach A1
  441.  411 00000326' 4E75                                 rts
  442.  412                                                
  443.  413 00000328'                          c_arpo:        ;%011    ARI with Postincrement:        (An)+
  444.  414 00000328' C47C 0007                            and.w        #%111,d2        ;Registernummer ausmaskieren
  445.  415 0000032C' E54A                                 lsl.w        #2,d2            ;D2="Registernummer"*4 
  446.  416 0000032E' 45F3 2020                            lea         32(a3,d2.w),a2    ;Adresse Adressregister nach A2
  447.  417 00000332' 2252                                 movea.l        (a2),a1            ;Adresse (Inhalt A.-Reg.) nach A1
  448.  418 00000334' 0801 0000                            btst        #0,d1            ;D1 ungerade? (Byteoperand)
  449.  419 00000338' 66 04                                bne.s        .l_2            ;JA -> Spezialbehandlung
  450.  420                                                
  451.  421 0000033A' D392                     .l_1:        add.l        d1,(a2)            ;Inkrement durchführen
  452.  422 0000033C' 4E75                                 rts
  453.  423                                                
  454.  424 0000033E' B47C 001C                .l_2:        cmp.w        #4*7,d2            ;ist A7 gemeint?
  455.  425 00000342' 66 F6                                bne.s        .l_1            ;NEIN -> normal vorgehen
  456.  426 00000344' 5492                                 addq.l        #2,(a2)            ;sonst (bei Byte) 2 addieren,
  457.  427 00000346' 4E75                                 rts                            ;damit Stack gerade bleibt!
  458.  428                                                
  459.  429 00000348'                          c_arpr:        ;%100    ARI with Predecrement:        -(An)
  460.  430 00000348' C47C 0007                            and.w        #%111,d2        ;Registernummer ausmaskieren
  461.  431 0000034C' E54A                                 lsl.w        #2,d2            ;D2="Registernummer"*4 
  462.  432 0000034E' 45F3 2020                            lea         32(a3,d2.w),a2    ;Adresse Adressregister nach A2
  463.  433 00000352' 0801 0000                            btst        #0,d1            ;D1 ungerade? (Byteoperand)
  464.  434 00000356' 66 06                                bne.s        .l_2            ;JA -> Spezialbehandlung
  465.  435                                                
  466.  436 00000358' 9392                     .l_1:        sub.l        d1,(a2)            ;Inkrement durchführen
  467.  437 0000035A' 2252                                 movea.l        (a2),a1            ;Adresse (Inhalt des A.-Reg.) nach A1
  468.  438 0000035C' 4E75                                 rts
  469.  439                                                
  470.  440 0000035E' B47C 001C                .l_2:        cmp.w        #4*7,d2            ;ist A7 gemeint?
  471.  441 00000362' 66 F4                                bne.s        .l_1            ;NEIN -> normal vorgehen
  472.  442 00000364' 5592                                 subq.l        #2,(a2)            ;sonst (bei Byte) 2 subtrahieren,
  473. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page   9
  474. Source File: D:\PC\FPU_EMU\LFED_4.S
  475.  
  476.  443                                                                               ;damit Stack gerade bleibt!
  477.  444 00000366' 2252                                 movea.l        (a2),a1            ;Adresse (Inhalt A.-Reg.) nach A1
  478.  445 00000368' 4E75                                 rts
  479.  446                                                
  480.  447 0000036A'                          c_ar16:        ;%101    ARI with Displacement:        d16(An)
  481.  448 0000036A' C47C 0007                            and.w        #%111,d2        ;Registernummer ausmaskieren
  482.  449 0000036E' E54A                                 lsl.w        #2,d2            ;D2="Registernummer"*4 
  483.  450 00000370' 2273 2020                            movea.l        32(a3,d2.w),a1    ;Adresse nach A1
  484.  451 00000374' 3428 0004                            move.w        4(a0),d2        ;3. Befehlswort nach D2 (Offset)
  485.  452 00000378' D2C2                                 adda.w        d2,a1            ;Offset auf Adresse addieren
  486.  453 0000037A' 5488                                 addq.l        #2,a0            ;A0 ein Wort (d16) weiter
  487.  454 0000037C' 4E75                                 rts
  488.  455                                                
  489.  456 0000037E'                          c_ar08:        ;%110    ARI with Index:                d8(An,Xn)
  490.  457 0000037E' C47C 0007                            and.w        #%111,d2        ;Registernummer ausmaskieren
  491.  458 00000382' E54A                                 lsl.w        #2,d2            ;D2="Registernummer"*4 
  492.  459 00000384' 2273 2020                            movea.l        32(a3,d2.w),a1    ;Adresse nach A1
  493.  460 00000388' 3428 0004                            move.w        4(a0),d2        ;3. Befehlswort nach D2 (Offset)
  494.  461 0000038C' 3602                                 move.w        d2,d3            ;und nach D3
  495.  462 0000038E' C67C 00FF                            and.w        #$ff,d3            ;Byte ausmaskieren (Byte-Offset)
  496.  463 00000392' D2C3                                 adda.w        d3,a1            ;Offset auf Adresse addieren
  497.  464 00000394' 0802 000B                            btst        #11,d2            ;1=long, 0=word
  498.  465 00000398' 66 10                                bne.s        c_ar81
  499.  466 0000039A' C47C F000                            and.w        #%1111000000000000,d2    ;Nummer von Dn und Modusbit
  500.  467 0000039E' EA4A                                 lsr.w        #5,d2                    ;maskieren
  501.  468 000003A0' EA4A                                 lsr.w        #5,d2            ;D2=Registernummer*4 (+Modusbit)
  502.  469 000003A2' D2F3 2002                            adda.w        2(a3,d2.w),a1    ;16Bit-Index auf A1 addieren
  503.  470 000003A6' 5488                                 addq.l        #2,a0            ;A0 ein Wort (Kram & d8) weiter
  504.  471 000003A8' 4E75                                 rts
  505.  472                                                
  506.  473 000003AA' C47C F000                c_ar81:        and.w        #%1111000000000000,d2    ;Nummer von Dn und Modusbit
  507.  474 000003AE' EA4A                                 lsr.w        #5,d2                    ;maskieren
  508.  475 000003B0' EA4A                                 lsr.w        #5,d2            ;D2=Registernummer*4 (+Modusbit)
  509.  476 000003B2' D3F3 2000                            adda.l        (a3,d2.w),a1    ;32Bit-Index auf A1 addieren
  510.  477 000003B6' 5488                                 addq.l        #2,a0            ;A0 ein Wort (Kram & d8) weiter
  511.  478 000003B8' 4E75                                 rts
  512.  479                                                
  513.  480 000003BA'                          c_pc:        ;%111    absolut short/long, PC-Relativ (ohne/mit Index)
  514.  481                                                ;oder direkt
  515.  482 000003BA' 0802 0002                            btst        #2,d2            ;Immidiate?
  516.  483 000003BE' 66 20                                bne.s        immi            ;!=0 -> JA
  517.  484 000003C0' 0802 0001                            btst        #1,d2            ;PC-Relativ?
  518.  485 000003C4' 66 22                                bne.s        pc_rel            ;!=0 -> JA
  519.  486 000003C6' 0802 0000                            btst        #0,d2            ;Long?
  520.  487 000003CA' 66 0C                                bne.s        c_long            ;!=0 -> JA
  521.  488                                                                            ;sonst Short
  522.  489 000003CC' 3428 0004                            move.w        4(a0),d2        ;Wortadresse holen,
  523.  490 000003D0' 48C2                                 ext.l        d2                ;Auf Langwort erweitern
  524.  491 000003D2' 2242                                 movea.l        d2,a1            ;und als Operandenadresse merken
  525.  492 000003D4' 5488                                 addq.l        #2,a0            ;A0 ein Wort (Short-Addr.) weiter
  526.  493 000003D6' 4E75                                 rts
  527.  494  
  528.  495 000003D8' 2268 0004                c_long:        movea.l        4(a0),a1        ;Langwortadresse holen
  529.  496 000003DC' 5888                                 addq.l        #4,a0            ;A0 zwei Worte (Long-Addr.) weiter
  530.  497 000003DE' 4E75                                 rts
  531.  498                                                
  532. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page  10
  533. Source File: D:\PC\FPU_EMU\LFED_4.S
  534.  
  535.  499 000003E0' 2248                     immi:        movea.l        a0,a1           ;Langwortadresse holen
  536.  500 000003E2' 5889                                 addq.l        #4,a1            ;Beide Befehlsworte überspringen
  537.  501 000003E4' D1C1                                 adda.l        d1,a0            ;A0 über Operand hinwegsetzen
  538.  502 000003E6' 4E75                                 rts
  539.  503                                                
  540.  504 000003E8' 0802 0000                pc_rel:        btst        #0,d2            ;mit Index?
  541.  505 000003EC' 66 0C                                bne.s        pc_idx            ;!=0 -> JA
  542.  506 000003EE' 2248                                 movea.l        a0,a1            ;PC nach A1
  543.  507 000003F0' D2E8 0004                            adda.w        4(a0),a1        ;Offset addieren
  544.  508 000003F4' 5889                                 addq.l        #4,a1            ;+4 für Länge des FPU-Befehls
  545.  509 000003F6' 5488                                 addq.l        #2,a0            ;A0 zwei (16Bit-Offset) weiter
  546.  510 000003F8' 4E75                                 rts
  547.  511                                                
  548.  512 000003FA' 2248                     pc_idx:        move.l        a0,a1            ;PC nach A1
  549.  513 000003FC' 4242                                 clr.w        d2                ;oberes Byte löschen
  550.  514 000003FE' 1428 0005                            move.b        5(a0),d2        ;Offset nach D2
  551.  515 00000402' D2C2                                 adda.w        d2,a1            ;und addieren
  552.  516 00000404' 5889                                 addq.l        #4,a1            ;+4 für Länge des FPU-Befehls
  553.  517 00000406' 1428 0004                            move.b        4(a0),d2            ;D2=Registernummer*16 und Modusbit
  554.  518                                                                            ;(high-byte ist noch 0)
  555.  519 0000040A' 0802 0003                            btst        #3,d2            ;Long-Bit testen
  556.  520 0000040E' 66 0E                                bne.s        pc_i_l            ;!=0 -> Long-Index
  557.  521 00000410' C47C 01F0                            and.w        #%111110000,d2    ;Restinformation ausblenden
  558.  522 00000414' E44A                                 lsr.w        #2,d2            ;D2=Registernummer*4 und Modusbit
  559.  523 00000416' D2F3 2002                            adda.w        2(a3,d2.w),a1    ;Word-Index addieren
  560.  524 0000041A' 5488                                 addq.l        #2,a0            ;A0 zwei (16Bit-Offset) weiter
  561.  525 0000041C' 4E75                                 rts
  562.  526                                                
  563.  527 0000041E' C47C 01F0                pc_i_l:        and.w        #%111110000,d2    ;Restinformation ausblenden
  564.  528 00000422' E44A                                 lsr.w        #2,d2            ;D2=Registernummer*4 und Modusbit
  565.  529 00000424' D3F3 2000                            adda.l        (a3,d2.w),a1    ;Long-Index addieren
  566.  530 00000428' 5488                                 addq.l        #2,a0            ;A0 zwei (16Bit-Offset) weiter
  567.  531 0000042A' 4E75                                 rts            ;ENDE von calc_add ***
  568.  532  
  569.  533                                    ;-------------- installation-handler ---------------------------------
  570.  534  
  571.  535 0000042C' 2078 002C                Install:    movea.l        lineF,a0         ;Vektor nach A0
  572.  536 00000430' 2028 FFF4                            move.l        (-12.b,a0),d0    ;falls "XBRA" -> jetzt in D0
  573.  537 00000434' 2228 FFF8                            move.l        (-8.b,a0),d1    ;falls "LFED" -> jetzt in D1
  574.  538 00000438' 4E75                                 rts 
  575.  539                                                
  576.  540 0000043A' 4879 00000000`           Terminate:    pea            failure            ;Fehlermeldung
  577.  541 00000440' 3F3C 0009                            move.w        #9,-(sp)        ;Cconws
  578.  542 00000444' 4E41                                 trap        #1                ;GEMDOS
  579.  543 00000446' 3F3C 0000                            move.w        #0,-(sp)        ;richtig terminieren
  580.  544 0000044A' 4E41                                 trap        #1                ;mit Pterm(0)/GEMDOS
  581.  545 0000044C'                                                  
  582.  546                                    ;-------------- data-segment -----------------------------------------
  583.  547                                                
  584.  548                                                .DATA
  585.  549                                                
  586.  550 00000000` 00000000'00000000'
  587.      00000008` 00000000'00000000'       cs_tab:        .dc.l    c_drd,c_ard,c_ari,c_arpo    ;Sprungtabelle für
  588.  551 00000010` 00000000'00000000'
  589.      00000018` 00000000'00000000'                   .dc.l    c_arpr,c_ar16,c_ar08,c_pc    ;Adressierungsarten
  590.  552  
  591. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page  11
  592. Source File: D:\PC\FPU_EMU\LFED_4.S
  593.  
  594.  553 00000020` 0A0D 1B70                titel:      .dc.b     10, 13, 27, 112    ;CR/invers on
  595.  554 00000024` 2020 4C69 6E65 2D46 
  596.      0000002C` 2D45 6D75 6C61 7469 
  597.      00000034` 6F6E 2D44 7269 7665 
  598.      0000003C` 7220 4C46 4544 2020 
  599.      00000044` 0A0D                                 .ASCII    "  Line-F-Emulation-Driver LFED  ", 10, 13 
  600.  555 00000046` 2020 2020 2020 2020 
  601.      0000004E` 5665 7273 696F 6E20 
  602.      00000056` 312E 3030 2020 2020 
  603.      0000005E` 2020 2020 2020 2020 
  604.      00000066` 0A0D                                 .ASCII    "        Version 1.00            ", 10, 13
  605.  556 00000068` 1B71                                 .dc.b    27, 113         ;invers off
  606.  557 0000006A` 2020 2028 6329 2062 
  607.      00000072` 7920 536D 6172 7420 
  608.      0000007A` 5379 7374 656D 7320 
  609.      00000082` 2739 320A 0D                         .ASCII  "   (c) by Smart Systems '92", 10, 13
  610.  558 00000087` 204D 6963 6861 656C 
  611.      0000008F` 2048 6175 7363 6869 
  612.      00000097` 6C64 202F 2053 6565 
  613.      0000009F` 6C7A 650A 0D                         .ASCII  " Michael Hauschild / Seelze", 10, 13
  614.  559 000000A4` 2050 686F 6E65 3A20 
  615.      000000AC` 3035 3133 3720 2F20 
  616.      000000B4` 3920 3230 2030 390A 
  617.      000000BC` 0D00                                 .ASCII  " Phone: 05137 / 9 20 09", 10, 13, 0
  618.  560  
  619.  561 000000BE` 0A0D                     failure:    .dc.b    10, 13    ;CR
  620.  562 000000C0` 204C 4645 4420 616C 
  621.      000000C8` 7265 6164 7920 696E 
  622.      000000D0` 7374 616C 6C65 6400                  .ASCIIZ    " LFED already installed"
  623.  563 000000D8` 0A0D                                 .dc.b    10, 13    ;CR
  624.  564 000000DA`                                      
  625.  565                                    ;-------------- blockstorage-segment ---------------------------------
  626.  566                                                
  627.  567                                                .BSS
  628.  568  
  629.  569 00000000"                          dregs:        .ds.l    (8+7)    ;Platz für Register (D0-D7/A0-A6)
  630.  570 0000003C"                          rusp:        .ds.l    1        ;Platz für USP (A7)
  631.  571 00000040"                          rd1:        .ds.l    1        ;Platz für D1
  632.  572 00000044"  
  633.  573                                    ;-------------- end of code ------------------------------------------
  634.  574  
  635.  575                                                .END
  636. PASM 68040 Macro Assembler  Version Nov 12 1991  (C) 91 Pure Software  Page  12
  637. Source File: D:\PC\FPU_EMU\LFED_4.S
  638.  
  639.  
  640.  
  641. Symbols:
  642. ========
  643.  
  644. Name                  Value      Scope      Relocation base
  645.  
  646. .l_1                  00000228   Local      TEXT
  647. .l_1                  00000262   Local      TEXT
  648. .l_1                  00000292   Local      TEXT
  649. .l_1                  000002BC   Local      TEXT
  650. .l_1                  0000033A   Local      TEXT
  651. .l_1                  00000358   Local      TEXT
  652. .l_1                  0000017C   Local      TEXT
  653. .l_1                  00000164   Local      TEXT
  654. .l_1                  00000128   Local      TEXT
  655. .l_1                  0000013A   Local      TEXT
  656. .l_2                  0000033E   Local      TEXT
  657. .l_2                  00000132   Local      TEXT
  658. .l_2                  000002A6   Local      TEXT
  659. .l_2                  000002D2   Local      TEXT
  660. .l_2                  0000023E   Local      TEXT
  661. .l_2                  0000035E   Local      TEXT
  662. .l_2                  00000186   Local      TEXT
  663. .l_2                  0000016E   Local      TEXT
  664. .l_2                  00000276   Local      TEXT
  665. .l_2                  00000148   Local      TEXT
  666. Install               0000042C   File       TEXT
  667. Terminate             0000043A   File       TEXT
  668. again                 000000BA   File       TEXT
  669. c_ar08                0000037E   File       TEXT
  670. c_ar16                0000036A   File       TEXT
  671. c_ar81                000003AA   File       TEXT
  672. c_ard                 0000030C   File       TEXT
  673. c_ari                 0000031C   File       TEXT
  674. c_arpo                00000328   File       TEXT
  675. c_arpr                00000348   File       TEXT
  676. c_drd                 0000030C   File       TEXT
  677. c_long                000003D8   File       TEXT
  678. c_pc                  000003BA   File       TEXT
  679. calc_add              000002F2   File       TEXT
  680. command               0000000A   File       EQUATE
  681. condition             0000000E   File       EQUATE
  682. control               00000002   File       EQUATE
  683. cop_error             000002E2   File       TEXT
  684. cs_tab                00000000   File       DATA
  685. do_ca                 000000C8   File       TEXT
  686. dregs                 00000000   File       BSS
  687. failure               000000BE   File       DATA
  688. immi                  000003E0   File       TEXT
  689. ins_add               00000018   File       EQUATE
  690. lineF                 0000002C   File       EQUATE
  691. my_trap               0000008A   File       TEXT
  692. newtrap               00000070   File       TEXT
  693. oldtrap               0000006C   File       TEXT
  694. operand               00000010   File       EQUATE
  695. pc_i_l                0000041E   File       TEXT
  696. pc_idx                000003FA   File       TEXT
  697. pc_rel                000003E8   File       TEXT
  698. r_11                  000001A6   File       TEXT
  699. r_bw                  000001B0   File       TEXT
  700. r_byte                000001BC   File       TEXT
  701. r_pred                00000138   File       TEXT
  702. rd1                   00000040   File       BSS
  703. reg_selec             00000014   File       EQUATE
  704. response              00FFFA40   File       EQUATE
  705. restore               00000006   File       EQUATE
  706. rusp                  0000003C   File       BSS
  707. rw_00                 00000112   File       TEXT
  708. rw_11                 000001E8   File       TEXT
  709. rw_1x                 00000190   File       TEXT
  710. rw_sngl               00000106   File       TEXT
  711. s_br16                0000028E   File       TEXT
  712. s_br32                000002B8   File       TEXT
  713. s_fdbcc               00000248   File       TEXT
  714. s_trap                00000206   File       TEXT
  715. save                  00000004   File       EQUATE
  716. setvec                00000052   File       TEXT
  717. spezial               000001EC   File       TEXT
  718. start                 00000018   File       TEXT
  719. titel                 00000020   File       DATA
  720. w_00                  00000156   File       TEXT
  721. w_10                  000001C2   File       TEXT
  722. w_11                  000001CC   File       TEXT
  723. w_bw                  000001D6   File       TEXT
  724. w_byte                000001E2   File       TEXT
  725. w_post                00000176   File       TEXT
  726. xb_id                 00000068   File       TEXT
  727. xb_magic              00000064   File       TEXT
  728.