home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0686.ZIP / CCE_0686 / SPEEDER_.U77 / SPEEDER4.Q < prev   
Text File  |  1990-04-08  |  5KB  |  170 lines

  1. ;  SPEEDER+: Verdopplung der Schreib- und Lesegeschwindigkeit
  2. ;            des ATARI ST
  3. ;  (c) Stefan Schreiber, Oktober 1990
  4. ;  Programmiersprache: PROFIMAT-Assembler
  5.  
  6.  
  7. hdv_rw  = $476
  8. swv_vec = $46E
  9.  
  10.  data
  11. newbios4:  ds.l    1
  12. oldbios4:  ds.l    1
  13.  
  14. meldetext: dc.b 13,10,"Speeder+ V4.0 is installing...",13,10
  15.            dc.b "(c) 1990  Stefan Schreiber",13,10
  16.            dc.b "Greetings to ",27,"p"," Klapauzius ",27,"q","!",13,0
  17.  align.w
  18. fehlermeldung:
  19.            dc.b 10,10,"Installation Error!!!",13,10
  20.            dc.b "I can't find an important TOS-function!",13,10
  21.            dc.b "Press ",27,"p"," RETURN ",27,"q"," to continue...",13,0
  22.  
  23.  align.w
  24. mediach:   dc.l $4E560000, $48E70304, $0C6E0002
  25. flopread:  dc.l $3CBC0090, $3CBC0190, $3CBC0090
  26. rwabs:     dc.l $4E560000, $48E70700, $3E2E0012
  27. go2track:  dc.l $42690000, $3CBC0082, $42476100
  28.  
  29.  bss
  30. buffer:    ds.b 4000
  31.  
  32.  text
  33.         move.l  4(a7),a6
  34.         move.l  12(a6),d7       ; Länge des PRG-Bereichs
  35.         add.l   20(a6),d7       ; + Länge des DATA-Bereichs
  36.         add.l   28(a6),d7       ; + Länge des BSS-Bereichs
  37.         addi.l  #$100,d7        ; + Länge der Basepage
  38.  
  39.         move.l  #meldetext,-(sp)
  40.         move    #9,-(sp)
  41.         trap    #1
  42.         addq.l  #6,sp           ; Meldetext ausgeben
  43.         clr.l   -(sp)
  44.         move    #$20,-(sp)
  45.         trap    #1
  46.         addq.l  #6,sp           ; Supervisormodus
  47.         move.l  d0,d6           ; sp in d6 zwischenspeichern
  48.  
  49.         move.l  swv_vec,a0
  50.         lea     mediach(pc),a1
  51.         bsr     search
  52.         move.l  a0,a6           ; Beginn der Mediach-Routine --> a6
  53.         move.l  swv_vec,a0
  54.         lea     flopread(pc),a1
  55.         bsr     search
  56.         sub.l   #30,a0          ; Beginn der floprd-Routine --> a0
  57.         lea     buffer(pc),a1
  58.         cmpa.l  a6,a0     ; Floppy-Routine mit niedrigster Addresse
  59.         blo     rainbow   ; bestimmen. Diese ist je nach TOS-Version
  60. oldtos:                   ; eine von den beiden oben aufgeführten
  61.         move.l  a6,a0     ; Routinen!
  62. rainbow:
  63.         move.l  a0,d2     ; d2 wird für die Relocate-Routinen benötigt
  64.         move    #249,d1
  65. copy:   move.l  (a0)+,(a1)+     ; Floppy-Routinen ins RAM schaufeln
  66.         move.l  (a0)+,(a1)+     ; 250*16 = 4000 Bytes
  67.         move.l  (a0)+,(a1)+
  68.         move.l  (a0)+,(a1)+
  69.         dbf     d1,copy
  70.  
  71.         lea     buffer(pc),a0
  72.         lea     rwabs(pc),a1
  73.         bsr     search
  74.         move.l  a0,newbios4  ; newbios 4: Vektor auf neue rwabs-Routine
  75.  
  76.  
  77. relocator:
  78.         lea     buffer(pc),a0
  79.         move.l  d2,a5        ; untere und obere Grenze des
  80.         move.l  d2,a6        ; kopierten ROM-Bereichs
  81.         add.l   #4000,a6
  82.         move    #1999,d1
  83. loop:   cmp     #$4eb9,(a0)+    ; jsr ... ?
  84.         beq     relocate
  85.         dbf     d1,loop
  86.  
  87. cont:   lea     buffer(pc),a0
  88.         lea     go2track(pc),a1
  89.         bsr     search
  90.         cmp.b   #$14,61(a0)          ; FDC-Befehl 'Seek mit Verify'?
  91.         bne     error2
  92.         move.b  #$10,61(a0)          ; umändern zu 'Seek ohne Verify'!
  93.         move.l  hdv_rw,oldbios4      ; alte rwabs-Routine retten
  94.         move.l  #switch_rw,hdv_rw    ; Scheduler installieren
  95.         move.l  d6,-(sp)
  96.         move    #$20,-(sp)
  97.         trap    #1
  98.         addq.l  #6,sp                ; User-Modus
  99.        
  100.         clr     -(sp)
  101.         move.l  d7,-(sp)
  102.         move    #$31,-(sp)
  103.         trap    #1                   ; Keep process
  104.  
  105. ; Speeder+ ist jetzt als residentes Programm  installiert.
  106.  
  107. relocate:
  108.         cmpa.l  (a0),a5        ; Sprung in eine Floppy-Routine?
  109.         bhi     no_floppy_function
  110.         cmpa.l  (a0),a6
  111.         blo     no_floppy_function
  112.         sub.l   d2,(a0)
  113.         add.l   #buffer,(a0)
  114. no_floppy_function:
  115.         addq.l  #4,a0          ; a0 auf nächsten 68000er-Befehl
  116.         subq.w  #2,d1          ; 2 Wörter überspringen
  117.         cmp     #-1,d1         ; Zähler noch im korrekten Bereich?
  118.         bgt     loop           ; ja
  119.         bra     cont
  120.  
  121. search: move    #10000,d4      ; nicht mehr als 10000 Worte lang suchen
  122. check:  move    (a0)+,d0       ; paßt 1. Wort?
  123.         cmp     (a1),d0
  124.         dbeq    d4,check
  125.         cmp     #-1,d4
  126.         beq     error
  127.         move    #-2,d3
  128. check_on:
  129.         add     #2,d3
  130.         cmp     #10,d3
  131.         beq     string_found
  132.         move    (a0,d3.w),d0
  133.         cmp     2(a1,d3.w),d0  ; 5 weitere Worte überprüfen!
  134.         beq     check_on
  135.         dbf     d4,check
  136. string_found:
  137.         subq.l  #2,a0          ; a0: Addresse der gesuchten Routine
  138.         rts
  139.  
  140. error:  addq.l  #4,sp          ; sp reparieren
  141. error2: move.l  #fehlermeldung,-(sp)
  142.         move    #9,-(sp)
  143.         trap    #1
  144.         addq.l  #6,sp
  145.         move    #7,-(sp)
  146.         trap    #1
  147.         addq.l  #2,sp
  148.         move.l  d6,-(sp)       ; auf Tastendruck warten
  149.         move    #$20,-(sp)
  150.         trap    #1
  151.         addq.l  #6,sp
  152.         clr     -(sp)
  153.         trap    #1             ; Term
  154.  
  155.  
  156. ;************************************************************************
  157.  
  158. switch_rw:
  159.         cmpi    #2,14(a7)       ; Ramdisk oder Festplatte angesprochen?
  160.         bhs     old             ; dann alte Routine
  161.         move.l  newbios4,a0
  162.         jmp     (a0)            ; a0 darf verwendet werden
  163. old:
  164.         move.l  oldbios4,a0
  165.         jmp     (a0)
  166.  
  167.  
  168.  
  169.  END