home *** CD-ROM | disk | FTP | other *** search
/ Amiga Times / AmigaTimes.iso / spiele / CyberMa_full / SOURCEs / TRACKLOADER / BOOT.S next >
Encoding:
Text File  |  1998-10-06  |  6.1 KB  |  329 lines

  1. ;******************************************************************************
  2. ;
  3. ;   CYBER-MAN
  4. ;
  5. ; BOOT routine                                                19 Apr 1993
  6. ;
  7. ;
  8.  
  9. BOOT:
  10.     DC.L    $444F5300    ;DOS
  11.     DC.L    $00000000    ;CHECKSUM
  12.     DC.L    $00000370    ;880 = BOOT
  13.  
  14.     LEA    $DFF000,A6
  15.     LEA    $070000,A4
  16.     MOVE.L    #$01000,A7    ;STACK POINTER
  17.     MOVE.W    #$7FFF,$9A(A6)    ;intena
  18.     MOVE.W    #$7FFF,$96(A6)    ;dmacon
  19.     MOVE.W    #$8210,$96(A6)
  20.     MOVE.W    #$0000,$180(A6)    ;color00
  21.  
  22.     MOVE.W    #$03FF,D0    ; CLEAR $00000-$01000 of CHIP-MEM
  23.     LEA    $00000.W,A1
  24. .clr1    CLR.L    (A1)+
  25.     DBRA    D0,.clr1
  26.  
  27.     LEA    LOADER(PC),A1
  28.     MOVE.W    #$00FF,D0
  29.     LEA    $00400.W,A2    ; $400 = ADDRESS of LOADER
  30. .copy    MOVE.L    (A1)+,(A2)+
  31.     DBRA    D0,.copy
  32.     JMP    $400
  33.  
  34. LOADER:    MOVE.W    #$FDFF,D0    ; CLEAR $01000-$80000 of CHIP-MEM
  35.     LEA    $01000.W,A1
  36. .clr2    CLR.L    (A1)+
  37.     CLR.L    (A1)+
  38.     DBRA    D0,.clr2
  39.  
  40.     BSR.W    FIND_FASTRAM    ; A0 = Address of FAST RAM 512k
  41.  
  42.     MOVEQ    #-1,D0        ; CLEAR $00000-$80000 of FAST-MEM
  43.     MOVE.L    A0,A1
  44. .clr3    CLR.L    (A1)+
  45.     CLR.L    (A1)+
  46.     DBRA    D0,.clr3
  47.  
  48.     LEA    $BFD000,A1
  49.     LEA    $BFE001,A2
  50.     BSR.B    TRACKLOADER
  51.  
  52.     MOVE.L    A0,A1
  53.     ADD.L    #$28000,A1    ;PROGRAM Address
  54.     JMP    (A1)
  55.  
  56. ; END of BOOT routine
  57. *******************************************************************************
  58. *
  59. * TRACKLOADER routine                                         19 Apr 1993
  60. *
  61. *
  62. *   D0,D1,D2,D3,D6,D7 = Local use
  63. *
  64. *   A1 = CIAB            $BFD000     pre-load
  65. *   A2 = CIAA            $BFE001     pre-load
  66. *   A3 = VAR  --local variables--
  67. *   A4 = BUFFER          $070000     pre-load    LENGHT = 16k
  68. *   A5 = used by DECODE routine
  69. *   A6 = CUSTOM          $DFF000     pre-load
  70. *   A7 = STACK POINTER   $001000     pre-load
  71. *
  72. * D4,D5,A0 = Unused
  73. *
  74.  
  75. TRACKLOADER:
  76.     LEA    VAR(PC),A3
  77.  
  78.     MOVE.B    $100(A1),D0
  79.     AND.B    #$7F,D0
  80.     MOVE.B    D0,$100(A1)    ;MOTOR ON
  81.     AND.B    #$F5,D0
  82.     OR.B    #$72,D0
  83.     MOVE.B    D0,$100(A1)    ;DF0 , dir00
  84.  
  85.     MOVE.B    $E00(A1),D0
  86.     AND.B    #$C0,D0
  87.     OR.B    #8,D0
  88.     MOVE.B    D0,$E00(A1)    ;ciacrA
  89.     MOVE.B    #$7F,$D00(A1)    ;ciacrB
  90.  
  91. READY:    BTST.B    #5,(A2)
  92.     BNE.B    READY
  93.  
  94.     BTST.B    #4,(A2)        ;track00 ?
  95.     BEQ.B    .go
  96. .seek00    BSR.W    STEP_HEAD
  97.     BTST.B    #4,(A2)
  98.     BNE.B    .seek00
  99.  
  100. .go    MOVE.B    $100(A1),D0
  101.     AND.B    #$FD,D0
  102.     MOVE.B    D0,$100(A1)    ;dir79
  103.     CLR.W    track(A3)    ;num of track (0..159)
  104. .seek02    
  105.     MOVE.W    track(A3),D0
  106.     CMP.W    #2,D0
  107.     BEQ.B    .track02
  108.     ADDQ.W    #1,D0
  109.     MOVE.W    D0,track(A3)
  110.     BTST.L    #0,D0
  111.     BNE.B    .seek02
  112.     BSR.W    STEP_HEAD
  113.     BRA.B    .seek02
  114.  
  115. .track02                ;load SOUND (tracks 2..27)
  116.     MOVE.L    #$01000,dest(A3)
  117. .sound    CMP.W    #28,track(A3)
  118.     BEQ.B    .track28
  119.     BSR.W    READ_TRACK
  120.     BRA.W    .sound
  121.  
  122. .track28                ;load RADAR,SHAPES,COPPER (tr. 28..70)
  123.     MOVE.L    #$2B000,dest(A3)
  124. .shapes    CMP.W    #71,track(A3)
  125.     BEQ.B    .track71
  126.     BSR.W    READ_TRACK
  127.     BRA.W    .shapes
  128.  
  129. .track71                ;load TABs,MAP,PROGRAM (tracks 71..107)
  130.     MOVE.L    A0,dest(A3)
  131. .tabs    CMP.W    #108,track(A3)
  132.     BEQ.B    .track108
  133.     BSR.W    READ_TRACK
  134.     BRA.W    .tabs
  135.  
  136. .track108                ;load SCREENs,PALETTE (tracks 108..159)
  137.     MOVE.L    A0,dest(A3)
  138.     ADD.L    #$38000,dest(A3)
  139. .screen    CMP.W    #160,track(A3)
  140.     BEQ.B    .exit
  141.     BSR.W    READ_TRACK
  142.     BRA.W    .screen
  143.  
  144. .exit    RTS
  145.  
  146. ************************************************
  147. VAR:
  148. dest    RS.L    1
  149. track    RS.W    1
  150. sector    RS.W    1
  151.  
  152.     DC.L    1    ;dest
  153.     DC.W    1    ;track
  154.     DC.W    1    ;sector
  155. ************************************************
  156.  
  157. READ_TRACK:
  158.     MOVE.W    track(A3),D0    ;num of track (0..159)
  159.     AND.W    #1,D0
  160.     LSL.W    #2,D0
  161.     EOR.W    #4,D0
  162.     MOVE.B    $100(A1),D1
  163.     AND.B    #$FB,D1
  164.     OR.B    D1,D0
  165.     MOVE.B    D0,$100(A1)    ;SELEZIONA la faccia del disco
  166.     MOVE.L    A4,$20(A6)    ;dskpt    -->BUFFER
  167.     MOVE.W    #$0002,$9C(A6)    ;intreq
  168.     MOVE.W    #$4489,$7E(A6)    ;dsksync
  169.     MOVE.W    #$8400,$9E(A6)    ;adkcon
  170.     MOVE.W    #$4000,$24(A6)    ;dsklen
  171.     MOVE.W    #$9E00,$24(A6)
  172.     MOVE.W    #$9E00,$24(A6)
  173. .wbf    BTST.B    #1,$1F(A6)    ;intreqr
  174.     BEQ.B    .wbf
  175.     MOVE.W    #0002,$9C(A6)    ;clear DSKBLK interrupt
  176.     MOVE.W    #$4000,$24(A6)    ;dsklen
  177.  
  178.     CLR.B    sector(A3)
  179.  
  180.     MOVE.L    A1,-(A7)    ;CIAB
  181.     MOVE.L    A2,-(A7)    ;CIAA
  182. .decode    MOVE.L    A4,A1        ;A4 = BUFFER
  183.     ADD.L    #$200,A1
  184.     MOVE.L    #$55555555,D7
  185. .sync    CMP.W    #$4489,(A1)+
  186.     BNE.B    .sync
  187. .sync2    CMP.W    #$4489,(A1)
  188.     BNE.B    .data
  189.     ADDQ.L    #2,A1
  190.     BRA.B    .sync2
  191. .data    LEA    4(A1),A2
  192.     MOVE.L    (A1)+,D0
  193.     MOVE.L    (A2)+,D1
  194.     AND.L    D7,D0
  195.     LSL.L    #1,D0
  196.     AND.L    D7,D1
  197.     OR.L    D1,D0
  198.     ROR.L    #8,D0
  199.     MOVE.B    sector(A3),D1
  200.     CMP.B    D1,D0
  201.     BEQ.B    .sector
  202.     LEA    $3E8(A1),A1
  203.     BRA.B    .sync
  204. .sector    LEA    $34(A1),A1
  205.     LEA    $200(A1),A2
  206.     MOVE.L    dest(A3),A5
  207.     MOVEQ    #$7F,D6
  208. .loop    MOVE.L    (A1)+,D0
  209.     MOVE.L    (A2)+,D1
  210.     AND.L    D7,D0
  211.     LSL.L    #1,D0
  212.     AND.L    D7,D1
  213.     OR.L    D1,D0
  214.     MOVE.L    D0,(A5)+
  215.     DBRA    D6,.loop
  216.     MOVE.L    A5,dest(A3)
  217.  
  218.     ADDQ.B    #1,sector(A3)
  219.     CMP.B    #11,sector(A3)
  220.     BNE.B    .decode
  221.  
  222.     MOVE.L    (A7)+,A2    ;CIAA
  223.     MOVE.L    (A7)+,A1    ;CIAB
  224.  
  225.     ADDQ.W    #1,track(A3)
  226.     MOVE.W    track(A3),D0
  227.     BTST.L    #0,D0
  228.     BNE.B    .exit
  229.     BRA.W    STEP_HEAD
  230. .exit    RTS
  231.  
  232. STEP_HEAD:
  233.     MOVE.B    $100(A1),D0
  234.     AND.B    #$FE,D0
  235.     MOVE.B    D0,$100(A1)    ;Step HEAD
  236.     ADDQ.B    #1,D0
  237.     NOP
  238.     NOP
  239.     NOP
  240.     NOP
  241.     MOVE.B    D0,$100(A1)
  242.  
  243.     MOVE.B    $E00(A1),D0
  244.     AND.B    #$C0,D0
  245.     OR.B    #8,D0
  246.     MOVE.B    D0,$E00(A1)    ;ciacrA
  247.     MOVE.B    #$7F,$D00(A1)    ;ciacrB
  248.  
  249.     MOVE.W    #$2148,D0
  250.     MOVE.B    D0,$400(A1)
  251.     LSR.W    #8,D0
  252.     MOVE.B    D0,$500(A1)
  253. .wi    BTST.B    #0,$D00(A1)
  254.     BEQ.B    .wi        ;DELAY
  255.     RTS
  256.  
  257. ; END of TRACKLOADER routine
  258. ;******************************************************************************
  259. ;
  260. ; FIND_FASTRAM routine                                        19 Apr 1993
  261. ;
  262. ;
  263.  
  264. FIND_FASTRAM:
  265.     MOVE.L    $200000,D0
  266.     CLR.L    $200000
  267.     MOVE.L    #'CHK0',$200000
  268.     CMP.L    #'CHK0',$200000
  269.     BNE.B    FIND.8
  270.     MOVE.L    $27FFFC,D1
  271.     CLR.L    $27FFFC
  272.     MOVE.L    #'CHK1',$27FFFC
  273.     CMP.L    #'CHK1',$27FFFC
  274.     BNE.B    FIND.8
  275.     MOVE.L    D0,$200000
  276.     MOVE.L    D1,$27FFFC
  277.     LEA    $200000,A0
  278.     RTS
  279.  
  280. FIND.8    MOVE.L    $800000,D0
  281.     CLR.L    $800000
  282.     MOVE.L    #'CHK2',$800000
  283.     CMP.L    #'CHK2',$800000
  284.     BNE.B    FIND.C
  285.     MOVE.L    $87FFFC,D1
  286.     CLR.L    $87FFFC
  287.     MOVE.L    #'CHK3',$87FFFC
  288.     CMP.L    #'CHK3',$87FFFC
  289.     BNE.B    FIND.C
  290.     MOVE.L    D0,$800000
  291.     MOVE.L    D1,$87FFFC
  292.     LEA    $800000,A0
  293.     RTS
  294.  
  295. FIND.C    MOVE.L    $C00000,D0
  296.     CLR.L    $C00000
  297.     MOVE.L    #'CHK4',$C00000
  298.     CMP.L    #'CHK4',$C00000
  299.     BNE.B    FIND.0
  300.     MOVE.L    $C7FFFC,D0
  301.     CLR.L    $C7FFFC
  302.     MOVE.L    #'CHK5',$C7FFFC
  303.     CMP.L    #'CHK5',$C7FFFC
  304.     BNE.B    FIND.0
  305.     MOVE.L    D0,$C00000
  306.     MOVE.L    D1,$C7FFFC
  307.     LEA    $C00000,A0
  308.     RTS
  309.  
  310. FIND.0    MOVE.L    $080000,D0
  311.     MOVE.L    $000000,D1
  312.     CLR.L    $000000
  313.     CLR.L    $080000
  314.     MOVE.L    #'CHK6',$080000
  315.     CMP.L    #'CHK6',$080000
  316.     BNE.B    FIND.N
  317.     CMP.L    #'CHK6',$000000
  318.     BEQ.B    FIND.N
  319.     MOVE.L    D0,$080000
  320.     MOVE.L    D1,$000000
  321.     LEA    $080000,A0
  322.     RTS
  323.  
  324. FIND.N    MOVE.W    #$0F00,$DFF180    ; ERROR = NO FAST RAM found -->RED SCREEN
  325.     BRA.B    FIND.N
  326.  
  327. ; END of FIND_FASTRAM routine
  328. ;******************************************************************************
  329.