Advertisement
glokyfull

baserou2.s

Mar 8th, 2024
622
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; baserou2.s
  2.  
  3. DEBUG2  equ 0
  4.  
  5. ;
  6. ; routine de bases
  7. ;
  8.  
  9. ; utilisation
  10. ;   lea rammovem,a0         ; un buffer de 2294 octet
  11. ;   jsr prepclear32000      ; a appeller un fois genere le code d'effacement de 32000 octet
  12. ;  
  13.  
  14. ;  ***********************************************
  15. prepclear32000      ; a appeler qu'une fois
  16. ; a0 = ram de 571*4 movem repveté +4 dernier movem +4 lea +2 rts   2294 octet
  17. ; 14*4=56 32000/56 = 571  reste 24 octet
  18.  
  19.  
  20.     move.l a0,d0
  21.     move.l d0,clrauto1+2
  22.  
  23.     move.w #571-1,d0
  24.     lea instruction,a1
  25.     move.l (a1)+,d1
  26.     move.l d1,(a0)+         ; lea 32000(a0),a0
  27.     move.l (a1)+,d1
  28. .loop   move.l d1,(a0)+
  29.     dbf d0,.loop
  30.     move.l (a1)+,d1
  31.     move.l d1,(a0)+
  32.     move.w #$4e75,(a0)+
  33.     rts
  34.    
  35.  
  36.  
  37. instruction
  38.     lea 32000(a0),a0
  39.     movem.l d0-d7/a1-a6,-(a0)
  40.     movem.l d0-d5,-(a0)
  41.  
  42. clear32000:         ; ne jamais appeler sans avoir au moins une fois appeler prepclear32000
  43. ; a0 = screen           ; avec a0 = buffer de 2294 octets libre
  44.     moveq #0,d0
  45.     move.l d0,d1
  46.     move.l d0,d2
  47.     move.l d0,d3
  48.     move.l d0,d4
  49.     move.l d0,d5
  50.     move.l d0,d6
  51.     move.l d0,d7
  52.     move.l d0,a1
  53.     move.l d0,a2
  54.     move.l d0,a3
  55.     move.l d0,a4
  56.     move.l d0,a5
  57.     move.l d0,a6
  58. clrauto1    jmp $00000000
  59. instruction_movem
  60.  
  61.     movem.l d0,-(a0)
  62.  
  63.     dc.w %1100000000000000
  64.     dc.w %1110000000000000
  65.     dc.w %1111000000000000
  66.     dc.w %1111100000000000
  67.     dc.w %1111110000000000
  68.     dc.w %1111111000000000
  69.     dc.w %1111111100000000
  70.     dc.w %1111111101000000
  71.     dc.w %1111111101100000
  72.     dc.w %1111111101110000
  73.  
  74.     dc.w %1111111101111000
  75.     dc.w %1111111101111100
  76.     dc.w %1111111101111110
  77.  
  78.  
  79. ;prepclear_arbitrary  ; efface un nombre x paire dans d0 element dans a0
  80. ;; a0 = ram ou le code sera genere
  81. ;
  82. ;   lea instruction,a1
  83. ;   move.w (a1),d2
  84. ;   move.w d2,(a0)+
  85. ;   move.w d0,(a0)+    lea x(a0),a0
  86. ;
  87. ;   divu #14*4,d0
  88. ;   move.l d0,d1
  89. ;   swap d1         ; d1 = reste de 14*4
  90. ;   lea instruction_movem,a2
  91. ;
  92. ;   tst.w d1
  93. ;   beq.s .zero
  94. ;   lsr #2,d1       ; d1/4 = nombre de registre
  95. ;   beq.s .word
  96. ;   move.w (a2)+,(a0)+
  97. ;   subq #1,d1
  98.  ;  add.w d1,d1
  99.  ;  add.w d1,d1
  100.  ;   move.w (a2,d1),(a0)+
  101. ;
  102. ;
  103. ;  
  104. ;   14*4 octet
  105. ;   movem.l d0-d7/a1-a6,-(a0)
  106. ;
  107. ;
  108. ;
  109. ;   move.l a0,d0
  110. ;   move.l d0,clrauto2+2
  111. ;
  112. ;   move.w #571-1,d0
  113. ;   lea instruction,a1
  114. ;   move.l (a1)+,d1
  115. ;   move.l d1,(a0)+         ; lea 32000(a0),a0
  116. ;   move.l (a1)+,d1
  117. ;.loop  move.l d1,(a0)+
  118. ;   dbf d0,.loop
  119. ;   move.l (a1)+,d1
  120. ;   move.l d1,(a0)+
  121. ;   move.w #$4e75,(a0)+
  122. ;   rts
  123.  
  124.  
  125. clear1024a0
  126.     movem.l d0-d7/a1-a6,-(sp)
  127.     moveq #0,d0
  128.     move.l d0,d1
  129.     move.l d0,d2
  130.     move.L d0,d3
  131.     move.l d0,d4
  132.     move.l d0,d5
  133.     move.l d0,d6
  134.     move.l d0,d7
  135.     move.l d0,a1
  136.     move.l d0,a2
  137.     move.l d0,a3
  138.     move.l d0,a4
  139.     move.l d0,a5
  140.     move.l d0,a6
  141.     lea 1024(a0),a0
  142.     rept 18
  143.     movem.l d0-d7/a1-a6,-(a0)
  144.     endr
  145.     movem.l d0-d3,-(a0)
  146.     movem.l (sp)+,d0-d7/a1-a6
  147.     rts
  148.  
  149.  
  150. prepclearoneplan
  151. ; a0 = ram 2 moveq d0 + 2 rts +4000*4 move.w d0,dep(a0) = 16004 octet
  152.  
  153.     move.l a0,d0
  154.     move.l d0,clearoneplan+2
  155.     lea .instruction,a1
  156.     move.w (a1)+,d1
  157.     move.w d1,(a0)+
  158.     move.w #3999,d0
  159. .loop   move.l d1,(a0)+
  160.     addq.w #8,d1
  161.     dbf d0,.loop
  162.     move.w #$4e75,(a0)+
  163.    
  164.  
  165. .instruction
  166.     moveq #0,d0
  167.     move.w d0,$0000(a0)
  168.  
  169. clearoneplan:
  170. ; a0 = screen + 2*numero de plan de 0 a 3
  171.     jmp $000000
  172. mjj_sys_init:
  173.     movem.l     d0-d7/a0-a6,-(sp)
  174.  
  175.     clr.l       -(sp)               ; super mode
  176.     move.w      #$20,-(sp)
  177.     trap        #1
  178.     addq.l      #6,sp
  179.     move.l      d0,_mjj_stack
  180.  
  181.     move.w      #$2700,sr           ; disable ints
  182.  
  183.     lea         _mjj_res,a1
  184.  
  185.     move.b      $FFFF8260.W,(a1)+   ; store resolution
  186.     move.b      $FFFF820A.W,(a1)+   ; store frequency
  187.     move.w      $FFFF820E.W,(a1)+   ; store line width
  188.     move.b      $FFFF8265.W,(a1)+   ; store screen shift
  189.     move.b      $44F.W,(a1)+        ; store screen
  190.     move.b      $450.W,(a1)+
  191.     move.b      $451.W,(a1)+
  192.  
  193.     move.b      $FFFFFA07.W,(a1)+   ; store mfp
  194.     move.b      $FFFFFA13.W,(a1)+
  195.     move.b      $FFFFFA09.W,(a1)+
  196.     move.b      $FFFFFA15.W,(a1)+
  197.     move.b      $FFFFFA17.W,(a1)+
  198.     move.b      $FFFFFA19.W,(a1)+
  199.     move.b      $FFFFFA1B.W,(a1)+
  200.     move.b      $FFFFFA1D.W,(a1)+
  201.  
  202.     lea         $100.W,a0
  203.     REPT 16
  204.         move.l  (a0)+,(a1)+         ; store mfp vectors
  205.     ENDR
  206.  
  207.     move.l      $68.W,(a1)+         ; store hbl
  208.     move.l      $70.W,(a1)+         ; store vbl
  209.     move.w      $484.W,(a1)+        ; store keyboard
  210.  
  211.     lea         $FFFF8240.W,a0      ; store & clear palette
  212.     move.w      (a0),d0
  213.     REPT 16
  214.         move.w  (a0),(a1)+
  215.         IFEQ    DEBUG2
  216.         move.w  d0,(a0)+
  217.         ENDC
  218.     ENDR
  219.  
  220. ;   IFNE        FOR_MEGASTE
  221. ;   bsr         _megaste_init
  222. ;   ENDIF
  223.  
  224. ;   IFNE        FOR_FALCON
  225. ;   bsr         _falcon_init
  226. ;   ENDIF
  227.  
  228.     IFEQ        DEBUG2
  229.     clr.b       $FFFFFA07.W         ; disable timers
  230.     clr.b       $FFFFFA13.W
  231.     clr.b       $FFFFFA09.W
  232.     clr.b       $FFFFFA15.W
  233.     ENDC
  234.  
  235.     IFEQ        DEBUG2
  236.     move.b      #2,$FFFF820A.W      ; 50hz
  237.     clr.b       $FFFF8260.W         ; low res
  238.     ENDC
  239.  
  240.     move.l      #mjj_vbl,$70.W      ; setup vbl
  241.  
  242.     move.w      #$2300,sr           ; enable ints
  243.  
  244.     bsr         _disable_mouse      ; bybye mouse
  245.     bsr         _ikbd_flush         ; flush keyboard
  246.  
  247.     movem.l     (sp)+,d0-d7/a0-a6
  248.     rts
  249.  
  250. ;-----------------------------------------------------------------------------
  251. ; mjj_sys_fini : restore sys
  252. ;-----------------------------------------------------------------------------
  253.  
  254. mjj_sys_fini:
  255.     movem.l     d0-d7/a0-a6,-(sp)
  256.  
  257.     bsr         _ikbd_flush         ; flush keyboard
  258.  
  259.     move.w      #$2700,sr           ; disable ints
  260.  
  261.     lea         _mjj_res,a0
  262.  
  263.     move.b      (a0)+,$FFFF8260.W   ; restore resolution
  264.     move.b      (a0)+,$FFFF820A.W   ; restore frequency
  265.     move.w      (a0)+,$FFFF820E.W   ; restore line width
  266.     move.b      (a0)+,$FFFF8265.W   ; restore screen shift
  267.     move.b      (a0)+,$FFFF8201.W   ;
  268.     move.b      (a0)+,$FFFF8203.W   ; restore screen
  269.     move.b      (a0)+,$FFFF820D.W   ;
  270.  
  271.     move.b      (a0)+,$FFFFFA07.W   ; restore mfp
  272.     move.b      (a0)+,$FFFFFA13.W
  273.     move.b      (a0)+,$FFFFFA09.W
  274.     move.b      (a0)+,$FFFFFA15.W
  275.     move.b      (a0)+,$FFFFFA17.W
  276.     move.b      (a0)+,$FFFFFA19.W
  277.     move.b      (a0)+,$FFFFFA1B.W
  278.     move.b      (a0)+,$FFFFFA1D.W
  279.  
  280.     lea         $100.W,a1
  281.     REPT 16
  282.         move.l  (a0)+,(a1)+         ; restore mfp vectors
  283.     ENDR
  284.  
  285.     move.l      (a0)+,$68.W         ; restore hbl
  286.     move.l      (a0)+,$70.W         ; restore vbl
  287.     move.w      (a0)+,$484.W        ; restore keyboard
  288.  
  289.     lea         $FFFF8240.W,a1      ; restore palette
  290.     REPT 8
  291.         move.l  (a0)+,(a1)+
  292.     ENDR
  293.  
  294.     ;IFNE       FOR_MEGASTE
  295.     ;bsr            _megaste_fini
  296.     ;ENDIF
  297.  
  298.     ;IFNE       FOR_FALCON
  299.     ;bsr            _falcon_fini
  300.     ;ENDIF
  301.  
  302.     move.w      #$2300,sr           ; enable ints
  303.  
  304.     bsr         _enable_mouse       ; might be usefull
  305.  
  306.     move.l      _mjj_stack,-(sp)    ; user mode
  307.     move.w      #$20,-(sp)
  308.     trap        #1
  309.     addq.l      #6,sp
  310.  
  311.     movem.l     (sp)+,d0-d7/a0-a6
  312.     rts
  313.  
  314. ;-----------------------------------------------------------------------------
  315. _disable_mouse:
  316. ;-----------------------------------------------------------------------------
  317.     btst        #1,$FFFFFC00.W
  318.     beq.s       _disable_mouse
  319.     move.b      #$12,$FFFFFC02.W
  320.     rts
  321.  
  322. ;-----------------------------------------------------------------------------
  323. _enable_mouse:
  324. ;-----------------------------------------------------------------------------
  325.     btst        #1,$FFFFFC00.W
  326.     beq.s       _enable_mouse
  327.     move.b      #$8,$FFFFFC02.W
  328.     rts
  329.  
  330. ;-----------------------------------------------------------------------------
  331. _ikbd_flush:
  332. ;-----------------------------------------------------------------------------
  333.     bsr         waitvbl
  334.     btst.b      #0,$FFFFFC00.W
  335.     beq.s       .exit
  336.     tst.b       $FFFFFC02.W
  337.     bra.s       _ikbd_flush
  338. .exit:
  339.     rts
  340.  
  341. ;   IFNE        FOR_MEGASTE
  342. ;-----------------------------------------------------------------------------
  343. ;
  344. ;_megaste_init:
  345. ;   cmpi.w      #MCH_MEGASTE,mjj_sysmch
  346. ;   bne.s       .no
  347. ;   move.b      $FFFF8E21.W,_mjj_mste
  348. ;   clr.b       $FFFF8E21.W
  349. ;.no:
  350. ;   rts
  351. ;
  352. ;_megaste_fini:
  353. ;   cmpi.w      #MCH_MEGASTE,mjj_sysmch
  354. ;   bne.s       .no
  355. ;   move.b      _mjj_mste,$FFFF8E21.W
  356. ;.no:
  357. ;   rts
  358. ;
  359. ;-----------------------------------------------------------------------------
  360. ;   ENDC
  361.  
  362. ;   IFNE        FOR_FALCON
  363. ;-----------------------------------------------------------------------------
  364. ;
  365. ;_falcon_init:
  366. ;   cmpi.w      #MCH_FALCON30,mjj_sysmch
  367. ;   blt.s       .no
  368. ;   nop                                 ; TODO
  369. ;.no:
  370. ;   rts
  371. ;
  372. ;_falcon_fini:
  373. ;   cmpi.w      #MCH_FALCON30,mjj_sysmch
  374. ;   blt.s       .no
  375. ;   nop                                 ; TODO
  376. ;.no:
  377. ;   rts
  378. ;
  379. ;;-----------------------------------------------------------------------------
  380. ;   ENDIF
  381.  
  382. mjj_vbl:
  383. ;   jsr     _mjj_vbl_voidfn     ; fn proc;
  384. ;   jsr     _mjj_vbl_voidfn     ; zik proc
  385. ;   st      _mjj_vblflag
  386.  
  387.     addq.l #1,$466.w
  388.     rte
  389.  
  390. ;=============================================================================
  391.                 SECTION BSS
  392. ;=============================================================================
  393.  
  394.  
  395. mjj_sysmch:     ds.w    1
  396. _mjj_stack:     ds.l    1
  397.  
  398. _mjj_res:       ds.b    1           ; screen resolution
  399. _mjj_freq:      ds.b    1           ; screen frequency
  400. _mjj_linew:     ds.w    1           ; screen line width
  401. _mjj_shift:     ds.b    1           ; screen shift
  402. _mjj_scr:       ds.b    3           ; screen ptr
  403. _mjj_mfp:       ds.b    8           ; mfp setup
  404. _mjj_vec:       ds.l    16          ; mfp vectors
  405. _mjj_hbl:       ds.l    1           ; system hbl
  406. _mjj_vbl:       ds.l    1           ; system vbl
  407. _mjj_conterm:   ds.w    1           ; keyboard conf
  408. _mjj_pal:       ds.w    16          ; system palette
  409.  
  410. _mjj_mste:      ds.w    1           ; megaste cache & bus
  411.  
  412.  
  413. ;=============================================================================
  414. ;               END
  415. ;=============================================================================
  416.  
  417. rammovem    ds.b 2294
  418.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement