home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 21 / AACD 21.iso / AACD / Games / JST / sources / src / loaders / FireAndIceCD32 / FireAndIceCD32HD.asm next >
Encoding:
Assembly Source File  |  2001-03-19  |  2.7 KB  |  185 lines

  1. ; *** Fire And Ice CD32 HD loader v1.0
  2. ; *** Written by Jean-François Fabre
  3.  
  4.     include  "syslibs.i"
  5.     include  "jst.i"
  6.  
  7.     HD_PARAMS   "",0,0
  8.  
  9. loader:
  10.     RELOC_MOVEL D0,trainer
  11.  
  12.     move.l   #$100000,D0
  13.     JSRABS   AllocExtMem
  14.     RELOC_MOVEL D0,ExtBase
  15.     beq   MemErr
  16.  
  17.     Mac_printf  "Fire And Ice CD32 HD Loader v1.0"
  18.     Mac_printf  "Coded by Jean-François Fabre © 2000"
  19.  
  20.     RELOC_TSTL  trainer
  21.     beq   .skip
  22.  
  23.     NEWLINE
  24.     Mac_printf  "Trainer activated"
  25. .skip
  26.     JSRGEN   CheckAGA
  27.     tst.l D0
  28.     bne   AgaErr
  29.  
  30.     JSRGEN    GetUserFlags
  31.     btst    #AFB_NTSC,D0
  32.     beq.b    .pal
  33.     lea    progname_ntsc(pc),A0
  34.     bra.b    .cont
  35. .pal
  36.     lea    progname(pc),A0
  37. .cont
  38.  
  39.     RELOC_MOVEL    A0,prog
  40.  
  41.     move.l    A0,D0
  42.     JSRABS    TestFile
  43.     tst.l    D0
  44.     bne    ExeErr
  45.  
  46.  
  47.     JSRABS    UseHarryOSEmu
  48.  
  49.     move.l    #10000,D0
  50.     JSRABS    LoadSmallFiles
  51.  
  52.     moveq.l    #0,D0
  53.     move.l    #CACRF_CopyBack,D1
  54.     JSRABS    Degrade
  55.  
  56.     GO_SUPERVISOR
  57.     SAVE_OSDATA    $200000
  58.  
  59.     move.w    #0,SR
  60.  
  61.     bsr    InstallBoot
  62.  
  63.     ; **** boot stuff and patch
  64.  
  65.     JSRGEN    FlushCachesHard
  66.  
  67.     jsr    (A1)
  68.  
  69.     JSRGEN    InGameExit
  70.  
  71. InstallBoot:
  72.     move.l    prog(pc),A0
  73.     bsr    LoadExecutable
  74.  
  75.     STORE_REGS
  76.     move.l    #$4EAEFE44,D0
  77.     move.l    #$4E714E71,D1
  78.  
  79.     cmp.l    ($44C,A1),D0
  80.     bne.b    .nop1
  81.     move.l    D1,($44C,A1)
  82. .nop1    
  83.     cmp.l    ($4AC,A1),D0
  84.     bne.b    .nop2
  85.     move.l    D1,($4AC,A1)
  86. .nop2
  87.  
  88.     RESTORE_REGS
  89.     rts
  90.  
  91. MemErr:
  92.     Mac_printf    "** Not enough memory to run Fire And Ice CD32!"
  93.     JMPABS        CloseAll
  94.  
  95. AgaErr:
  96.     Mac_printf    "** You need a A1200/A4000 to run Fire And Ice CD32!"
  97.     JMPABS        CloseAll
  98.  
  99. ExeErr:
  100.     lea    exenotfound(pc),A1
  101.     JSRABS    Display
  102.     move.l    prog(pc),A1
  103.     JSRABS    Display
  104.     NEWLINE
  105.     JMPABS    CloseAll
  106.  
  107.  
  108. trainer:
  109.     dc.l  0
  110. ExtBase:
  111.     dc.l  0
  112.  
  113. exenotfound:
  114.     dc.b    "** Cannot find file ",0
  115.  
  116. progname:
  117.     dc.b    "FirePAL",0
  118. progname_ntsc:
  119.     dc.b    "FireNTSC",0
  120.     cnop    0,4
  121.  
  122. ; loads an executable by calling OSEmu LoadSeg()
  123. ;
  124. ; < A0: name of the executable
  125. ; > A1: start address (do a JSR (a1) to start the program)
  126. ; > A0: pointers on arguments
  127. ; > D0: argument string length
  128. ;
  129. ; ** no checks are done there so be careful **
  130.  
  131. LoadExecutable:
  132.     movem.l    A2-A6/D1-D7,-(A7)
  133.     move.l    A0,-(A7)
  134.     MOVE.L    $4.W,A6            ;OPEN DOSLIB FOR USE (THE EMU
  135.     MOVEQ.L    #0,D0            ;PROVIDES THE FUNCTIONS)
  136.     LEA    dosname(PC),A1
  137.     JSRLIB    OpenLibrary
  138.     RELOC_MOVEL    D0,dosbase
  139.     MOVE.L    D0,A6
  140.     move.l    (A7)+,A0
  141.  
  142.     MOVE.L    A0,D1
  143.     JSRLIB    LoadSeg
  144.     RELOC_MOVEL    D0,loaderseg
  145.  
  146.     LSL.L    #2,D0
  147.     MOVE.L    D0,A1
  148.     ADDQ.L    #4,A1
  149.  
  150.     lea    progargs(pc),A0
  151.     move.l    A0,D0
  152.     JSRGEN    StrlenAsm    ; arguments length
  153.  
  154.     JSRGEN    FlushCachesHard
  155.     movem.l    (A7)+,A2-A6/D1-D7
  156.     rts
  157.  
  158. ; unloads previously loaded executable
  159.  
  160. UnloadExecutable:
  161.     STORE_REGS
  162.     move.l    dosbase(pc),A6
  163.     move.l    loaderseg(pc),D1
  164.     JSRLIB    UnLoadSeg
  165.     RESTORE_REGS
  166.     rts
  167.  
  168. FileErr:
  169.     Mac_printf    "** Cannot find file ...."
  170.     JMPABS    CloseAll
  171.  
  172. loaderseg:
  173.     dc.l    0
  174. dosbase:
  175.     dc.l    0
  176. prog:
  177.     dc.l    0
  178.  
  179. progargs:
  180.     ; your arguments here (ex: dc.b "/f data1")
  181.     dc.b    10,0        ; linefeed + null termination
  182. dosname:
  183.     dc.b    "dos.library",0
  184.  
  185.