home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / programming / amos / lturbo / extension / new_extension_extra.s
Encoding:
Text File  |  1980-08-29  |  92.9 KB  |  4,094 lines

  1. *************************************************************************
  2. *                                    *
  3. *           AMOS 1.3 TURBO LIBRARY    v1.6            *
  4. *                                               *
  5. *    Idea's and improvements may be sent to :            *
  6. *                                    *
  7. *    MANUEL ANDRE                            *
  8. *    Prins Boudewijnlaan 155/5                    *
  9. *    2610    WILRIJK                            *
  10. *                                    *
  11. *    BELGIUM                                *
  12. *                                    *
  13. *                                    *
  14. *************************************************************************
  15.  
  16. *    ASSEMBLE AS TURBO.LIB and put it in your AMOS_SYSTEM directory.
  17. *    SYMBOLS CASE --> INDEPENDANT !!! NO DEBUG INFO !!! EXECUTABLE !!!
  18. *    Also modify your extension list, put TURBO.LIB as extension nr 8.
  19.  
  20.         OPT O+
  21.  
  22. ExtNb        equ    8-1    so this is extension nr 8 !!!
  23.  
  24.  
  25. ; Don't forget to change the INCDIR directories to your own needs...
  26. ; Do not remove the RsSet instruction!
  27.         incdir    "dF0:include/"
  28.         include "hardware/intbits.i"
  29.         include "hardware/cia.i"
  30. ;        include    "hardware/custom.i"
  31.         include    "hardware/blit.i"
  32.         include "exec/nodes.i"
  33.         include "exec/interrupts.i"
  34.         include "exec/memory.i"
  35.         include "exec/exec_lib.i"
  36. ;        incdir    "dh0:UPLOAD/EXTENSION/INCLUDES/"
  37.          Include    "_Equ.s"
  38.         RsSet    DataLong
  39.         Include "_Pointe.s"
  40.         Include "_CEqu.s"
  41.         Include    "_WEqu.s"
  42.         Include    "_LEqu.s"
  43.  
  44. ;               **CHIPS**
  45. ;
  46. BLTCPTH     equ $48
  47. BLTBPTH     equ $4C
  48. BLTAPTH     equ $50
  49. BLTDPTH     equ $54
  50. BLTCMOD     equ $60
  51. BLTBMOD     equ $62
  52. BLTAMOD     equ $64
  53. BLTDMOD     equ $66
  54. BLTAFWM     equ $44
  55. BLTALWM     equ $46
  56. BLTDDAT     equ $00
  57. BLTCDAT     equ $70
  58. BLTBDAT     equ $72
  59. BLTADAT     equ $74
  60.  
  61. ; A usefull macro to find the address of data in the extension's own 
  62. ; datazone (see later)...
  63. DLea        MACRO
  64.         move.l    ExtAdr+ExtNb*16(a5),\2
  65.         add.w    #\1-MB,\2
  66.         ENDM
  67.  
  68. ; Another macro to load the base address of the datazone...
  69. DLoad        MACRO
  70.         move.l    ExtAdr+ExtNb*16(a5),\1
  71.         ENDM
  72.  
  73.  
  74. ******************************************************************
  75. *    AMOS TURBO EXTENSION
  76. ;
  77. ; First, a pointer to the token list
  78. Start    dc.l    C_Tk-C_Off
  79. ;
  80. ; Then, a pointer to the first library function
  81.     dc.l    C_Lib-C_Tk
  82. ;
  83. ; Then to the title
  84.     dc.l    C_Title-C_Lib
  85. ;
  86. ; From title to the end of the program
  87.     dc.l    C_End-C_Title
  88. ;
  89.  
  90. ; So, a value of 0 indicates to copy if needed only,
  91. ; A value of -1 forces the copy of the first library routine...
  92.     dc.w    0    
  93.  
  94. ******************************************************************
  95. *    Offset to library
  96.  
  97.  
  98. C_Off   dc.w (L1-L0)/2,(L2-L1)/2,(L3-L2)/2,(L4-L3)/2
  99.         dc.w (L5-L4)/2,(L6-L5)/2,(L7-L6)/2,(L8-L7)/2
  100.         dc.w (L9-L8)/2,(L10-L9)/2,(L11-L10)/2,(L12-L11)/2
  101.     dc.w (L13-L12)/2,(L14-L13)/2,(L15-L14)/2,(L16-L15)/2
  102.     dc.w (L17-L16)/2,(L18-L17)/2,(L19-L18)/2,(L20-L19)/2
  103.     dc.w (L21-L20)/2,(L22-L21)/2,(L23-L22)/2,(L24-L23)/2
  104.     dc.w (L25-L24)/2,(L26-L25)/2,(L27-L26)/2,(L28-L27)/2
  105.     dc.w (L29-L28)/2,(L30-L29)/2,(L31-L30)/2,(L32-L31)/2
  106.     dc.w (L33-L32)/2,(L34-L33)/2,(L35-L34)/2,(L36-L35)/2
  107.     dc.w (L37-L36)/2,(L38-L37)/2,(L39-L38)/2,(L40-L39)/2
  108.     DC.W (L41-L40)/2,(L42-L41)/2,(L43-L42)/2,(L44-L43)/2
  109.     DC.W (L45-L44)/2,(L46-L45)/2,(L47-L46)/2,(L48-L47)/2
  110.     DC.W (L49-L48)/2,(L50-L49)/2,(L51-L50)/2,(L52-L51)/2
  111.     DC.W (L53-L52)/2,(L54-L53)/2,(L55-L54)/2,(L56-L55)/2
  112.     DC.W (L57-L56)/2,(L58-L57)/2,(L59-L58)/2,(L60-L59)/2
  113.     DC.W (L61-L60)/2,(L62-L61)/2,(L63-L62)/2,(L64-L63)/2
  114.     DC.W (L65-L64)/2,(L66-L65)/2,(L67-L66)/2,(L68-L67)/2
  115.     DC.W (L69-L68)/2,(L70-L69)/2,(L71-L70)/2,(L72-L71)/2    
  116.     DC.W (L73-L72)/2,(L74-L73)/2,(L75-L74)/2,(L76-L75)/2
  117.     DC.W (L77-L76)/2,(L78-L77)/2,(L79-L78)/2,(L80-L79)/2
  118.     DC.W (L81-L80)/2,(L82-L81)/2,(L83-L82)/2,(L84-L83)/2
  119.     DC.W (L85-L84)/2,(L86-L85)/2,(L87-L86)/2,(L88-L87)/2
  120.     DC.W (L89-L88)/2,(L90-L89)/2,(L91-L90)/2,(L92-L91)/2
  121.     DC.W (L93-L92)/2,(L94-L93)/2,(L95-L94)/2,(L96-L95)/2
  122.  
  123. ; Do not forget the LAST label!!!
  124.  
  125. ******************************************************************
  126. *    TOKEN TABLE
  127.  
  128.  
  129. ; The next two lines needs to be unchanged...
  130. C_Tk:    dc.w     1,0
  131.     dc.b     $80,-1
  132.     dc.w    L_MULTI_YES,-1
  133.     dc.b    "multi ye","s"+$80,"I",-1
  134.     dc.w    L_MULTI_NO,-1
  135.     dc.b    "multi n","o"+$80,"I",-1
  136.     dc.w    -1,L_LSL_B
  137.     dc.b    "lsl.","b"+$80,"00,0",-1
  138.     dc.w    -1,L_LSL_W
  139.     dc.b    "lsl.","w"+$80,"00,0",-1
  140.     dc.w    -1,L_LSL_L
  141.     dc.b    "lsl.","l"+$80,"00,0",-1
  142.     dc.w    -1,L_LSR_B
  143.     dc.b    "lsr.","b"+$80,"00,0",-1
  144.     dc.w    -1,L_LSR_W
  145.     dc.b    "lsr.","w"+$80,"00,0",-1
  146.     dc.w    -1,L_LSR_L
  147.     dc.b    "lsr.","l"+$80,"00,0",-1
  148.     dc.w    -1,L_SWAP_VAL
  149.     dc.b    "l swa","p"+$80,"00",-1
  150.     dc.w    -1,L_TEST_B
  151.     dc.b    "test.","b"+$80,"00,0",-1
  152.     dc.w    -1,L_TEST_W
  153.     dc.b    "test.","w"+$80,"00,0",-1
  154.     dc.w    L_VBL_WAIT,-1
  155.     dc.b    "vbl wai","t"+$80,"I0",-1
  156.     dc.w    L_RESERVE_CHECK,-1
  157.     dc.b    "reserve chec","k"+$80,"I0",-1
  158.     dc.w    L_RELEASE_CHECK,-1
  159.     dc.b    "check eras","e"+$80,"I",-1
  160.     dc.w    -1,L_CHECK_ZONE
  161.     dc.b    "chec","k"+$80,"00t0,0,0",-1
  162.     dc.w    L_CHECK_SET,-1
  163.     dc.b    "set chec","k"+$80,"I0,0,0t0,0",-1
  164.     dc.w    L_CHECK_DISCARD,-1
  165.     dc.b    "reset chec","k"+$80,"I0",-1
  166.     dc.w    -1,L_HIT_ZONE_SPRITE
  167.     dc.b    "hit spr zon","e"+$80,"00,0,0",-1
  168.     dc.w    -1,L_HIT_ZONE_BOB
  169.     dc.b    "hit bob zon","e"+$80,"00,0,0",-1
  170.     dc.w    -1,L_CHECK_SPR
  171.     dc.b    "hit spr chec","k"+$80,"00t0,0,0,0",-1
  172.     dc.w    -1,L_RAW_KEY
  173.     dc.b    "raw ke","y"+$80,"00",-1
  174.     dc.w    L_R_POS,-1
  175.     dc.b    "r mov","e"+$80,"I0,0",-1
  176.     dc.w    L_R_LINE,-1
  177.     dc.b    "r dra","w"+$80,"I0,0",-1
  178.     dc.w    L_R_BOX,-1
  179.     dc.b    "r bo","x"+$80,"I0,0",-1
  180.     dc.w    L_R_HOME,-1
  181.     dc.b    "r hom","e"+$80,"I0,0",-1
  182.     dc.w    L_R_BAR,-1
  183.     dc.b    "r ba","r"+$80,"I0,0",-1
  184.     dc.w    L_DEF_OBJ_CH,-1
  185.     dc.b    "reserve object chi","p"+$80,"I0,0",-1
  186.     dc.w    L_DEF_OBJ_FA,-1
  187.     dc.b    "reserve object fas","t"+$80,"I0,0",-1
  188.     dc.w    L_DEF_OBJ_DRAW,-1
  189.     dc.b    "define dra","w"+$80,"I0,0t0,0",-1
  190.     dc.w    L_DEF_OBJ_MOVE,-1
  191.     dc.b    "define mov","e"+$80,"I0,0t0,0",-1
  192.     dc.w    L_DEF_OBJ_STOP,-1
  193.     dc.b    "define sto","p"+$80,"I0,0",-1
  194.     dc.w    L_DEF_OBJ_ATT,-1
  195.     dc.b    "define att","r"+$80,"I0,0t0,0",-1
  196.     dc.w    L_OBJECT_DRAW,-1
  197.     dc.b    "object dra","w"+$80,"I0",-1
  198.     dc.w    L_R_OBJECT_DRAW,-1
  199.     dc.b    "r object dra","w"+$80,"I0,0,0",-1
  200.     dc.w    L_OBJ_MAG_DRAW,-1
  201.     dc.b    "object mag dra","w"+$80,"I0,0",-1
  202.     dc.w    L_R_OBJ_MAG_DRA,-1
  203.     dc.b    "r object mag dra","w"+$80,"I0,0,0,0",-1
  204.     dc.w    L_DISCARD_OBJECT,-1
  205.     dc.b    "object eras","e"+$80,"I0",-1
  206.     dc.w    L_LINE_3D,-1
  207.     dc.b    "line 3","d"+$80,"I0,0,0t0,0,0",-1
  208.     dc.w    L_EYE_3D,-1
  209.     dc.b    "eye 3","d"+$80,"I0,0",-1
  210.     dc.w    L_OBJECT_SAVE,-1
  211.     dc.b    "object sav","e"+$80,"I2,0t0",-1
  212.     dc.w    L_OBJECT_LOAD_CHIP,-1
  213.     dc.b    "object load chi","p"+$80,"I2,0",-1
  214.     dc.w    L_BLIT_STORE,-1
  215.     dc.b    "blit store lef","t"+$80,"I0,0,0,0t0,0,0",-1
  216.     dc.w    L_MULTI_BLIT,-1
  217.     dc.b    "multi bli","t"+$80,"I0t0",-1
  218.     dc.w    L_ERASE_BLIT,-1
  219.     dc.b    "blit eras","e"+$80,"I0",-1
  220.     dc.w    L_BLIT_SPEED,-1
  221.     dc.b    "blit spee","d"+$80,"I0,0",-1
  222.     dc.w    L_BLIT_LEFT,-1
  223.     dc.b    "blit lef","t"+$80,"I0,0,0t0,0,0",-1
  224.     dc.w    L_FAST_PLOT,-1
  225.     dc.b    "f plo","t"+$80,"I0,0,0",-1
  226.     dc.w    L_BLIT_CLEAR,-1
  227.     dc.b    "blit clea","r"+$80,"I0",-1
  228.     dc.w    -1,L_LEFT_CLICK
  229.     dc.b    "left clic","k"+$80,"0",-1
  230.     dc.w    L_RES_STARS,-1
  231.     dc.b    "reserve star","s"+$80,"I0",-1
  232.     dc.w    L_DEF_STAR,-1
  233.     dc.b    "define sta","r"+$80,"I0,0,0,0,0",-1
  234.     dc.w    L_DRAW_STARS,-1
  235.     dc.b    "display star","s"+$80,"I",-1
  236.     dc.w    L_ERASE_STARS,-1
  237.     dc.b    "stars eras","e"+$80,"I",-1
  238.     dc.w    L_COMPUTE_STARS,-1
  239.     dc.b    "stars comput","e"+$80,"I0t0",-1
  240.     dc.w    L_F_STARS,-1
  241.     dc.b    "f star","s"+$80,"I",-1
  242.     dc.w    L_STARS_SPEED,-1
  243.     dc.b    "stars spee","d"+$80,"I0t0,0,0",-1
  244.     dc.w    L_CLIP_STARS,-1
  245.     dc.b    "stars cli","p"+$80,"I0,0,0,0",-1
  246.     dc.w    -1,L_FAST_POINT
  247.     dc.b    "f poin","t"+$80,"00,0",-1
  248.     dc.w    L_F_CIRCLE,-1
  249.     dc.b    "f circl","e"+$80,"I0,0,0,0",-1
  250.     dc.w    -1,L_FAST_SQR
  251.     dc.b    "f sq","r"+$80,"00",-1
  252.     dc.w    L_STARS_INT_ON,-1
  253.     dc.b    "stars int o","n"+$80,"I0",-1
  254.     dc.w    L_STARS_INT_OFF,-1
  255.     dc.b    "stars int of","f"+$80,"I",-1
  256.     dc.w    L_BLIT_INT_ON,-1
  257.     dc.b    "blit int o","n"+$80,"I0t0",-1
  258.     dc.w    L_BLIT_INT_OFF,-1
  259.     dc.b    "blit int of","f"+$80,"I",-1
  260.     dc.w    L_FAST_DRAW,-1
  261.     dc.b    "!f dra","w"+$80,"I0,0t0,0",-2
  262.     dc.w    L_FAST_DRAW_TO,-1
  263.     dc.b    $80,"I0,0",-1
  264.     dc.w    L_SET_OBJECT_LIMIT,-1
  265.     dc.b    "object limi","t"+$80,"I0",-1
  266.     dc.w    L_SET_PLANES,-1
  267.     dc.b    "set plane","s"+$80,"I0",-1
  268.     dc.w    L_PLANE_OFFSET,-1
  269.     dc.b    "plane offse","t"+$80,"I0,0,0,0",-1
  270.     dc.w    L_PLANE_SWAP,-1
  271.     dc.b    "plane swa","p"+$80,"I0,0,0",-1
  272.     dc.w    L_PLANE_SH_UP,-1
  273.     dc.b    "plane shift u","p"+$80,"I0,0t0",-1
  274.     dc.w    L_PLANE_SH_DOWN,-1
  275.     dc.b    "plane shift dow","n"+$80,"I0,0t0",-1
  276.     dc.w    L_PLANE_UPDATE,-1
  277.     dc.b    "plane updat","e"+$80,"I0",-1
  278.     dc.w    F_PASTE_ICON,-1
  279.     dc.b    "f paste ico","n"+$80,"I0,0,0",-1
  280.     dc.w    F_32BIT_ICON,-1
  281.     dc.b    "f 32 ico","n"+$80,"I0,0,0",-1
  282.     dc.w    F_16BIT_ICON,-1
  283.     dc.b    "f 16 ico","n"+$80,"I0,0,0",-1
  284.     dc.w    F_PROC_16ICON,-1
  285.     dc.b    "f 16proc ico","n"+$80,"I0,0,0",-1
  286.     dc.w    F_PROC_32ICON,-1
  287.     dc.b    "f 32proc ico","n"+$80,"I0,0,0",-1
  288.     dc.w    -1,L_ICON_X
  289.     dc.b    "x ico","n"+$80,"00",-1
  290.     dc.w    -1,L_ICON_Y
  291.     dc.b    "y ico","n"+$80,"00",-1
  292.     dc.w    -1,L_ICON_PLANES
  293.     dc.b    "planes ico","n"+$80,"00",-1
  294.     dc.w    -1,L_CPU_INFO
  295.     dc.b    "cpu inf","o"+$80,"0",-1
  296.     dc.w    -1,L_MATH_INFO
  297.     dc.b    "math inf","o"+$80,"0",-1
  298.     dc.w     0    
  299.  
  300. iii        equ    0
  301.  
  302. C_Lib
  303. ******************************************************************
  304. *        COLD START
  305. *
  306.  
  307.  
  308. L0    movem.l    a3-a6,-(sp)
  309.  
  310. ;
  311. ; Here I store the address of the extension data zone in the special area
  312.     lea    MB(pc),a3
  313.     move.l    a3,ExtAdr+ExtNb*16(a5)
  314. ;
  315. ; Here, I store the address of the routine called by DEFAULT, or RUN
  316.     lea    Default(pc),a0
  317.     move.l    a0,ExtAdr+ExtNb*16+4(a5)
  318. ;
  319. ; Here, the address of the END routine,
  320.     lea    End(pc),a0
  321.     move.l    a0,ExtAdr+ExtNb*16+8(a5)
  322.     movem.l    (sp)+,a3-a6
  323.     moveq    #ExtNb,d0        * NO ERRORS
  324.     rts
  325.  
  326. ******* SCREEN RESET
  327.  
  328. Default    RTS
  329.  
  330. ******* QUIT
  331.  
  332. End    RTS
  333.  
  334.  
  335. ; Now follows a big chunk of data. Better disable the RBsr system...
  336.  
  337.     RDATA
  338.  
  339. *********************************************************************
  340. *         extension data zone
  341. MB:    
  342. ZONE_DEFS        DC.L    0
  343. RESERVED_BYTES        DC.L    0
  344. MAX_CHECK        DC.W    0
  345. OBJECT_LIMIT        DC.W    0
  346. OBJECT_ADRES_BASE    DC.L    0
  347. OBJECT_POINT_BASE    DC.L    0
  348. OBJECT_DISKNAME        DS.B    80    MAX LENGTE VAN BETANDSNAAM
  349. OBJECT_DISK_HEADER    DC.B    "OBJE"    HEADER DEFINITIE VAN OBJECT FILE
  350. OBJECT_DISK_COUNT    DC.W    0    HOEVEEL OBJECTEN ZIJN ER ?
  351. OBJECT_READ_BUFFER    DS.B    8    8 BYTES OF READ BUFFER
  352. X_VIEW            DC.W    160
  353. Y_VIEW            DC.W    100
  354. BLIT_DEFS        DS.L    96
  355. STARS_ADRES        DC.L    0
  356. STARS_COUNT        DC.W    0
  357. OFFSET_COUNT        DC.W    0
  358. OFFSET_ADRES        DC.L    0
  359. COMPUTE_TO        DC.W    0
  360. STARS_CLIP        DS.W    4    CLIPPING THE STARS
  361. STARS_INT_SCREEN    DC.L    0 
  362. INT_STARS_SERVER    DC.L    0
  363. INT_BLIT_SERVER        DC.L    0
  364. INT_BLIT_FROM        DC.W    0
  365. INT_BLIT_TO        DC.W    0
  366. INT_STARS_ON        DC.W    0
  367. STARS_INT_CLEAR        DC.W    0
  368. INT_BLIT_ON        DC.W    0
  369. INT_STARS_NAME        DC.B    "STARS_INT",0
  370. INT_BLIT_NAME        DC.B    "BLITTER_I",0
  371.             EVEN
  372. X1            DC.W    0
  373. Y1            DC.W    0
  374. X2            DC.W    0
  375. Y2            DC.W    0
  376. PLANE_OFFSETS        DS.L    48    6 OFFSETS * 8 SCREENS
  377. ECLOGIC_SAVE        DS.L    6    \
  378. ECPHYSIC_SAVE        DS.L    6    |-> temporary storage-> Plane Update
  379. ECCURRENT_SAVE        DS.L    6    /
  380.             EVEN
  381. **********************************************************************
  382. ; Please leave 1 or two labels free for future extension. You never
  383. ; know!
  384. L1
  385.  
  386. ; Now follow all the routines.
  387.  
  388.  
  389. L_MULTI_YES        EQU    2
  390. L2    MOVE.L    A6,A2
  391.     CALLEXEC Permit            ENABLE MULTITASKING
  392.     MOVE.L    A2,A6
  393.     RTS
  394.  
  395. L_MULTI_NO        EQU    3
  396. L3    MOVE.L    A6,A2
  397.     CALLEXEC Forbid            DISABLE MULTITASKING
  398.     MOVE.L    A2,A6
  399.     RTS
  400.  
  401. L_LSL_B            EQU    4
  402. L4    MOVE.L    (A3)+,D0        SHIFT COUNT
  403.     MOVE.L    (A3)+,D3        VALUE TO BE SHIFTED
  404.     LSL.B    D0,D3            DO IT, AND RETURN VALUE
  405.     MOVEQ    #0,D2            THE RETURNED VALUE IS AN INTEGER
  406.     RTS
  407.  
  408. L_LSL_W            EQU    5
  409. L5    MOVE.L    (A3)+,D0        SHIFT COUNT
  410.     MOVE.L    (A3)+,D3        VALUE TO BE SHIFTED
  411.     LSL.W    D0,D3            DO IT, AND RETURN VALUE
  412.     MOVEQ    #0,D2            THE RETURNED VALUE IS AN INTEGER
  413.     RTS
  414.  
  415. L_LSL_L            EQU    6
  416. L6    MOVE.L    (A3)+,D0        SHIFT COUNT
  417.     MOVE.L    (A3)+,D3        VALUE TO BE SHIFTED
  418.     LSL.L    D0,D3            DO IT, AND RETURN VALUE
  419.     MOVEQ    #0,D2            THE RETURNED VALUE IS AN INTEGER
  420.     RTS
  421.  
  422. L_LSR_B            EQU    7
  423. L7    MOVE.L    (A3)+,D0        SHIFT COUNT
  424.     MOVE.L    (A3)+,D3        VALUE TO BE SHIFTED
  425.     LSR.B    D0,D3            DO IT, AND RETURN VALUE
  426.     MOVEQ    #0,D2            THE RETURNED VALUE IS AN INTEGER
  427.     RTS
  428.  
  429. L_LSR_W            EQU    8
  430. L8    MOVE.L    (A3)+,D0        SHIFT COUNT
  431.     MOVE.L    (A3)+,D3        VALUE TO BE SHIFTED
  432.     LSR.W    D0,D3            DO IT, AND RETURN VALUE
  433.     MOVEQ    #0,D2            THE RETURNED VALUE IS AN INTEGER
  434.     RTS
  435.  
  436. L_LSR_L            EQU    9
  437. L9    MOVE.L    (A3)+,D0        SHIFT COUNT
  438.     MOVE.L    (A3)+,D3        VALUE TO BE SHIFTED
  439.     LSR.L    D0,D3            DO IT, AND RETURN VALUE
  440.     MOVEQ    #0,D2            THE RETURNED VALUE IS AN INTEGER
  441.     RTS
  442.  
  443. L_SWAP_VAL        EQU    10
  444. L10    MOVE.L    (A3)+,D3        VALUE TO BE SWAPPED
  445.     SWAP     D3            DO IT, AND RETURN VALUE
  446.     MOVEQ    #0,D2            THE RETURNED VALUE IS AN INTEGER
  447.     RTS
  448.  
  449. L_TEST_B        EQU    11
  450. L11    MOVEQ    #0,D3            SET FALSE
  451.     MOVE.L    (A3)+,D0        TEST VALUE
  452.     MOVE.L    (A3)+,D1        VALUE TO BE TESTED
  453.     CMP.B    D0,D1            EQUAL ?
  454.     BNE.S    NEE_B
  455.     MOVEQ    #-1,D3            OK, IS EQUAL. RETURN TRUE
  456. NEE_B    MOVEQ    #0,D2            THE RETURNED VALUE IS AN INTEGER
  457.     RTS
  458.  
  459. L_TEST_W        EQU    12
  460. L12    MOVEQ    #0,D3            SET FALSE
  461.     MOVE.L    (A3)+,D0        TEST VALUE
  462.     MOVE.L    (A3)+,D1        VALUE TO BE TESTED
  463.     CMP.W    D0,D1            EQUAL ?
  464.     BNE.S    NEE_W
  465.     MOVEQ    #-1,D3            OK, IS EQUAL. RETURN TRUE
  466. NEE_W    MOVEQ    #0,D2            THE RETURNED VALUE IS AN INTEGER
  467.     RTS
  468.  
  469. L_VBL_WAIT        EQU    13
  470. L13    MOVE.L    (A3)+,D0        LINE TO WAIT FOR
  471. VERTIC    MOVE.B    $DFF006,D1        ACTUAL POSITION OF RASTER BEAM
  472.     CMP.B    D0,D1            EQUAL ?
  473.     BNE.S    VERTIC
  474.     RTS
  475.  
  476. L_RESERVE_CHECK        EQU    14
  477. L14        MOVE.L    (A3)+,D0         HOW MANY CHECK ZONES
  478.         CMP.L    #32001,D0         MORE THAN 32000 ?
  479.         Rbge    L_IFonc
  480.         MOVE.W    D0,D5
  481.         Dload    A2
  482.         CMP.W    #0,MAX_CHECK-MB(A2)  ANY ZONES RESERVED ?
  483.         BNE.S    IS_RESERVED         DISPLAY ERROR MESSAGE    
  484.         MULU    #10,D0             10 BYTES FOR EVERY CHECK ZONE
  485.         MOVE.L    D0,RESERVED_BYTES-MB(A2)  STORE THE RESERVED AMOUNT
  486.         MOVE.L    #MEMF_CHIP+MEMF_CLEAR,D1
  487.         MOVE.L    A6,-(SP)    
  488.         CALLEXEC AllocMem        RESERVE THE MEMORY (CHIP+CLEARED)
  489.         MOVE.L    (SP)+,A6
  490.         Rbeq    OUT_OF_MEM
  491.         MOVE.L    D0,ZONE_DEFS-MB(A2) STORE THE ADRES OF THE CHECK DEFS
  492.         MOVE.W    D5,MAX_CHECK-MB(A2) STORE THE AMOUNT OF CHECK ZONES
  493.         RTS
  494. IS_RESERVED    MOVEQ    #0,D0            CHECK ALLREADY RESERVED
  495.         Rbra    L_CUSTOM
  496.  
  497. L_RELEASE_CHECK        EQU    15
  498. L15        Dload    A2
  499.         CMP.W    #0,MAX_CHECK-MB(A2)   CHECK ZONES TO BE CLEARED
  500.         BEQ.S    NO_RELEASE          NO ! ERROR !
  501.         MOVE.L    ZONE_DEFS-MB(A2),A1   GET THE ADRESS OF THE MEMORY
  502.         MOVE.W    #0,MAX_CHECK-MB(A2)   CLEAR THE AMOUNT OF CHECK ZONES
  503.         MOVE.L    RESERVED_BYTES-MB(A2),D0   HOW MANY BYTES RESERVED ?
  504.         MOVE.L    A6,-(SP)
  505.         CALLEXEC FreeMem          FREE THE MEMORY USED
  506.         MOVE.L    (SP)+,A6
  507.         RTS
  508. NO_RELEASE    MOVEQ    #1,D0              CHECK ALLREADY RELEASED !
  509.         Rbra    L_CUSTOM
  510.         RTS
  511.  
  512. L_CHECK_ZONE        EQU    16
  513. L16        MOVEM.L    (A3)+,D4-D7        GET PARAMETERS
  514.         Dload    A1
  515.         CMP.W    #0,MAX_CHECK-MB(A1)    ANY ZONES RESERVED ?
  516.         BEQ.S    DONT_CHECK_ZONE        NO ZONES RESERVED !
  517.         CMP.W    MAX_CHECK-MB(A1),D6
  518.         BGT.S    ERROR_CHECK        END  > MAX CHECK ZONES
  519.         CMP.W    #1,D7
  520.         BLT.S    ERROR_CHECK        START < 1
  521.         SUB.W    D7,D6
  522.         BMI.S    ERROR_CHECK        END < START
  523.         SUBQ    #1,D7
  524.         MOVE.W    D7,D3
  525.         LSL.W    #3,D7            D7 * 10 BUT FASTER !
  526.         ADD.W    D3,D7
  527.         ADD.W     D3,D7
  528.         MOVE.L    ZONE_DEFS-MB(A1),A0
  529.         ADD.L    D7,A0
  530. CHECK_LOOP    MOVE.W    (A0)+,D7        ZONE
  531.         BMI.S    NO_CHECK1
  532.         MOVEM.W    (A0)+,D0-D3    X1,X2,Y1,Y2
  533.         CMP.W    D1,D5        \
  534.         BGT.S    NO_CHECK    |
  535.         CMP.W    D0,D5        |
  536.         BLT.S    NO_CHECK    |
  537.         CMP.W    D3,D4        |-> CHECK IT !
  538.         BGT.S    NO_CHECK    |
  539.         CMP.W    D2,D4        |
  540.         BLT.S    NO_CHECK    /
  541.         MOVE.W    D7,D3        RETURN ZONE NUMBER
  542.         MOVEQ    #0,D2        VALUE RETURNED IS AN INTEGER
  543.         RTS
  544. NO_CHECK1    ADDQ.L     #8,A0
  545. NO_CHECK    DBRA    D6,CHECK_LOOP
  546.         MOVEQ    #0,D3        NO ZONE FOUND
  547.         MOVEQ    #0,D2        VALUE RETURNED IS AN INTEGER
  548.         RTS
  549. ERROR_CHECK    MOVEQ    #23,D0
  550.         Rjmp    L_Error
  551. DONT_CHECK_ZONE    MOVEQ    #1,D0
  552.         Rbra    L_Custom
  553.  
  554. L_CHECK_SET        EQU    17
  555. L17        MOVE.L    (A3)+,D4    Y2
  556.         Rbmi    L_IFonc
  557.         MOVE.L    (A3)+,D2    X2
  558.         Rbmi    L_IFonc
  559.         MOVE.L    (A3)+,D3    Y1
  560.         Rbmi    L_IFonc
  561.         MOVE.L    (A3)+,D1    X1
  562.         Rbmi    L_IFonc
  563.         MOVE.L    (A3)+,D0    ZONE
  564.         Rble    L_IFonc
  565.         Dload    A1
  566.         CMP.W    MAX_CHECK-MB(A1),D0    ZONE TO BE INSTALLED >
  567.         Rbhi    L_IFonc            MAX AMOUNT OF ZONES ?
  568.         MOVE.W    D0,D5
  569.         SUBQ    #1,D0
  570.         MOVE.W    D0,D6
  571.         LSL.W    #3,D0        D0 * 10 BUT FASTER
  572.         ADD.W    D6,D0
  573.         ADD.W     D6,D0
  574.         MOVE.L    ZONE_DEFS-MB(A1),A0
  575.         ADD.L    D0,A0
  576.         MOVE.W    D5,D0
  577.         MOVEM.W    D0-D4,(A0)    STORE X1,Y1,X2,Y1
  578.         RTS
  579.  
  580. L_CHECK_DISCARD        EQU    18
  581. L18        MOVE.L    (A3)+,D0
  582.         Dload    A1
  583.         CMP.W    #0,MAX_CHECK-MB(A1)    ANY ZONES RESERVED ?
  584.         BEQ.S    NOT_RESERVED        NO ! DISPLAY MESSAGE !
  585.         SUBQ    #1,D0
  586.         Rbmi    L_IFonc
  587.         CMP.W    MAX_CHECK-MB(A1),D0    ZONE TO BE DISCARDED >
  588.         Rbhi    L_IFonc            MAX AMOUNT OF ZONES ?
  589.         MOVE.W    D0,D1
  590.         LSL.W    #3,D0            D0 * 10 BUT FASTER
  591.         ADD.W    D1,D0
  592.         ADD.W    D1,D0
  593.         MOVE.L    ZONE_DEFS-MB(A1),A0
  594.         MOVE.W    #-1,(A0,D0.L)        DISCARD THE ZONE
  595.         RTS
  596. NOT_RESERVED    MOVEQ    #1,D0
  597.         Rbra    L_Custom
  598.  
  599. L_HIT_ZONE_SPRITE    EQU    19
  600. L19        MOVE.L    (A3)+,D1    SPRITE NUMBER
  601.         SyCall    XYSp        GET X (D1) AND Y (D2) COORDINATES 
  602.         ADD.L    (A3)+,D2    Y COOR TO BE CHECKED
  603.         ADD.L    (A3)+,D1    X COOR TO BE CHECKED
  604.         MOVEQ    #0,D3
  605.         MOVEQ    #8,D5
  606.         SyCall    ZoHd        CHECK THE ZONES
  607.         MOVE.W    D1,D3        RETURN ZONE
  608.         MOVEQ    #0,D2        VALUE RETURNED IS AN INTEGER
  609.         RTS
  610.  
  611. L_HIT_ZONE_BOB        EQU     20
  612. L20        MOVE.L    (A3)+,D1    BOB NUMBER
  613.         SyCall    XYBob        GET X (D1) AND Y (D2) COORDINATES
  614.         ADD.L    (A3)+,D2    Y COOR TO BE CHECKED
  615.         ADD.L    (A3)+,D1    X COOR TO BE CHECKED
  616.         MOVEQ    #0,D3
  617.         SyCall    ZoGr        CHECK THE ZONES
  618.         MOVE.W    D1,D3        RETURN ZONE
  619.         MOVEQ    #0,D2        VALUE RETURNED IS AN INTEGER
  620.         RTS
  621.  
  622. L_CHECK_SPR        EQU    21
  623. L21        Dload    A1
  624.         CMP.W    #0,MAX_CHECK-MB(A1)
  625.         BEQ.S    DONT_CHECK_SPR
  626.         MOVE.L    (A3)+,D1    Get Sprite Number
  627.         SyCall    XYSp        GET X (D1) AND Y (D2) COORDINATES
  628.         ADD.L    (A3)+,D2    Y COOR TO BE CHECKED
  629.         ADD.L    (A3)+,D1    X COOR TO BE CHECKED
  630.         MOVEQ    #0,D3
  631.         SyCall    XyScr        CONVERT FORM HARDWARE COORDINATES
  632.         EXG    D2,D4        TO SCREEN COORDINATES
  633.         EXG    D1,D5        
  634.         MOVE.L    (A3)+,D6        GET PARAMETERS
  635.         MOVE.L    (A3)+,D7
  636.         CMP.W    MAX_CHECK-MB(A1),D6    END > AMOUNT RESERVED
  637.         Rbhi    L_IFonc
  638.         CMP.W    #1,D7
  639.         Rblt    L_IFonc            START < 1
  640.         SUB.W    D7,D6
  641.         Rbmi    L_IFonc
  642.         SUBQ    #1,D7
  643.         MOVE.W    D7,D3
  644.         LSL.W    #3,D7            D7 * 10 BUT FASTER
  645.         ADD.W    D3,D7
  646.         ADD.W     D3,D7
  647.         MOVE.L    ZONE_DEFS-MB(A1),A0
  648.         ADD.L    D7,A0
  649. CHECK_LOOP_SPR    MOVE.W    (A0)+,D7        ZONE
  650.         BMI.S    NO_CHECK_SPR1        ZONE IS DISCARDED
  651.         MOVEM.W    (A0)+,D0-D3        X1,X2,Y1,Y2
  652.         CMP.W    D1,D5
  653.         BGT.S    NO_CHECK_SPR
  654.         CMP.W    D0,D5
  655.         BLT.S    NO_CHECK_SPR
  656.         CMP.W    D3,D4
  657.         BGT.S    NO_CHECK_SPR
  658.         CMP.W    D2,D4
  659.         BLT.S    NO_CHECK_SPR
  660.         MOVE.W    D7,D3            RETURN ZONE NUMBER
  661.         MOVEQ    #0,D2            VALUE RETUNED IS AN INTEGER
  662.         RTS
  663. NO_CHECK_SPR1    ADDQ.L     #8,A0
  664. NO_CHECK_SPR    DBRA    D6,CHECK_LOOP_SPR
  665.         MOVEQ    #0,D3            NO ZONE FOUND
  666.         MOVEQ    #0,D2            VALUE RETURNED IS AN INTEGER
  667.         RTS
  668. DONT_CHECK_SPR    MOVEQ    #1,D0
  669.         Rbra    L_Custom
  670.  
  671. L_RAW_KEY    EQU    22
  672. L22        MOVE.L    (A3)+,D0
  673.         LEA    $BFE001,A0
  674.         MOVE.B    $C00(A0),D1        GET KEY
  675.         MOVEQ    #$0,D2
  676.         MOVE.B    D2,$E00(A0)        CLEAR BUFFER
  677.         MOVE.B    D2,$E00(A0)        CLEAR BUFFER
  678.         ORI.B    #$40,$E00(A0)
  679.         NOT.B    D1
  680.         ROR.B    #1,D1
  681.         MOVEQ    #$64,D7
  682. KEYW:
  683.         DBF    D7,KEYW
  684.         ANDI.B    #$BF,$E00(A0)
  685.         ADD.W    #256,D1
  686.         EXT.W    D1
  687.         SUB.W    D0,D1
  688.         BEQ.S    JUISTE_TOETS
  689.         MOVEQ    #0,D3
  690.         MOVEQ    #0,D2
  691.         RTS
  692. JUISTE_TOETS    MOVEQ    #-1,D3
  693.         MOVEQ    #0,D2
  694.         RTS
  695.         
  696. L_R_POS        EQU    23
  697. L23        MOVE.L    T_Rastport(A5),A1
  698.         MOVE.L    (A3)+,D1    DY COORD
  699.         MOVE.L    (A3)+,D0    DX COORD
  700.         ADD.W    D0,36(A1)    NEW X POS
  701.         ADD.W    D1,38(A1)    NEW Y POS
  702.         RTS
  703.  
  704. L_R_LINE    EQU    24
  705. L24        MOVE.L    A6,A2
  706.         MOVE.L    T_Rastport(A5),A1
  707.         MOVE.L    T_GfxBase(a5),A6
  708.         MOVE.L    (A3)+,D1    DY 
  709.         MOVE.L    (A3)+,D0    DX
  710.         MOVE.W    36(A1),D2    GET ACTUAL X POSITION OF GFX CURSOR
  711.         MOVE.W    38(A1),D3    GET ACTUAL Y POSITION OF GFX CURSOR
  712.         ADD.W    D2,D0        SET X COORD TO BE DRAWN TO
  713.         ADD.W    D3,D1        SET Y COORD TO BE DRAWN TO
  714.         JSR    -246(A6)    DRAW THE LINE
  715.         MOVE.L    A2,A6
  716.         RTS    
  717.  
  718. L_R_BOX        EQU    25
  719. L25        MOVE.L    A6,A2
  720.         MOVE.L    T_Rastport(A5),A1
  721.         MOVE.L    T_GfxBase(A5),A6
  722.         MOVE.L    (A3)+,D7    DY
  723.         MOVE.L    (A3)+,D6    DX
  724.         MOVE.W    36(A1),D4    GET ACTUAL X POSITION OF GFX CURSOR
  725.         MOVE.W    38(A1),D5    GET ACTUAL Y POSITION OF GFX CURSOR
  726.         ADD.W    D6,D4        ACTUAL X + DX
  727.         MOVE.W    D4,D0        SET X COORD TO BE DRAWN TO
  728.         MOVE.W    D5,D1        SET Y COORD TO BE DRAWN TO (ACTUAL Y)
  729.         JSR    -246(A6)    DRAW THE LINE
  730.         MOVE.W    D4,D0        SET X COORD TO BE DRAWN TO (ACTUAL X)        
  731.         ADD.W    D7,D5        ACTUAL Y + DY
  732.         MOVE.W    D5,D1        SET Y COORD TO BE DRAWN TO
  733.         JSR    -246(A6)    DRAW THE LINE
  734.         SUB.W    D6,D4        ACTUAL X - DX
  735.         MOVE.W    D4,D0        SET X COORD TO BE DRAWN TO
  736.         MOVE.W    D5,D1        SET Y COORD TO BE DRAWN TO (Y + DY)
  737.         JSR    -246(A6)    DRAW THE LINE
  738.         SUB.W    D7,D5        Y - DY = ACTUAL Y
  739.         MOVE.W    D5,D1        SET Y COORD TO BE DRAWN TO
  740.         MOVE.W    D4,D0        SET X COORD TO BE DRAWN TO (X - DX)
  741.         JSR    -246(A6)    DRAW THE LINE
  742.         MOVE.L    A2,A6
  743.         RTS
  744.  
  745. L_R_HOME    EQU    26
  746. L26        MOVE.L    T_Rastport(A5),A1
  747.         MOVE.L    (A3)+,D1    GET Y
  748.         MOVE.L    (A3)+,D0    GET X
  749.         MOVE.W    D0,36(A1)    SET X POSITION OF GFX CURSOR
  750.         MOVE.W    D1,38(A1)    SET Y POSITION OF GFX CURSOR
  751.         RTS
  752.  
  753. L_R_BAR        EQU    27
  754. L27        MOVE.L    A6,A2
  755.         MOVE.L    T_Rastport(A5),A1
  756.         MOVE.L    T_GfxBase(A5),A6
  757.         MOVE.W    36(A1),D0    GET ACTUAL X POSITION OF GFX CURSOR
  758.         MOVE.W    38(A1),D1    GET ACTUAL Y POSITION OF GFX CURSOR
  759.         MOVE.L    (A3)+,D3    GET DY
  760.         Rbmi    L_IFonc        Y1 < 0 ERROR !
  761.         MOVE.L    (A3)+,D2    GET DX
  762.         Rbmi    L_IFonc        X1 < 0 ERROR !
  763.         ADD.W    D0,D2        X1 = ACTUAL X + DX
  764.         ADD.W    D1,D3        Y1 = ACTUAL Y +    DY
  765.         JSR    -306(A6)    RECTFILL
  766.         MOVE.L    A2,A6
  767.         RTS
  768.         
  769. L_DEF_OBJ_CH    EQU    28
  770. L28        MOVE.L    (A3)+,D0        AMOUNT OF VECTORS
  771.         Rble    L_IFonc            <= 0 ?  ERROR
  772.         MOVE.L    D0,D6            SAVE AMOUNT OF VECTORS
  773.         MOVE.L    (A3)+,D2        OBJECT NR
  774.         DLOAD    A2
  775.         CMP.W    OBJECT_LIMIT-MB(A2),D2
  776.         BGT.S    OVER_LIMIT_CH
  777.         SUBQ    #1,D2
  778.         Rbmi    L_IFonc            < 0 ? ERROR
  779.         MOVE.L    OBJECT_ADRES_BASE-MB(A2),A0
  780.         ADD.L    D2,D2
  781.         MOVE.L    D2,D7            USE FOR POINT_BASE
  782.         ADD.L    D2,D2            USE FOR ADRES_BASE
  783.         TST.L    (A0,D2.L)
  784.         BNE.S    IS_SET_CH
  785.         MOVE.L    A6,A2
  786.         MOVE.L    $4.W,A6
  787.         MULU    #6,D0
  788.         MOVE.L    #MEMF_CHIP+MEMF_CLEAR,D1
  789.         JSR    ALLOCMEM(A6)
  790.         MOVE.L    A2,A6
  791.         RBEQ    OUT_OF_MEM
  792.         DLOAD    A2
  793.         MOVE.L    OBJECT_ADRES_BASE-MB(A2),A0
  794.         MOVE.L    D0,(A0,D2.L)        PUT ADDRESS OF OBJECT
  795.         MOVE.L    OBJECT_POINT_BASE-MB(A2),A0
  796.         MOVE.W    D6,(A0,D7.L)        PUT AMOUNT OF VECTORS
  797.         RTS
  798. IS_SET_CH    MOVEQ    #2,D0
  799.         Rbra    L_Custom
  800. OVER_LIMIT_CH    MOVEQ    #18,D0
  801.         RBRA    L_CUSTOM
  802.  
  803. L_DEF_OBJ_FA    EQU    29
  804. L29        MOVE.L    (A3)+,D0        AMOUNT OF VECTORS
  805.         Rble    L_IFonc            <= 0 ?  ERROR
  806.         MOVE.L    D0,D6            SAVE AMOUNT OF VECTORS
  807.         MOVE.L    (A3)+,D2        OBJECT NR
  808.         DLOAD    A2
  809.         CMP.W    OBJECT_LIMIT-MB(A2),D2
  810.         BGT.S    OVER_LIMIT_FA
  811.         SUBQ    #1,D2
  812.         Rbmi    L_IFonc            < 0 ? ERROR
  813.         MOVE.L    OBJECT_ADRES_BASE-MB(A2),A0
  814.         ADD.L    D2,D2
  815.         MOVE.L    D2,D7            USE FOR POINT_BASE
  816.         ADD.L    D2,D2            USE FOR ADRES_BASE
  817.         TST.L    (A0,D2.L)
  818.         BNE.S    IS_SET_FA
  819.         MOVE.L    A6,A2
  820.         MOVE.L    $4.W,A6
  821.         MULU    #6,D0
  822.         MOVE.L    #MEMF_FAST+MEMF_CLEAR,D1
  823.         JSR    ALLOCMEM(A6)
  824.         MOVE.L    A2,A6
  825.         RBEQ    OUT_OF_MEM
  826.         DLOAD    A2
  827.         MOVE.L    OBJECT_ADRES_BASE-MB(A2),A0
  828.         MOVE.L    D0,(A0,D2.L)        PUT ADDRESS OF OBJECT
  829.         MOVE.L    OBJECT_POINT_BASE-MB(A2),A0
  830.         MOVE.W    D6,(A0,D7.L)        PUT AMOUNT OF VECTORS
  831.         RTS
  832. IS_SET_FA    MOVEQ    #2,D0
  833.         Rbra    L_Custom
  834. OVER_LIMIT_FA    MOVEQ    #18,D0
  835.         RBRA    L_CUSTOM
  836.  
  837. L_DEF_OBJ_DRAW    EQU    30
  838. L30        MOVE.L    (A3)+,D1      GET Y
  839.         MOVE.L    (A3)+,D0      GET X
  840.         MOVE.L    (A3)+,D2      GET VECTOR
  841.         Rble    L_IFonc
  842.         MOVE.L    (A3)+,D3      GET OBJECT
  843.         SUBQ    #1,D3
  844.         BMI.S    NOT_DEF_DR      OBJECT < 0 ? ERROR
  845.         MOVE.L    D3,D5
  846.         ADD.L    D5,D5
  847.         DLOAD    A2
  848.         MOVE.L    OBJECT_POINT_BASE-MB(A2),A0  ADRESS OF OBJECT POINTS
  849.         CMP.W    (A0,D5.L),D2      CHECK AMOUNT OF VECTORS
  850.         BGT.S    TOO_MUCH_DR      TOO MANY VECTORS --> ERROR !
  851.         SUBQ    #1,D2
  852.         MOVE.L    OBJECT_ADRES_BASE-MB(A2),A0
  853.         ADD.L    D5,D5
  854.         MOVE.L    (A0,D5.L),D5      GET ADDRESS OF OBJECT
  855.         BEQ.S    NOT_DEF_DR      DEFINED ? NO --> ERROR
  856.         MOVE.L    D5,A1
  857.         MULU    #6,D2          GET VECTOR POSITION
  858.         MOVE.W    #0,(A1,D2.L)      DEFINE IT AS A DRAW INSTRUCTION
  859.         MOVEM.W    D0-D1,2(A1,D2.L)  STORE X AND Y TO BE DRAWN TO
  860.         RTS
  861. NOT_DEF_DR    MOVEQ    #3,D0
  862.         Rbra    L_Custom
  863. TOO_MUCH_DR    MOVEQ    #4,D0
  864.         Rbra    L_Custom
  865.         
  866. L_DEF_OBJ_MOVE    EQU    31
  867. L31        MOVE.L    (A3)+,D1      GET Y
  868.         MOVE.L    (A3)+,D0      GET X
  869.         MOVE.L    (A3)+,D2      GET VECTOR
  870.         Rble    L_IFonc
  871.         MOVE.L    (A3)+,D3      GET OBJECT
  872.         SUBQ    #1,D3
  873.         BMI.S    NOT_DEF_MOV      OBJECT < 0 ? ERROR
  874.         MOVE.L    D3,D5
  875.         ADD.L    D5,D5
  876.         DLOAD    A2
  877.         MOVE.L    OBJECT_POINT_BASE-MB(A2),A0  ADRESS OF OBJECT POINTS
  878.         CMP.W    (A0,D5.L),D2      CHECK AMOUNT OF VECTORS
  879.         BGT.S    TOO_MUCH_MOV      TOO MANY VECTORS --> ERROR !
  880.         SUBQ    #1,D2
  881.         MOVE.L    OBJECT_ADRES_BASE-MB(A2),A0
  882.         ADD.L    D5,D5
  883.         MOVE.L    (A0,D5.L),D5      GET ADDRESS OF OBJECT
  884.         BEQ.S    NOT_DEF_MOV      DEFINED ? NO --> ERROR
  885.         MOVE.L    D5,A1
  886.         MULU    #6,D2
  887.         MOVE.W    #-1,(A1,D2.L)
  888.         MOVEM.W    D0-D1,2(A1,D2.L)
  889.         RTS
  890. NOT_DEF_MOV    MOVEQ    #3,D0
  891.         Rbra    L_Custom
  892. TOO_MUCH_MOV    MOVEQ    #5,D0
  893.         Rbra    L_Custom
  894.  
  895. L_DEF_OBJ_STOP    EQU    32
  896. L32        MOVE.L    (A3)+,D2    WELK PUNT
  897.         Rble    L_IFonc
  898.         MOVE.L    (A3)+,D3    WELK OBJECT
  899.         SUBQ    #1,D3
  900.         BMI.S    NOT_DEF_STOP
  901.         MOVE.L    D3,D5
  902.         ADD.L    D5,D5
  903.         DLOAD    A2
  904.         MOVE.L    OBJECT_POINT_BASE-MB(A2),A0  ADRESS OF OBJECT POINTS
  905.         CMP.W    (A0,D5.L),D2      CHECK AMOUNT OF VECTORS
  906.         BGT.S    TOO_MUCH_STOP      TOO MANY VECTORS --> ERROR !
  907.         SUBQ    #1,D2
  908.         MOVE.L    OBJECT_ADRES_BASE-MB(A2),A0
  909.         ADD.L    D5,D5
  910.         MOVE.L    (A0,D5.L),D5      GET ADDRESS OF OBJECT
  911.         BEQ.S    NOT_DEF_STOP      DEFINED ? NO --> ERROR
  912.         MOVE.L    D5,A1
  913.         MULU    #6,D2
  914.         MOVE.W    #1,(A1,D2.L)
  915.         RTS
  916. NOT_DEF_STOP    MOVEQ    #3,D0
  917.         Rbra    L_Custom
  918. TOO_MUCH_STOP    MOVEQ    #5,D0
  919.         Rbra    L_Custom
  920.  
  921. L_DEF_OBJ_ATT    EQU    33
  922. L33        MOVE.L    (A3)+,D1    MASK
  923.         MOVE.L    (A3)+,D0    COLOUR
  924.         MOVE.L    (A3)+,D2    WELK PUNT
  925.         Rble    L_IFonc
  926.         MOVE.L    (A3)+,D3    WELK OBJECT
  927.         SUBQ    #1,D3
  928.         BMI.S    NOT_DEF_COL
  929.         MOVE.L    D3,D5
  930.         ADD.L    D5,D5
  931.         DLOAD    A2
  932.         MOVE.L    OBJECT_POINT_BASE-MB(A2),A0  ADRESS OF OBJECT POINTS
  933.         CMP.W    (A0,D5.L),D2      CHECK AMOUNT OF VECTORS
  934.         BGT.S    TOO_MUCH_COL      TOO MANY VECTORS --> ERROR !
  935.         SUBQ    #1,D2
  936.         MOVE.L    OBJECT_ADRES_BASE-MB(A2),A0
  937.         ADD.L    D5,D5
  938.         MOVE.L    (A0,D5.L),D5      GET ADDRESS OF OBJECT
  939.         BEQ.S    NOT_DEF_COL      DEFINED ? NO --> ERROR
  940.         MOVE.L    D5,A1
  941.         MULU    #6,D2
  942.         MOVE.W    #2,(A1,D2.L)
  943.         MOVEM.W    D0-D1,2(A1,D2.L)
  944.         RTS
  945. NOT_DEF_COL    MOVEQ    #3,D0
  946.         Rbra    L_Custom
  947. TOO_MUCH_COL    MOVEQ    #6,D0
  948.         Rbra    L_Custom
  949.  
  950.  
  951. L_OBJECT_DRAW    EQU    34
  952. L34        MOVE.L    (A3)+,D3
  953.         SUBQ    #1,D3
  954.         Rbmi    L_IFonc
  955.         Dload    A0
  956.         MOVE.L    OBJECT_ADRES_BASE-MB(A0),A1
  957.         ADD.L    D3,D3
  958.         MOVE.L    D3,D5
  959.         ADD.L    D3,D3
  960.         MOVE.L    (A1,D3.L),D0
  961.         BEQ.S    DONT_DRAW    OBJECT NOT DEFINED ? --> ERROR !
  962.         MOVE.L    D0,A2
  963.         MOVE.L    OBJECT_POINT_BASE-MB(A0),A0
  964.         MOVE.W    (A0,D5.L),D5
  965.         SUBQ    #1,D5        --> AANTAL KEER -1
  966.         MOVE.L    A6,-(sp)
  967.         MOVE.L    T_RastPort(A5),A1
  968.         MOVE.L    T_GfxBase(A5),A6
  969. DRAW_LOOP    MOVE.W    (A2)+,D3
  970.         BEQ.S    JUST_DRAW
  971.         BMI.S    JUST_MOVE
  972.         CMP.W    #1,D3
  973.         BEQ.S    STOP
  974.         MOVE.W    (A2)+,D0
  975.         JSR    -342(A6)
  976.         MOVE.W    (A2)+,D0
  977.         JSR    -354(A6)
  978.         DBRA    D5,DRAW_LOOP    
  979. JUST_MOVE    MOVE.L    (A2)+,36(A1)    PUT X AND Y IN Rp STRUCT
  980.         DBRA    D5,DRAW_LOOP
  981. STOP        MOVE.L    (sp)+,A6
  982.         RTS
  983. JUST_DRAW    MOVEM.W    (A2)+,D0-1
  984.         JSR    -246(A6)
  985.         DBRA    D5,DRAW_LOOP
  986.         MOVE.L    (sp)+,A6
  987.         RTS
  988. DONT_DRAW    MOVEQ    #3,D0
  989.         Rbra    L_Custom
  990.  
  991. L_R_OBJECT_DRAW    EQU    35
  992. L35        MOVE.L    (A3)+,D7    DY
  993.         MOVE.L    (A3)+,D6    DX
  994.         MOVE.L    (A3)+,D3
  995.         SUBQ    #1,D3
  996.         Rbmi    L_IFonc
  997.         Dload    A0
  998.         MOVE.L    OBJECT_ADRES_BASE-MB(A0),A1
  999.         ADD.L    D3,D3
  1000.         MOVE.L    D3,D5
  1001.         ADD.L    D3,D3
  1002.         MOVE.L    (A1,D3.L),D0
  1003.         BEQ.S    DONT_R_DRAW    OBJECT NOT DEFINED ? --> ERROR !
  1004.         MOVE.L    D0,A2
  1005.         MOVE.L    OBJECT_POINT_BASE-MB(A0),A0
  1006.         MOVE.W    (A0,D5.L),D5
  1007.         SUBQ    #1,D5        --> AANTAL KEER -1
  1008.         MOVE.L    A6,-(sp)
  1009.         MOVE.L    T_RastPort(A5),A1
  1010.         MOVE.L    T_GfxBase(A5),A6
  1011. R_DRAW_LOOP    MOVE.W    (A2)+,D3
  1012.         BEQ.S    JUST_R_DRAW
  1013.         BMI.S    JUST_R_MOVE
  1014.         CMP.W    #1,D3
  1015.         BEQ.S    R_STOP
  1016.         MOVE.W    (A2)+,D0
  1017.         JSR    -342(A6)
  1018.         MOVE.W    (A2)+,D0
  1019.         JSR    -354(A6)
  1020.         DBRA    D5,R_DRAW_LOOP
  1021. JUST_R_MOVE    MOVE.W    (A2)+,D0
  1022.         MOVE.W    (A2)+,D1
  1023.         ADD.W    D6,D0
  1024.         ADD.W    D7,D1
  1025.         MOVEM.W    D0-1,36(A1)
  1026.         DBRA    D5,R_DRAW_LOOP
  1027. R_STOP        MOVE.L    (sp)+,A6
  1028.         RTS
  1029. JUST_R_DRAW    MOVE.W    (A2)+,D0
  1030.         MOVE.W    (A2)+,D1
  1031.         ADD.W    D6,D0
  1032.         ADD.W    D7,D1
  1033.         JSR    -246(A6)
  1034.         DBRA    D5,R_DRAW_LOOP
  1035.         MOVE.L    (sp)+,A6
  1036.         RTS
  1037. DONT_R_DRAW    MOVEQ    #3,D0
  1038.         Rbra    L_Custom
  1039.  
  1040. L_OBJ_MAG_DRAW    EQU    36
  1041. L36        MOVE.L    (A3)+,D2
  1042.         MOVE.L    (A3)+,D3
  1043.         SUBQ    #1,D3
  1044.         Rbmi    L_IFonc
  1045.         Dload    A0
  1046.         MOVE.L    OBJECT_ADRES_BASE-MB(A0),A1
  1047.         ADD.L    D3,D3
  1048.         MOVE.L    D3,D5
  1049.         ADD.L    D3,D3
  1050.         MOVE.L    (A1,D3.L),D0
  1051.         BEQ.S    DONT_MAG_DRAW    OBJECT NOT DEFINED ? --> ERROR !
  1052.         MOVE.L    D0,A2
  1053.         MOVE.L    OBJECT_POINT_BASE-MB(A0),A0
  1054.         MOVE.W    (A0,D5.L),D5
  1055.         SUBQ    #1,D5        --> AANTAL KEER -1
  1056.         MOVE.L    A6,-(sp)
  1057.         MOVE.L    T_RastPort(A5),A1
  1058.         MOVE.L    T_GfxBase(A5),A6        
  1059.         CMP.W    #0,D2
  1060.         BLT.S    DRAW_MIN
  1061. DRAW_MAG_LOOP    MOVE.W    (A2)+,D6
  1062.         BEQ.S    JUST_MAG_DRAW
  1063.         BMI.S    JUST_MAG_MOVE
  1064.         CMP.W    #1,D6
  1065.         BEQ.S    MAG_STOP
  1066.         MOVE.W    (A2)+,D0
  1067.         JSR    -342(A6)
  1068.         MOVE.W    (A2)+,D0
  1069.         JSR    -354(A6)
  1070.         DBRA    D5,DRAW_MAG_LOOP
  1071. JUST_MAG_MOVE    MOVE.W    (A2)+,D0
  1072.         MOVE.W    (A2)+,D1
  1073.         MULS    D2,D0
  1074.         MULS    D2,D1
  1075.         MOVEM.W    D0-1,36(A1)
  1076.         DBRA    D5,DRAW_MAG_LOOP
  1077. MAG_STOP    MOVE.L    (sp)+,A6
  1078.         RTS
  1079. JUST_MAG_DRAW    MOVE.W    (A2)+,D0
  1080.         MOVE.W    (A2)+,D1
  1081.         MULS    D2,D0
  1082.         MULS    D2,D1
  1083.         JSR    -246(A6)
  1084.         DBRA    D5,DRAW_MAG_LOOP
  1085.         MOVE.L    (sp)+,A6
  1086.         RTS
  1087. DONT_MAG_DRAW    MOVEQ    #3,D0
  1088.         Rbra    L_Custom
  1089. DRAW_MIN    NEG.W    D2
  1090. DRAW_MIN_LOOP    MOVE.W    (A2)+,D6
  1091.         BEQ.S    JUST_MIN_DRAW
  1092.         BMI.S    JUST_MIN_MOVE
  1093.         CMP.W    #1,D6
  1094.         BEQ.S    MIN_STOP
  1095.         MOVE.W    (A2)+,D0
  1096.         JSR    -342(A6)
  1097.         MOVE.W    (A2)+,D0
  1098.         JSR    -354(A6)
  1099.         DBRA    D5,DRAW_MIN_LOOP
  1100. JUST_MIN_MOVE    MOVEM.W    (A2)+,D0-D1
  1101.         DIVS    D2,D0
  1102.         DIVS    D2,D1
  1103.         MOVEM.W    D0-1,36(A1)
  1104.         DBRA    D5,DRAW_MIN_LOOP
  1105. MIN_STOP    MOVE.L    (sp)+,A6
  1106.         RTS
  1107. JUST_MIN_DRAW    MOVEM.W    (A2)+,D0-D1
  1108.         DIVS    D2,D0
  1109.         DIVS    D2,D1
  1110.         JSR    -246(A6)
  1111.         DBRA    D5,DRAW_MIN_LOOP
  1112.         MOVE.L    (sp)+,A6
  1113.         RTS
  1114.  
  1115. L_R_OBJ_MAG_DRA    EQU    37
  1116. L37        MOVEM.L    (A3)+,D2-D5
  1117.         SUBQ    #1,D5
  1118.         Rbmi    L_IFonc
  1119.         Dload    A0
  1120.         MOVE.L    OBJECT_ADRES_BASE-MB(A0),A1
  1121.         ADD.L    D5,D5
  1122.         MOVE.L    D5,D0
  1123.         ADD.L    D5,D5
  1124.         MOVE.L    (A1,D5.L),D1
  1125.         BEQ.S    DONT_MAG_DRAW    OBJECT NOT DEFINED ? --> ERROR !
  1126.         MOVE.L    D1,A2
  1127.         MOVE.L    OBJECT_POINT_BASE-MB(A0),A0
  1128.         MOVE.W    (A0,D0.L),D5
  1129.         SUBQ    #1,D5        --> AANTAL KEER -1
  1130.         MOVE.L    A6,-(sp)
  1131.         MOVE.L    T_RastPort(A5),A1
  1132.         MOVE.L    T_GfxBase(A5),A6
  1133.         CMP.W    #0,D2
  1134.         BLT.S    DRAW_R_MIN
  1135. DRAW_R_MAG_LOOP    MOVE.W    (A2)+,D6
  1136.         BEQ.S    JUST_R_MAG_DRAW
  1137.         BMI.S    JUST_R_MAG_MOVE
  1138.         CMP.W    #1,D6
  1139.         BEQ.S    R_MAG_STOP
  1140.         MOVE.W    (A2)+,D0
  1141.         JSR    -342(A6)
  1142.         MOVE.W    (A2)+,D0
  1143.         JSR    -354(A6)
  1144.         DBRA    D5,DRAW_R_MAG_LOOP
  1145. JUST_R_MAG_MOVE    MOVE.W    (A2)+,D0
  1146.         MOVE.W    (A2)+,D1
  1147.         MULS    D2,D0
  1148.         MULS    D2,D1
  1149.         ADD.W    D4,D0
  1150.         ADD.W    D3,D1
  1151.         MOVEM.W    D0-1,36(A1)
  1152.         DBRA    D5,DRAW_R_MAG_LOOP
  1153. R_MAG_STOP    MOVE.L    (sp)+,A6
  1154.         RTS
  1155. JUST_R_MAG_DRAW    MOVE.W    (A2)+,D0
  1156.         MOVE.W    (A2)+,D1
  1157.         MULS    D2,D0
  1158.         MULS    D2,D1
  1159.         ADD.W    D4,D0
  1160.         ADD.W    D3,D1
  1161.         JSR    -246(A6)
  1162.         DBRA    D5,DRAW_R_MAG_LOOP
  1163.         MOVE.L    (sp)+,A6
  1164.         RTS
  1165. DONT_R_MAG_DRAW    MOVEQ    #3,D0
  1166.         Rbra    L_Custom
  1167. DRAW_R_MIN    NEG.W    D2
  1168. DRAW_R_MIN_LOOP    MOVE.W    (A2)+,D6
  1169.         BEQ.S    JUST_R_MIN_DRAW
  1170.         BMI.S    JUST_R_MIN_MOVE
  1171.         CMP.W    #1,D6
  1172.         BEQ.S    R_MIN_STOP
  1173.         MOVE.W    (A2)+,D0
  1174.         JSR    -342(A6)
  1175.         MOVE.W    (A2)+,D0
  1176.         JSR    -354(A6)
  1177.         DBRA    D5,DRAW_R_MIN_LOOP
  1178. JUST_R_MIN_MOVE    MOVEM.W    (A2)+,D0-D1
  1179.         DIVS    D2,D0
  1180.         DIVS    D2,D1
  1181.         ADD.W    D4,D0
  1182.         ADD.W    D3,D1
  1183.         MOVEM.W    D0-1,36(A1)
  1184.         DBRA    D5,DRAW_R_MIN_LOOP
  1185. R_MIN_STOP    MOVE.L    (sp)+,A6
  1186.         RTS
  1187. JUST_R_MIN_DRAW    MOVEM.W    (A2)+,D0-D1
  1188.         DIVS    D2,D0
  1189.         DIVS    D2,D1
  1190.         ADD.W    D4,D0
  1191.         ADD.W    D3,D1
  1192.         JSR    -246(A6)
  1193.         DBRA    D5,DRAW_R_MIN_LOOP
  1194.         MOVE.L    (sp)+,A6
  1195.         RTS
  1196.         
  1197. L_DISCARD_OBJECT    EQU    38
  1198. L38        MOVE.L    (A3)+,D0
  1199.         CMP.L    #32000,D0
  1200.         RBHI    L_IFONC
  1201.         DLOAD    A0
  1202.         CMP.W    OBJECT_LIMIT-MB(A0),D0
  1203.         BGT.S    OVER_LIMIT
  1204.         SUBQ    #1,D0
  1205.         Rbmi    L_IFonc
  1206.         ADD.L    D0,D0
  1207.         MOVE.L    D0,D7            USE FOR POINT BASE
  1208.         ADD.L    D0,D0            USE FOR ADRES BASE
  1209.         MOVE.L    OBJECT_ADRES_BASE-MB(A0),A1
  1210.         MOVE.L    (A1,D0.L),D1
  1211.         BEQ.S    NOT_DEFINED
  1212.         CLR.L    (A1,D0.L)
  1213.         MOVE.L    D1,A1
  1214.         MOVE.L    OBJECT_POINT_BASE-MB(A0),A0
  1215.         MOVE.W    (A0,D7.L),D0
  1216.         MULU    #6,D0
  1217.         MOVE.L    A6,A2
  1218.         CALLEXEC FreeMem
  1219.         MOVE.L    A2,A6
  1220.         RTS
  1221. NOT_DEFINED    MOVEQ    #3,D0
  1222.         Rbra    L_Custom
  1223. OVER_LIMIT    MOVEQ    #18,D0
  1224.         RBRA    L_CUSTOM
  1225.  
  1226. L_OBJECT_SAVE    EQU    39
  1227. L39        MOVE.L    (A3)+,D5    TO PARAM
  1228.         MOVE.L    (A3)+,D4    FROM PARAM
  1229.         MOVE.L    (A3)+,A0
  1230.         MOVE.W    (A0)+,D0
  1231.         CMP.W    #80,D0
  1232.         BGT    NAME_TO_LONG
  1233.         MOVEM.L    A3-A6,-(SP)
  1234.         SUBQ    #1,D5
  1235.         SUBQ    #1,D4
  1236.         MOVE.W    D5,D7
  1237.         SUB.W    D4,D7        AANTAL OBJECTEN    
  1238.         SUBQ    #1,D0
  1239.         Dlea    OBJECT_DISKNAME,A1
  1240.         MOVE.L    A1,A2
  1241. PUT_NAME    MOVE.B    (A0)+,(A1)+    COPIEER NAAM + CHR$(0)
  1242.         DBRA    D0,PUT_NAME
  1243.         MOVE.L    DosBase(A5),A6
  1244.         MOVE.L    A2,D1        POINTER NAAR NAAM
  1245.         MOVE.L    #1006,D2    MODUS    --> NEW
  1246.         JSR    -30(A6)        Open
  1247.         BEQ    DISK_ERROR    FOUT BIJ OPEN
  1248.         MOVE.L    D0,A4
  1249.         Dload    A0
  1250.         MOVE.W    D7,OBJECT_DISK_COUNT-MB(A0)
  1251.         Dlea    OBJECT_DISK_HEADER,A0
  1252.         MOVE.L    D0,D1
  1253.         MOVE.L    A0,D2
  1254.         MOVEQ.L    #6,D3
  1255.         JSR    -48(A6)
  1256.         BEQ.S    SAVE_ERROR    FOUT BIJ SAVEN HEADER            
  1257. LOOP_SAVE    Dload    A0
  1258.         ADD.W    D4,D4
  1259.         ADD.W    D4,D4
  1260.         MOVE.L    OBJECT_ADRES_BASE-MB(A0),A1
  1261.         MOVE.L    (A1,D4.L),D3    GEEF ADRES VAN VECTORS OM TE SAVEN
  1262.         BEQ.S    GET_NEXT_OBJECT    NIET GEDEFINIEERD ? VOLGENDE...
  1263.         MOVE.L    D3,A2
  1264.         LSR.W    #1,D4
  1265.         MOVE.L    OBJECT_POINT_BASE-MB(A0),A1
  1266.         MOVE.W    (A1,D4.L),D6    GEEF HET AANTAL PUNTEN VAN OBJECT
  1267.         ASR.W    #1,D4
  1268.         Dlea    OBJECT_DISK_COUNT,A0
  1269.         MOVE.W    D6,(A0)
  1270.         MOVE.L    A4,D1    HANDLE IN D1
  1271.         MOVE.L    A0,D2    AANTAL VECTORS IN D2 --> BUFFER
  1272.         MOVEQ    #2,D3    AANTAL TE SAVEN BYTES
  1273.         MOVE.L    DosBase(A5),A6
  1274.         JSR    -48(A6)
  1275.         BMI.S    SAVE_ERROR
  1276.         EXT.L    D6
  1277.         MULU    #6,D6    AANTAL VECTORS * 6 --> 2 BYTES X  2 BYTES Y
  1278.         MOVE.L    A4,D1    HANDLE IN D1
  1279.         MOVE.L    A2,D2    ADRES VECTORS IN D2 --> BUFFER
  1280.         MOVE.L    D6,D3    AANTAL TE SAVEN BYTES
  1281.         MOVE.L    DosBase(A5),A6
  1282.         JSR    -48(A6)        Write    GO!!!
  1283.         BMI.S    SAVE_ERROR
  1284. GET_NEXT_OBJECT    ADDQ    #1,D4
  1285.         CMP.W    D5,D4
  1286.         BGT.S    FINISH_SAVE                        
  1287.         BRA.S    LOOP_SAVE
  1288. SAVE_ERROR
  1289. FINISH_SAVE    MOVE.L    DosBase(A5),A6
  1290.         MOVE.L    A4,D1
  1291.         JSR    -36(A6)        Close !!!
  1292. DISK_ERROR
  1293.         MOVEM.L    (SP)+,A3-A6
  1294.         RTS
  1295. NAME_TO_LONG    MOVEQ    #21,D0
  1296.         Rjmp    L_Error
  1297.  
  1298. L_OBJECT_LOAD_CHIP EQU    40
  1299. L40        MOVE.L    (A3)+,D7    LOAD FROM WHERE PARAMETER
  1300.         MOVE.L    (A3)+,A0    POINTER STRING --> NAAM
  1301.         MOVE.W    (A0)+,D0    GET LENGTH OF STRING
  1302.         CMP.W    #80,D0
  1303.         BGT    LOAD_TO_LONG        NAAM -> 80 CHARS --> ERROR !
  1304.         MOVEM.L    A3-A6,-(SP)
  1305.         SUBQ.W    #1,D7
  1306.         SUBQ.W    #1,D0
  1307.         Dlea    OBJECT_DISKNAME,A1
  1308.         MOVE.L    A1,A2        SAVE POINTER NAAM
  1309. COPY_NAME    MOVE.B    (A0)+,(A1)+
  1310.         DBRA    D0,COPY_NAME
  1311.         MOVE.L    DosBase(A5),A6
  1312.         MOVE.L    A2,D1        POINTER NAAM IN D1
  1313.         MOVE.L    #1005,D2    MODUS --> READ
  1314.         JSR    -30(A6)        Open file
  1315.         BEQ    OPEN_ERROR
  1316.         MOVE.L    D0,A4        SAVE HANDLE !
  1317.         Dlea    OBJECT_READ_BUFFER,A3
  1318.         MOVE.L    D0,D1        HANDLE IN D1
  1319.         MOVE.L    A3,D2        BUFFER IN D2
  1320.         MOVEQ.L    #8,D3        LEES OBJECT HEADER + AANTAL OBJECTS
  1321.         JSR    -42(A6)        Read
  1322.         BEQ    READ_ERROR    SOMETHING WRONG !!!
  1323.         CMP.L    #"OBJE",(A3)    IS THIS AN OBJECT FILE ???
  1324.         BNE    NO_OBJECT_FILE    NO ? GET OUT OF HERE !!!
  1325.         MOVE.W    4(A3),D6    OBJECT COUNTER IN D6
  1326.         ADD.W    D7,D6
  1327.         DLOAD    A1
  1328.         MOVE.W    OBJECT_LIMIT-MB(A1),D4
  1329.         BEQ    LOAD_OVER_LIMIT
  1330.         SUBQ    #1,D4
  1331.         CMP.W    D4,D6
  1332.         BGT    LOAD_OVER_LIMIT
  1333.         MOVE.W    6(A3),D5    AANTAL VERTICES OBJECT 1
  1334.         EXT.L    D6        MAAK LONG -> VOOR ALLE ZEKERHEID
  1335.         EXT.L    D5
  1336. LOAD_LOOP    Dload    A1
  1337.         MOVE.L    OBJECT_ADRES_BASE-MB(A1),A1
  1338.         LSL.W    #2,D7
  1339.         MOVE.L    (A1,D7.W),D4
  1340.         BNE.S    IS_DEFINED    DEFINED ? --> ERROR !
  1341.         MOVE.L    D5,D3
  1342.         MULU    #6,D5        AANTAL TE LEZEN + TE RESERVEREN BYTES
  1343.         MOVE.W    D5,D0
  1344.         MOVE.L    #MEMF_CHIP+MEMF_CLEAR,D1
  1345.         CALLEXEC AllocMem
  1346.         BEQ    NO_LOAD_MEM
  1347.         DLOAD    A1
  1348.         MOVE.L    OBJECT_ADRES_BASE-MB(A1),A1
  1349.         MOVE.L    D0,(A1,D7.W)    SET OBJECT ADRES
  1350.         LSR.W    #1,D7
  1351.         DLOAD    A1
  1352.         MOVE.L    OBJECT_POINT_BASE-MB(A1),A1
  1353.         MOVE.W    D3,(A1,D7.W)    SET OBJECT POINTS
  1354.         MOVE.L    D0,A3        SAVE ADRES VOOR IN TE SCHRIJVEN
  1355.         LSR.W    #1,D7        TERUG D7 GEWOON !
  1356.         MOVE.L    A4,D1        HANDLE
  1357.         MOVE.L    D0,D2        BUFFER --> IS GERESERVEERD !
  1358.         MOVE.L    D5,D3        AANTAL BYTES TE LEZEN        
  1359.         MOVE.L    DosBase(A5),A6
  1360.         JSR    -42(A6)        Read
  1361.         BEQ.S    READ_ERROR    SOMETHING WRONG !!!
  1362.         ADDQ    #1,D7
  1363.         CMP.W    D6,D7
  1364.         BGT.S    FINISH_LOAD
  1365.         Dlea    OBJECT_READ_BUFFER,A3
  1366.         MOVE.L    A4,D1
  1367.         MOVE.L    A3,D2
  1368.         MOVEQ.L    #2,D3
  1369.         MOVE.L    DosBase(A5),A6
  1370.         JSR    -42(A6)
  1371.         BEQ.S    READ_ERROR
  1372.         MOVE.W    (A3)+,D5                
  1373.         BRA    LOAD_LOOP        
  1374. IS_DEFINED
  1375. READ_ERROR
  1376. FINISH_LOAD    MOVE.L    A4,D1
  1377.         MOVE.L    DosBase(A5),A6
  1378.         JSR    -36(A6)
  1379. OPEN_ERROR    MOVEM.L    (SP)+,A3-6
  1380.         RTS
  1381. LOAD_TO_LONG    MOVEQ    #21,D0
  1382.         Rjmp    L_Error
  1383. LOAD_OVER_LIMIT    MOVE.L    A4,D1
  1384.         MOVE.L    DosBase(A5),A6
  1385.         JSR    -36(A6)
  1386.         MOVEM.L    (SP)+,A3-6
  1387.         MOVEQ    #18,D0
  1388.         RBRA    L_CUSTOM
  1389. NO_OBJECT_FILE    MOVE.L    A4,D1
  1390.         MOVE.L    DosBase(A5),A6
  1391.         JSR    -36(A6)
  1392.         MOVEM.L    (SP)+,A3-6
  1393.         MOVEQ    #7,D0
  1394.         Rbra    L_Custom
  1395. NO_LOAD_MEM    MOVEM.L    (SP)+,A3-6
  1396.         Rbra    OUT_OF_MEM
  1397.  
  1398.  
  1399. L_LINE_3D    EQU     41
  1400. L41        MOVE.L    (A3)+,D5    Z-2 COORD
  1401.         BEQ.S    DIV_BY_ZERO
  1402.         MOVE.L    (A3)+,D4    Y-2 COORD
  1403.         MOVE.L    (A3)+,D3    X-2 COORD
  1404.         MOVE.L    (A3)+,D2    Z-1 COORD
  1405.         BEQ.S    DIV_BY_ZERO
  1406.         MOVE.L    (A3)+,D1    Y-1 COORD
  1407.         MOVE.L    (A3)+,D0    X-1 COORD
  1408.         Dload    A0
  1409.         MOVE.W    X_VIEW-MB(A0),D6
  1410.         MOVE.W    Y_VIEW-MB(A0),D7
  1411.         ASL.L    #7,D0
  1412.         DIVS    D2,D0
  1413.         ADD.W    D6,D0
  1414.         ASL.L    #7,D1
  1415.         DIVS    D2,D1
  1416.         ADD.W    D7,D1
  1417.         MOVE.L    A6,A2
  1418.         MOVE.L    T_RastPort(A5),A1
  1419.         MOVE.L    T_GfxBase(A5),A6
  1420.         JSR    -240(A6)
  1421.         MOVE.L    D3,D0
  1422.         MOVE.L    D4,D1
  1423.         ASL.L    #7,D0
  1424.         DIVS    D5,D0
  1425.         ADD.W    D6,D0
  1426.         ASL.L    #7,D1
  1427.         DIVS    D5,D1
  1428.         ADD.W    D7,D1
  1429.         JSR    -246(A6)
  1430.         MOVE.L    A2,A6
  1431.         RTS
  1432. DIV_BY_ZERO    MOVEQ    #20,D0
  1433.         Rjmp    L_Error
  1434.         
  1435. L_EYE_3D    EQU    42
  1436. L42        MOVE.L    (A3)+,D1    Y EYE
  1437.         MOVE.L    (A3)+,D0    X EYE
  1438.         Dload    A0
  1439.         MOVE.W    D0,X_VIEW-MB(A0)
  1440.         MOVE.W    D1,Y_VIEW-MB(A0)
  1441.         RTS
  1442.  
  1443. L_BLIT_STORE    EQU    43
  1444. L43        CMP.L    #0,20(A3)
  1445.         Rble    L_IFonc
  1446.         CMP.L    #97,20(A3)
  1447.         Rbcc    L_IFonc
  1448.         Dlea    BLIT_DEFS,A1
  1449.         MOVE.L    20(A3),D1        BLIT NR
  1450.         SUBQ.W    #1,D1
  1451.         ASL.W    #2,D1
  1452.         TST.L    (A1,D1.W)        IS RESERVED
  1453.         BNE    BLIT_STORE_DEF        IF YES ERROR !
  1454.         MOVE.L    24(A3),D1        SCREEN NR
  1455.         Rjsr    L_GetEc
  1456.         MOVE.L    A0,A4            --- A4 BEZET !
  1457.         MOVE.W    EcNPlan(A0),D7        --- D7 BEZET !
  1458.         MOVE.L    D0,A2            --- A2 BEZET !
  1459.         MOVE.W    D7,D0
  1460.         EXT.L    D0
  1461.         MULU    #8,D0
  1462.         ADD.W    #20,D0
  1463.         MOVE.L    #MEMF_CHIP+MEMF_CLEAR,D1
  1464.         MOVE.L    A6,-(SP)
  1465.         CALLEXEC AllocMem
  1466.         MOVE.L    (SP)+,A6
  1467.         Rbeq    OUT_OF_MEM
  1468.         MOVEM.L    A4-6,-(SP)
  1469.         Dlea    BLIT_DEFS,A1
  1470.         MOVE.L    20(A3),D1        BLIT NR
  1471.         SUBQ.W    #1,D1
  1472.         ASL.W    #2,D1
  1473.         MOVE.L    D0,(A1,D1.W)        BLIT_DEF_ADRES
  1474.         MOVE.L    D0,A1            --- A1 BEZET !
  1475.         MOVEQ    #-1,D6
  1476.         MOVE.L    (A3)+,D5
  1477.         BMI    DESCENDING
  1478.         AND.L    #$F,D5
  1479.         Rbeq    L_IFonca
  1480.         LSL.L    D5,D6
  1481.         MOVE.W    D7,(A1)+
  1482.         MOVE.L    D6,(A1)+        BLTAFLWM
  1483.         ROR.L    #4,D5
  1484.         ADD.L    #$9F00000,D5
  1485.         MOVE.L    D5,A5            --- A5 BEZET ! BLTCON01
  1486.         MOVE.L    (A3)+,D5        Y1
  1487.         CMP.W    EcTy(A4),D5
  1488.         Rbhi    L_IFonca
  1489.         MOVE.L    (A3)+,D3        X1
  1490.         AND.W    #$FFF0,D3
  1491.         MOVE.L    (A3)+,D4        Y
  1492.         Rbmi    L_IFonca
  1493.         MOVE.L    (A3)+,D2        X
  1494.         Rbmi    L_IFonca
  1495.         AND.W    #$FFF0,D2
  1496.         CMP.W    D3,D2
  1497.         Rbge    L_IFonca
  1498.         CMP.W    D5,D4
  1499.         Rbge    L_IFonca
  1500.         MOVE.W    EcTLigne(A4),D6        BYTES PER REGEL
  1501.         ASL.W    #3,D6            PIXELS PER REGEL
  1502.         CMP.W    D3,D6
  1503.         BGT.S    NOT_OVER_A
  1504.         MOVE.W    D6,D3
  1505. NOT_OVER_A    ASR.W    #3,D6            BYTES PER REGEL
  1506.         MOVE.L    D4,D0            Y
  1507.         MULU    D6,D0            Y * BYTES REGEL
  1508.         MOVE.L    D2,D1            X
  1509.         LSR.L    #3,D1            X / 8
  1510.         ADD.L    D0,D1    OFFSET START    D1 = Y * BYTES REGEL + X / 8
  1511.         SUB.L    D2,D3            D3 = X1 - X
  1512.         LSR.L    #3,D3            D3 = (X1 - X) / 8
  1513.         SUB.L    D3,D6            D6 = BLTAMOD = BYTES REGEL-(X1-X)/8
  1514.         MOVE.L    #0,(A1)+        BLTCMOD + BLTBMOD OP 0
  1515.         MOVE.W    D6,(A1)+        BLTAMOD
  1516.         MOVE.W    D6,(A1)+        BLTDMOD
  1517.         MOVE.L    A5,(A1)+        BLTCON01
  1518.         SUB.L    D4,D5            Y1 - Y
  1519.         ASL.L    #6,D5            (Y1 - Y) * 64
  1520.         LSR.L    #1,D3            (X1 - X) / 16
  1521.         ADD.L    D3,D5    BLITSIZE    (Y1 - Y) * 64 + (X1 - X) / 16
  1522.         MOVE.W    D5,(A1)+        BLTSIZE
  1523.         SUBQ.W    #1,D7            PLANECOUNT - 1 VOOR DBRA !
  1524. ADRES_LOOP    MOVE.L    (A2)+,D0        ADRES PLANES 1 -> 6
  1525.         ADD.L    D1,D0
  1526.         MOVE.L    D0,(A1)+        SOURCE ADRES
  1527.         MOVE.L    D0,(A1)+        DEST ADRES        
  1528.         DBRA    D7,ADRES_LOOP        D7 = PLANECOUNT -1
  1529.         ADDQ.L    #8,A3            STACK ADJUST !
  1530.         MOVEM.L    (SP)+,A4-6
  1531.         RTS
  1532. BLIT_STORE_DEF    MOVEQ    #11,D0
  1533.         Rbra    L_CUSTOM 
  1534. DESCENDING    NEG.L    D5
  1535.         AND.L    #$F,D5
  1536.         Rbeq    L_IFonca
  1537.         LSR.L    D5,D6
  1538.         SWAP    D6
  1539.         MOVE.W    D7,(A1)+
  1540.         MOVE.L    D6,(A1)+        BLTAFLWM
  1541.         ROR.L    #4,D5
  1542.         ADD.L    #$9F00002,D5
  1543.         MOVE.L    D5,A5            --- A5 BEZET ! BLTCON01
  1544.         MOVE.L    (A3)+,D5        Y1
  1545.         CMP.W    EcTy(A4),D5
  1546.         Rbhi    L_Ifonca
  1547.         MOVE.L    (A3)+,D3        X1
  1548.         AND.W    #$FFF0,D3
  1549.         MOVE.L    (A3)+,D4        Y
  1550.         Rbmi    L_IFonca
  1551.         MOVE.L    (A3)+,D2        X
  1552.         Rbmi    L_IFonca
  1553.         AND.W    #$FFF0,D2
  1554.         CMP.W    D3,D2
  1555.         Rbge    L_IFonca
  1556.         CMP.W    D5,D4
  1557.         Rbge    L_IFonca
  1558.         MOVE.W    EcTLigne(A4),D6        BYTES PER REGEL
  1559.         ASL.W    #3,D6            PIXELS PER REGEL
  1560.         CMP.W    D3,D6
  1561.         BGT.S    NOT_OVER_D
  1562.         MOVE.W    D6,D3
  1563. NOT_OVER_D    ASR.W    #3,D6            BYTES PER REGEL
  1564.         MOVEM.L    D2-6,-(SP)
  1565.         SUB.L    D4,D5            Y1 - Y
  1566.         MULU    D6,D5            (Y1 - Y) * BYTES REGEL
  1567.         SUB.L    D2,D3            X1 - X
  1568.         ASR.L    #3,D3            (X1 - X) / 8
  1569.         ADD.L    D3,D5
  1570.         SUBQ    #2,D5
  1571.         SUB.W    D6,D5
  1572.         MOVE.L    D5,A6            DESCENDING OFFSET
  1573.         MOVEM.L    (SP)+,D2-6
  1574.         MOVE.L    D4,D0            Y
  1575.         MULU    D6,D0            Y * BYTES REGEL
  1576.         MOVE.L    D2,D1            X
  1577.         LSR.L    #3,D1            X / 8
  1578.         ADD.L    D0,D1    OFFSET START    D1 = Y * BYTES REGEL + X / 8
  1579.         ADD.L    A6,D1    DESCENDING OFFSET
  1580.         SUB.L    D2,D3            D3 = X1 - X
  1581.         LSR.L    #3,D3            D3 = (X1 - X) / 8
  1582.         SUB.L    D3,D6            D6 = BLTAMOD = BYTES REGEL-(X1-X)/8
  1583.         MOVE.L    #0,(A1)+        BLTCMOD + BLTBMOD OP 0
  1584.         MOVE.W    D6,(A1)+        BLTAMOD
  1585.         MOVE.W    D6,(A1)+        BLTDMOD
  1586.         MOVE.L    A5,(A1)+        BLTCON01
  1587.         SUB.L    D4,D5            Y1 - Y
  1588.         ASL.L    #6,D5            (Y1 - Y) * 64
  1589.         LSR.L    #1,D3            (X1 - X) / 16
  1590.         ADD.L    D3,D5    BLITSIZE    (Y1 - Y) * 64 + (X1 - X) / 16
  1591.         MOVE.W    D5,(A1)+        BLTSIZE
  1592.         SUBQ.W    #1,D7            PLANECOUNT - 1 VOOR DBRA !
  1593. ADRES_D_LOOP    MOVE.L    (A2)+,D0        ADRES PLANES 1 -> 6
  1594.         ADD.L    D1,D0
  1595.         MOVE.L    D0,(A1)+        SOURCE ADRES
  1596.         MOVE.L    D0,(A1)+        DEST ADRES        
  1597.         DBRA    D7,ADRES_D_LOOP        D7 = PLANECOUNT -1
  1598.         ADDQ.L    #8,A3            STACK ADJUST !
  1599.         MOVEM.L    (SP)+,A4-6
  1600.         RTS
  1601.         
  1602. L_MULTI_BLIT    EQU    44
  1603. L44        MOVE.L    (A3)+,D7        TO BLIT
  1604.         MOVE.L    (A3)+,D6        FROM BLIT
  1605.         CMP.W    D6,D7
  1606.         Rblt    L_IFonc
  1607.         SUBQ.W    #1,D6
  1608.         Rbmi    L_IFonc
  1609.         SUBQ.W    #1,D7
  1610.         CMP.W    #96,D7
  1611.         Rbcc    L_IFonc
  1612.         MOVEM.L    A3-4,-(SP)
  1613.         MOVE.L    T_RASTPORT(A5),A4
  1614.         LEA    $DFF000,A1
  1615.         Dlea    BLIT_DEFS,A2
  1616. NEXT_MULTI_BLIT    ADD.W    D6,D6
  1617.         ADD.W    D6,D6
  1618.         MOVE.L    A2,A0
  1619.         MOVE.L    (A0,D6.W),D0
  1620.         BEQ.S    NO_MULTI_BLIT        IF ADRES = 0 ERROR !!
  1621.         MOVE.L    D0,A0
  1622.         MOVE.W    (A0)+,D5        PLANE COUNT
  1623.         SUBQ.L    #1,D5
  1624.         MOVEM.L    (A0)+,D1-4
  1625.         MOVE.W    (A0)+,A3        BLTSIZE
  1626.         MOVEQ    #0,D0
  1627. BLIT_S_LOOP    BTST    D0,24(A4)
  1628.         BEQ.S    SKIP_BLIT
  1629. BLIT_S_LOOP1    BTST    #14,2(A1)
  1630.         BNE.S    BLIT_S_LOOP1
  1631.         ADDQ    #1,D0
  1632.         MOVE.L    D1,$44(A1)        BLTAFLWM
  1633.         MOVE.L    D2,$60(A1)        BLTCBMOD
  1634.         MOVE.L    D3,$64(A1)        BLTADMOD
  1635.         MOVE.L    D4,$40(A1)        BLTCON01
  1636.         MOVE.L    (A0)+,$50(A1)        SOURCE ADRES
  1637.         MOVE.L    (A0)+,$54(A1)        DEST ADRES
  1638.         MOVE.W    A3,$58(A1)
  1639.         DBRA    D5,BLIT_S_LOOP
  1640.         ASR.W    #2,D6
  1641.         ADDQ.W    #1,D6
  1642.         CMP.W    D7,D6
  1643.         BLE.S    NEXT_MULTI_BLIT
  1644.         MOVEM.L    (SP)+,A3-4
  1645.         RTS
  1646. SKIP_BLIT    ADDQ.L    #8,A0
  1647.         ADDQ    #1,D0
  1648.         DBRA    D5,BLIT_S_LOOP
  1649.         ASR.W    #2,D6
  1650.         ADDQ.W    #1,D6
  1651.         CMP.W    D7,D6
  1652.         BLE.S    NEXT_MULTI_BLIT
  1653.         MOVEM.L    (SP)+,A3-4
  1654.         RTS
  1655. NO_MULTI_BLIT    MOVEM.L    (SP)+,A3-4
  1656.         MOVEQ    #12,D0
  1657.         Rbra    L_CUSTOM
  1658.         
  1659. L_ERASE_BLIT    EQU    45
  1660. L45        MOVE.L    A6,-(SP)
  1661.         MOVE.L    (A3)+,D2
  1662.         Rble    L_IFonc
  1663.         SUBQ.W    #1,D2
  1664.         CMP.W    #96,D2
  1665.         Rbcc    L_IFonc
  1666.         ASL.L    #2,D2
  1667.         Dlea    BLIT_DEFS,A1
  1668.         MOVE.L    A1,A2
  1669.         MOVE.L    (A1,D2.L),D1
  1670.         BEQ.S    BLIT_IS_ERASED
  1671.         MOVE.L    D1,A1
  1672.         MOVE.W    (A1),D0
  1673.         MOVE.L    #0,(A2,D2.L)
  1674.         EXT.L    D0
  1675.         MULU    #8,D0
  1676.         ADD.W    #20,D0
  1677.         CALLEXEC FreeMem
  1678. BLIT_IS_ERASED    MOVE.L    (SP)+,A6
  1679.         RTS
  1680.  
  1681. L_BLIT_SPEED    EQU    46
  1682. L46        MOVE.L    (A3)+,D7    NEW SPEED
  1683.         AND.L    #$F,D7
  1684.         Rbeq    L_IFonc
  1685.         MOVE.L    (A3)+,D6    BLIT NUMBER
  1686.         MOVE.W    #$FFFF,D5
  1687.         MOVE.W    #$9F0,D4
  1688.         SUBQ.L    #1,D6
  1689.         Dlea    BLIT_DEFS,A0
  1690.         ADD.W    D6,D6
  1691.         ADD.W    D6,D6
  1692.         MOVE.L    (A0,D6.W),D0    BLIT DEF ADRES
  1693.         BEQ.S    NO_BLIT_SPEED    NOT DEFINED ? ERROR !
  1694.         MOVE.L    D0,A0
  1695.         MOVE.L    2(A0),D0    BLTAFLWM
  1696.         BTST    #0,D0
  1697.         BEQ.S    IS_RIGHT
  1698.         LSR.W    D7,D5
  1699.         MOVE.W    D5,4(A0)
  1700.         ROR.W    #4,D7
  1701.         ADD.W    D7,D4
  1702.         MOVE.W    D4,14(A0)
  1703.         RTS
  1704. IS_RIGHT    BTST    #15,D0
  1705.         BEQ.S    IS_UP
  1706.         ASL.W    D7,D5
  1707.         MOVE.W    D5,4(A0)
  1708.         ROR.W    #4,D7
  1709.         ADD.W    D7,D4
  1710.         MOVE.W    D4,14(A0)
  1711. IS_UP        RTS
  1712. NO_BLIT_SPEED    MOVEQ    #12,D0
  1713.         Rbra    L_CUSTOM
  1714.  
  1715. L_BLIT_LEFT    EQU    47
  1716. L47        MOVE.L    20(A3),D1
  1717.         Rjsr    L_GetEc
  1718.         MOVE.L    D0,A2        BITMAP ADRESSEN
  1719.         MOVE.W    EcNPlan(A0),D7    AANTAL PLANES
  1720.         SUBQ.W    #1,D7        -1 VOOR DBRA
  1721.         MOVE.L    (A3)+,D6    SHIFT
  1722.         BMI    DESCENDING_LEFT
  1723.         MOVE.L    (A3)+,D5    Y1
  1724.         CMP.W    EcTy(A0),D5
  1725.         Rbhi    L_IFonc
  1726.         MOVE.L    (A3)+,D3    X1
  1727.         AND.W    #$FFF0,D3
  1728.         MOVE.L    (A3)+,D4    Y
  1729.         Rbmi    L_IFonc
  1730.         MOVE.L    (A3)+,D2    X
  1731.         Rbmi    L_IFonc
  1732.         AND.W    #$FFF0,D2
  1733.         CMP.W    D3,D2
  1734.         Rbge    L_IFonc
  1735.         CMP.W    D5,D4
  1736.         Rbge    L_IFonc
  1737.         MOVE.L    D4,D0
  1738.         MULU    EcTligne(A0),D0    Y * BYTES REGEL
  1739.         MOVE.L    D2,D1
  1740.         LSR.W    #3,D1        X / 8
  1741.         ADD.W    D0,D1        OFFSET= Y * BYTES REGEL + X / 8
  1742.         SUB.W    D2,D3        X1 - X
  1743.         LSR.W    #3,D3        (X1 - X) / 8
  1744.         MOVE.W    EcTligne(A0),D0
  1745.         SUB.W    D3,D0        BLTAMOD    = BYTES REGEL - (X1 - X) / 8
  1746.         SUB.W    D4,D5        (Y1 - Y)
  1747.         ASL.W    #6,D5        (Y1 - Y) * 64
  1748.         LSR.W    #1,D3        (X1 - X) / 16        
  1749.         ADD.W    D3,D5        BLTSIZE
  1750.         MOVEQ    #-1,D2
  1751.         LSL.L    D6,D2        BLTAFLWM
  1752.         ROR.L    #4,D6
  1753.         ADD.L    #$9F00000,D6    BLTCON01
  1754.         LEA    $DFF000,A1
  1755.         MOVE.L    T_RASTPORT(A5),A0
  1756.         MOVEQ    #0,D4
  1757. LOOP_A_LEFT    BTST    D4,24(A0)
  1758.         BEQ.S    SKIP_A_BLIT
  1759. LOOP_A_LEFT1    BTST    #14,2(A1)
  1760.         BNE.S    LOOP_A_LEFT1
  1761.         ADDQ    #1,D4
  1762.         MOVE.L    D2,$44(A1)    BLTAFLWM
  1763.         MOVE.L    #0,$60(A1)    BLTCBMOD
  1764.         MOVE.W    D0,$64(A1)    BLTAMOD
  1765.         MOVE.W    D0,$66(A1)    BLTDMOD
  1766.         MOVE.L    (A2)+,D3    ADRES PLANES 1 - > 6
  1767.         ADD.L    D1,D3
  1768.         MOVE.L    D6,$40(A1)
  1769.         MOVE.L    D3,$50(A1)    SOURCE ADRES
  1770.         MOVE.L    D3,$54(A1)    DEST ADRES
  1771.         MOVE.W    D5,$58(A1)    BLTSIZE
  1772.         DBRA    D7,LOOP_A_LEFT
  1773.         ADDQ.L    #4,A3        ADJUST STACK !
  1774.         RTS
  1775. SKIP_A_BLIT    ADDQ.L    #4,A2
  1776.         ADDQ    #1,D4
  1777.         DBRA    D7,LOOP_A_LEFT
  1778.         ADDQ.L    #4,A3
  1779.         RTS
  1780. DESCENDING_LEFT    NEG.L    D6
  1781.         MOVE.L    (A3)+,D5    Y1
  1782.         CMP.W    EcTy(A0),D5
  1783.         Rbhi    L_IFonc
  1784.         MOVE.L    (A3)+,D3    X1
  1785.         AND.W    #$FFF0,D3
  1786.         MOVE.L    (A3)+,D4    Y
  1787.         Rbmi    L_IFonc
  1788.         MOVE.L    (A3)+,D2    X
  1789.         Rbmi    L_IFonc
  1790.         AND.W    #$FFF0,D2
  1791.         CMP.W    D3,D2
  1792.         Rbge    L_IFonc
  1793.         CMP.W    D5,D4
  1794.         Rbge    L_IFonc
  1795.         MOVEM.L    D2-5,-(SP)
  1796.         SUB.W    D4,D5        Y1 - Y
  1797.         MULU    EcTligne(A0),D5    (Y1 - Y) * BYTES REGEL
  1798.         SUB.W    D2,D3        X1 - X
  1799.         ASR.W    #3,D3        (X1 - X) / 8
  1800.         ADD.W    D3,D5
  1801.         SUBQ.W    #2,D5
  1802.         SUB.W    EcTligne(A0),D5
  1803.         MOVE.L    D5,A1        DESCENDING OFFSET
  1804.         MOVEM.L    (SP)+,D2-5
  1805.         MOVE.L    D4,D0
  1806.         MULU    EcTligne(A0),D0    Y * BYTES REGEL
  1807.         MOVE.L    D2,D1
  1808.         LSR.W    #3,D1        X / 8
  1809.         ADD.W    D0,D1        OFFSET= Y * BYTES REGEL + X / 8
  1810.         ADD.L    A1,D1        OFFSET + DESCENDING OFFSET
  1811.         SUB.W    D2,D3        X1 - X
  1812.         LSR.W    #3,D3        (X1 - X) / 8
  1813.         MOVE.W    EcTligne(A0),D0
  1814.         SUB.W    D3,D0        BLTAMOD    = BYTES REGEL - (X1 - X) / 8
  1815.         SUB.L    D4,D5        (Y1 - Y)
  1816.         ASL.W    #6,D5        (Y1 - Y) * 64
  1817.         LSR.W    #1,D3        (X1 - X) / 16        
  1818.         ADD.W    D3,D5        BLTSIZE
  1819.         MOVEQ    #-1,D2
  1820.         LSR.L    D6,D2        BLTAFLWM
  1821.         SWAP     D2
  1822.         ROR.L    #4,D6
  1823.         ADD.L    #$9F00002,D6    BLTCON01
  1824.         LEA    $DFF000,A1
  1825.         MOVE.L    T_RASTPORT(A5),A0
  1826.         MOVEQ    #0,D4
  1827. LOOP_D_LEFT    BTST    D4,24(A0)
  1828.         BEQ.S    SKIP_D_BLIT
  1829. LOOP_D_LEFT1    BTST    #14,2(A1)
  1830.         BNE.S    LOOP_D_LEFT1
  1831.         ADDQ    #1,D4
  1832.         MOVE.L    D2,$44(A1)    BLTAFLWM
  1833.         MOVE.L    #0,$60(A1)    BLTCBMOD
  1834.         MOVE.W    D0,$64(A1)    BLTAMOD
  1835.         MOVE.W    D0,$66(A1)    BLTDMOD
  1836.         MOVE.L    (A2)+,D3    ADRES PLANES 1 - > 6
  1837.         ADD.L    D1,D3
  1838.         MOVE.L    D6,$40(A1)
  1839.         MOVE.L    D3,$50(A1)    SOURCE ADRES
  1840.         MOVE.L    D3,$54(A1)    DEST ADRES
  1841.         MOVE.W    D5,$58(A1)    BLTSIZE
  1842.         DBRA    D7,LOOP_D_LEFT
  1843.         ADDQ.L    #4,A3        ADJUST STACK !
  1844.         RTS
  1845. SKIP_D_BLIT    ADDQ.L    #4,A2
  1846.         ADDQ    #1,D4
  1847.         DBRA    D7,LOOP_D_LEFT
  1848.         ADDQ.L    #4,A3
  1849.         RTS
  1850.  
  1851. L_BLIT_CLEAR    EQU    48
  1852. L48        LEA    $DFF000,A1
  1853.         MOVE.L    ScOnAd(A5),A0
  1854.         MOVE.W    EcNPlan(A0),D7
  1855.         MOVE.W    EcTLigne(A0),D6    BYTES REGEL
  1856.         ASR.W    #1,D6        WORDS REGEL
  1857.         MOVE.W    EcTy(A0),D5
  1858.         ASL.W    #6,D5        Y * 64
  1859.         ADD.W    D5,D6        BLITSIZE
  1860.         MOVEQ    #0,D1        INIT BLTADAT/BLTDMOD
  1861.         MOVEQ    #-1,D2        INIT BLTAFLWM
  1862.         MOVE.L    (A3)+,D0    PLANE TO BE ERASED !
  1863.         BMI.S    ALL_PLANES
  1864.         Rbeq    L_IFonc
  1865.         SUBQ    #1,D0
  1866.         CMP.W    D7,D0
  1867.         Rbge    L_IFonc 
  1868. SELECT_PLANE    MOVE.L    (A0)+,A2
  1869.         DBRA    D0,SELECT_PLANE
  1870. ERASE_SINGLE    BTST    #14,2(A1)
  1871.         BNE.S    ERASE_SINGLE
  1872.         MOVE.W    D1,$74(A1)        BLTADAT
  1873.         MOVE.W    D1,$66(A1)        BLTDMOD
  1874.         MOVE.L    D2,$44(A1)        BLTAFLWM
  1875.         MOVE.L    #$01F00000,$40(A1)    BLTCON0/1
  1876.         MOVE.L    A2,$54(A1)        ADRES PLANE 1 -> 6
  1877.         MOVE.W    D6,$58(A1)        BLTSIZE
  1878.         RTS    
  1879. ALL_PLANES    SUBQ    #1,D7
  1880.         MOVE.L    T_RASTPORT(A5),A2
  1881.         MOVEQ    #0,D3
  1882. ERASE_ALL    BTST    #14,2(A1)
  1883.         BNE.S    ERASE_ALL
  1884.         BTST    D3,24(A2)
  1885.         BEQ.S    SKIP_CLEAR
  1886.         ADDQ    #1,D3
  1887.         MOVE.W    D1,$74(A1)        BLTADAT
  1888.         MOVE.W    D1,$66(A1)        BLTDMOD
  1889.         MOVE.L    D2,$44(A1)        BLTAFLWM
  1890.         MOVE.L    #$01F00000,$40(A1)    BLTCON0/1
  1891.         MOVE.L    (A0)+,$54(A1)        ADRES PLANES 1 -> 6
  1892.         MOVE.W    D6,$58(A1)        BLTSIZE
  1893.         DBRA    D7,ERASE_ALL
  1894.         RTS
  1895. SKIP_CLEAR    ADDQ.L    #4,A0
  1896.         ADDQ    #1,D3
  1897.         DBRA    D7,ERASE_ALL
  1898.         RTS
  1899.  
  1900. L_FAST_PLOT    EQU    49
  1901. L49        MOVE.L    ScOnAd(A5),A0
  1902.         MOVEQ.L    #0,D2
  1903.         MOVE.L    (A3)+,D3    COLOUR
  1904.         Rbmi    L_IFonc
  1905.         MOVE.L    (A3)+,D7    Y
  1906.         BMI.S    NO_PLOT1
  1907.         CMP.W    EcTy(A0),D7
  1908.         BGE.S    NO_PLOT1
  1909.         MOVE.L    (A3)+,D6    X
  1910.         BMI.S    NO_PLOT
  1911.         MOVE.W    EcTligne(A0),D4
  1912.         MOVE.W    D4,D5
  1913.         ASL.W    #3,D5
  1914.         CMP.W    D5,D6
  1915.         BGE.S    NO_PLOT
  1916.         MULU    D4,D7        D4 -> EcTligne(A0)
  1917.         MOVE.W    D6,D5
  1918.         ASR.W    #3,D6
  1919.         ADD.W    D6,D7        OFFSET
  1920.         NOT    D5
  1921.         MOVE.W    EcNPlan(A0),D0
  1922.         SUBQ.W    #1,D0
  1923.         TST.W    EcAuto(A0)
  1924.         Rbeq    L_PLOT
  1925.         MOVEM.L    D0-D7/A0-2,-(SP)
  1926.         EcCall    AutoBack1
  1927.         MOVEM.L    (SP),D0-7/A0-2
  1928.         BTST    #BitDble,EcFlags(A0)
  1929.         BEQ.S    ABPac1
  1930.         Rbsr    L_PLOT
  1931.         EcCall    AutoBack2
  1932.         MOVEM.L    (SP),D0-7/A0-2
  1933.         Rbsr    L_PLOT
  1934.         EcCall    Autoback3
  1935.         BRA.S    ABPac2
  1936. ABPac1        Rbsr    L_PLOT
  1937.         EcCall    AutoBack4
  1938. ABPac2        MOVEM.L    (SP)+,D0-7/A0-2
  1939. NO_PLOT        RTS
  1940. NO_PLOT1    ADDQ.L    #4,A3
  1941.         RTS
  1942.  
  1943. L_PLOT        EQU    50
  1944. L50        LEA    EcCurrent(A0),A2
  1945. SET_BIT_LOOP    MOVE.L    A2,A1
  1946.         MOVE.L    (A1),A1
  1947.         BTST    D2,D3
  1948.         BEQ.S    BIT_CLEAR
  1949.         BSET    D5,(A1,D7.L)
  1950.         ADDQ.W    #1,D2
  1951.         ADDQ.L    #4,A2
  1952.         DBRA    D0,SET_BIT_LOOP
  1953.         RTS
  1954. BIT_CLEAR    BCLR    D5,(A1,D7.L)
  1955.         ADDQ.W    #1,D2
  1956.         ADDQ.L    #4,A2
  1957.         DBRA    D0,SET_BIT_LOOP
  1958.         RTS
  1959.  
  1960. L_FAST_POINT    EQU    51
  1961. L51        MOVEQ    #-1,D3        INIT RESULT
  1962.         MOVE.L    ScOnAd(A5),A0
  1963.         MOVE.L    (A3)+,D7    Y
  1964.         BMI.S    NO_POINT1
  1965.         CMP.W    EcTy(A0),D7
  1966.         BGE.S    NO_POINT1
  1967.         MOVE.L    (A3)+,D6    X
  1968.         BMI.S    NO_POINT
  1969.         MOVE.W    EcTligne(A0),D5
  1970.         MOVE.W    D5,D4
  1971.         ASL.W    #3,D5
  1972.         CMP.W    D5,D6
  1973.         BGE.S    NO_POINT
  1974.         MOVEQ    #0,D3
  1975.         MULU    D4,D7
  1976.         MOVE.W    D6,D4
  1977.         ASR.W    #3,D6
  1978.         ADD.W    D6,D7        OFFSET
  1979.         NOT    D4
  1980.         MOVE.W    EcNPlan(A0),D2
  1981.         MOVEQ    #0,D5
  1982.         SUBQ    #1,D2
  1983. CHEK_POINT_LOOP    MOVE.L    (A0)+,A1
  1984.         BTST    D4,(A1,D7.L)
  1985.         BEQ.S    NO_BIT_SET
  1986.         BSET    D5,D3
  1987. NO_BIT_SET    ADDQ    #1,D5
  1988.         DBRA    D2,CHEK_POINT_LOOP
  1989.         MOVEQ    #0,D2
  1990.         RTS
  1991. NO_POINT    MOVEQ    #0,D2
  1992.         RTS
  1993. NO_POINT1    ADDQ.L    #4,A3
  1994.         MOVEQ    #0,D2
  1995.         RTS
  1996.  
  1997. L_RES_STARS    EQU    52
  1998. L52        MOVE.L    (A3)+,D0
  1999.         Rble    L_IFonc
  2000.         CMP.W    #4001,D0
  2001.         Rbge    L_IFonc
  2002.         Dload    A2
  2003.         MOVE.W    STARS_COUNT-MB(A2),D1
  2004.         BNE    STARS_DEFINED
  2005.         MOVE.W    D0,STARS_COUNT-MB(A2)
  2006.         MULU    #8,D0
  2007.         MOVE.L    #MEMF_CHIP+MEMF_CLEAR,D1
  2008.         MOVE.L    A6,A2
  2009.         CALLEXEC AllocMem
  2010.         MOVE.L    A2,A6
  2011.         Rbeq    OUT_OF_MEM
  2012.         Dload    A2
  2013.         MOVE.L    D0,STARS_ADRES-MB(A2)
  2014.         MOVEQ    #2,D0
  2015.         MOVE.L    ScOnAd(A5),A0
  2016. *        STORE ADRES OF SCREEN FOR STARS INTERRUPT ROUTINE
  2017. *        THIS ADRES IS NOT USED BY THE NORMAL 'STAR' ROUTINES !
  2018.         MOVE.L    A0,STARS_INT_SCREEN-MB(A2)
  2019.         MULU    EcTy(A0),D0
  2020.         MOVE.W    D0,OFFSET_COUNT-MB(A2)
  2021.         MOVE.L    #MEMF_CHIP+MEMF_CLEAR,D1
  2022.         MOVE.L    A6,A2
  2023.         CALLEXEC AllocMem
  2024.         MOVE.L    A2,A6
  2025.         Dload    A2
  2026.         MOVE.L    D0,OFFSET_ADRES-MB(A2)        
  2027.         MOVE.L    D0,A1
  2028.         MOVE.L    ScOnAd(A5),A0
  2029.         MOVE.W    EcTy(A0),D7
  2030.         MOVE.W    EcTLigne(A0),D6
  2031.         SUBQ    #1,D7
  2032.         MOVEQ    #0,D1
  2033. OFFSET_LOOP    MOVE.W    D1,D0
  2034.         MULU    D6,D0
  2035.         MOVE.W    D0,(A1)+
  2036.         ADDQ    #1,D1
  2037.         CMP.W    D7,D1
  2038.         BLE.S    OFFSET_LOOP
  2039.         Dlea    STARS_CLIP,A2
  2040.         CLR.L    (A2)+            X,Y CLIP=0
  2041.         MOVE.L    ScOnAd(A5),A0
  2042.         MOVE.W    EcTLigne(A0),D0
  2043.         ASL.W    #3,D0            X1
  2044.         MOVE.W    D0,(A2)+
  2045.         MOVE.W    EcTy(A0),(A2)        Y1
  2046.         RTS
  2047. STARS_DEFINED    MOVEQ    #8,D0
  2048.         Rbra    L_CUSTOM
  2049.     
  2050. L_DEF_STAR    EQU    53
  2051. L53        Dload    A2
  2052.         MOVE.L    (A3)+,D4    Y SPEED
  2053.         MOVE.L    (A3)+,D3    X SPEED
  2054.         MOVE.L    (A3)+,D2    Y
  2055.         Rbmi    L_IFonc
  2056.         MOVE.L    (A3)+,D1    X
  2057.         Rbmi    L_IFonc
  2058.         MOVE.L    (A3)+,D0    STAR NR
  2059.         Rble    L_IFonc
  2060.         SUBQ    #1,D0
  2061.         TST.W    STARS_COUNT-MB(A2)
  2062.         BEQ.S    NO_STARS_RESERVED
  2063.         CMP.W    STARS_COUNT-MB(A2),D0
  2064.         Rbge    L_IFonc        NO STARS DEFINED OR 'STAR NR' >COUNT?
  2065.         ASL.W    #3,D0
  2066.         MOVE.L    STARS_ADRES-MB(A2),A2
  2067.         MOVEM.W    D1-4,(A2,D0.W)
  2068.         RTS
  2069. NO_STARS_RESERVED
  2070.         MOVEQ    #9,D0
  2071.         Rbra    L_CUSTOM
  2072.  
  2073. L_DRAW_STARS    EQU    54
  2074. L54        Dload    A2
  2075.         MOVE.W    STARS_COUNT-MB(A2),D7    HOW MANY STARS ?
  2076.         Rbeq    L_IFonc            NO STARS DEFINED
  2077.         SUBQ.W    #1,D7
  2078.         MOVEM.L    A3-A6,-(SP)
  2079.         MOVE.L    OFFSET_ADRES-MB(A2),A6    START ADRES OF EVERY LINE
  2080.         MOVE.L    ScOnAd(A5),A4        ADRES ACTUAL SCREEN
  2081.         MOVE.L    (A4),A0            PTR TO BITMAP ETC...
  2082.         Dlea    STARS_CLIP,A3        CLIP DEFINITIONS
  2083.         MOVEM.W    (A3),D1/A1/A3/A5    MIN X,MIN Y,MAX X,MAX Y
  2084.         MOVE.L    STARS_ADRES-MB(A2),A2    STAR DEFINITIONS
  2085.         MOVEQ    #0,D0            VALUE FOR TESTING SPEED
  2086. STARS1_LOOP    MOVEM.W    (A2),D3-6        3=X 4=Y 5=X SPEED 6= Y SPEED
  2087.         CMP.W    D0,D5            X SPEED = 0 ?
  2088.         BEQ.S    NO_X_SPEED
  2089.         ADD.W    D3,D5
  2090.         CMP.W    A3,D5            X >= MAX X ?
  2091.         BGE.S    X_OFF_SCREEN
  2092.         CMP.W    D1,D5            X < MIN X ?
  2093.         BLT.S    X_OFF_SCREEN1    
  2094.         MOVE.W    D5,(A2)            NEW COORD = OK
  2095.         BRA.S    X_ON_SCREEN
  2096. X_OFF_SCREEN    SUB.W    A3,D5            
  2097.         MOVE.W    D5,(A2)            NEW COORD = X - MAX X
  2098.         BRA.S    X_ON_SCREEN
  2099. X_OFF_SCREEN1    ADD.W    D5,A3
  2100.         MOVE.W    A3,(A2)            NEW COORD = MAX X + (-X)
  2101. X_ON_SCREEN
  2102. NO_X_SPEED    CMP.W    D0,D6            Y SPEED = 0 ?
  2103.         BEQ.S    NO_Y_SPEED
  2104.         ADD.W    D4,D6
  2105.         CMP.W    A1,D6            Y < MIN Y ?
  2106.         BLT.S    Y_OFF_SCREEN1
  2107.         CMP.W    A5,D6            Y >= MAX Y ?
  2108.         BGE.S    Y_OFF_SCREEN
  2109.         MOVE.W    D6,2(A2)        NEW COORD = OK
  2110.         BRA.S    Y_ON_SCREEN
  2111. Y_OFF_SCREEN    SUB.W    A5,D6
  2112.         MOVE.W    D6,2(A2)        NEW COORD = Y - MAX Y
  2113.         BRA.S    Y_ON_SCREEN
  2114. Y_OFF_SCREEN1    ADD.W    D6,A5
  2115.         MOVE.W    A5,2(A2)        NEW COORD = MAX Y + (-Y)
  2116. Y_ON_SCREEN
  2117. NO_Y_SPEED    ADD.W    D4,D4            FIND START ADRES OF LINE
  2118.         MOVE.W    D3,D5            SAVE X -> PIXELS
  2119.         NOT    D5
  2120.         ASR.W    #3,D3            SCREEN OFFSET -> ONLY X (BYTES)
  2121.         ADD.W    (A6,D4.W),D3            ADD SCREEN OFFSETS -> X+Y
  2122.         BSET    D5,(A0,D3.W)        SET BIT ON SCREEN
  2123.         ADDQ.L    #8,A2            ADRES OF NEXT STAR
  2124.         DBRA    D7,STARS1_LOOP        GO ON !
  2125.         MOVEM.L    (SP)+,A3-A6
  2126.         RTS
  2127.  
  2128. L_ERASE_STARS    EQU    55
  2129. L55        Dload    A2
  2130.         MOVE.W    STARS_COUNT-MB(A2),D0
  2131.         BEQ.S    STARS_ERASED
  2132.         EXT.L    D0
  2133.         MULU    #8,D0
  2134.         MOVE.W    #0,STARS_COUNT-MB(A2)
  2135.         MOVE.L    STARS_ADRES-MB(A2),A1
  2136.         MOVE.L    A6,A2
  2137.         CALLEXEC FreeMem
  2138.         MOVE.L    A2,A6
  2139.         Dload    A2
  2140.         MOVE.W    OFFSET_COUNT-MB(A2),D0
  2141.         EXT.L    D0
  2142.         MOVE.L    OFFSET_ADRES-MB(A2),A1
  2143.         MOVE.L    A6,A2
  2144.         CALLEXEC FreeMem
  2145.         MOVE.L    A2,A6
  2146. STARS_ERASED    RTS
  2147.  
  2148. L_COMPUTE_STARS    EQU    56
  2149. L56        Dload    A2
  2150.         MOVE.L    (A3)+,D3        TO PARAM
  2151.         Rbeq    L_IFonc            CHECK VALUE !!!
  2152.         SUBQ    #1,D3
  2153.         CMP.W    STARS_COUNT-MB(A2),D3
  2154.         Rbge    L_IFonc            NO STARS DEFINED ?
  2155.         MOVE.L    (A3)+,D7        FROM PARAM
  2156.         Rbeq    L_IFonc            CHECK VALUE !!!
  2157.         SUBQ    #1,D7
  2158.         MOVE.W    D3,COMPUTE_TO-MB(A2)    STORE "TO" VALUE
  2159.         MOVEM.L    A3-A6,-(SP)
  2160.         MOVE.L    OFFSET_ADRES-MB(A2),A6    Y OFFSETS (FOR MORE SPEED)
  2161.         MOVE.L    STARS_ADRES-MB(A2),A2    STARS DEFINITIONS
  2162.         MOVE.L    D7,D4            COMPUTE ADRESS OF
  2163.         LSL.W    #3,D4            FIRST STAR TO BE
  2164.         ADD.L    D4,A2            PROCESSED...
  2165.         DLOAD    A4
  2166.         Dlea    STARS_CLIP,A3        CLIP DEFINITIONS
  2167.         MOVEM.W    (A3),D1/A1/A3/A5    MIN X,MIN Y,MAX X,MAX Y
  2168.         MOVEQ    #0,D0            RESET AND CHECK VALUE
  2169. STARS1_COMP    MOVEM.W    (A2),D3-6        3=X 4=Y 5=X SPEED 6= Y SPEED
  2170.         CMP.W    D0,D5            X SPEED = 0 ?
  2171.         BEQ.S    NO_X_SPEED_C
  2172.         ADD.W    D3,D5
  2173.         CMP.W    A3,D5            X >= MAX X ?
  2174.         BGE.S    X_OFF_SCREEN_C
  2175.         CMP.W    D1,D5            X < MIN X ?
  2176.         BLT.S    X_OFF_SCREEN1_C    
  2177.         MOVE.W    D5,(A2)            NEW COORD = OK
  2178.         BRA.S    X_ON_SCREEN_C
  2179. X_OFF_SCREEN_C    SUB.W    A3,D5            
  2180.         MOVE.W    D5,(A2)            NEW COORD = X - MAX X
  2181.         BRA.S    X_ON_SCREEN_C
  2182. X_OFF_SCREEN1_C    ADD.W    D5,A3
  2183.         MOVE.W    A3,(A2)            NEW COORD = MAX X + (-X)
  2184. X_ON_SCREEN_C
  2185. NO_X_SPEED_C    CMP.W    D0,D6            Y SPEED = 0 ?
  2186.         BEQ.S    NO_Y_SPEED_C
  2187.         ADD.W    D4,D6
  2188.         CMP.W    A1,D6            Y < MIN Y ?
  2189.         BLT.S    Y_OFF_SCREEN1_C
  2190.         CMP.W    A5,D6            Y >= MAX Y ?
  2191.         BGE.S    Y_OFF_SCREEN_C
  2192.         MOVE.W    D6,2(A2)        NEW COORD = OK
  2193.         BRA.S    Y_ON_SCREEN_C
  2194. Y_OFF_SCREEN_C    SUB.W    A5,D6
  2195.         MOVE.W    D6,2(A2)        NEW COORD = Y - MAX Y
  2196.         BRA.S    Y_ON_SCREEN_C
  2197. Y_OFF_SCREEN1_C    ADD.W    D6,A5
  2198.         MOVE.W    A5,2(A2)        NEW COORD = MAX Y + (-Y)
  2199. Y_ON_SCREEN_C
  2200. NO_Y_SPEED_C    ADDQ.L    #8,A2
  2201.         ADDQ    #1,D7
  2202.         CMP.W    COMPUTE_TO-MB(A4),D7
  2203.         BLE.S    STARS1_COMP
  2204.         MOVEM.L    (SP)+,A3-A6
  2205.         RTS
  2206.  
  2207. L_F_STARS    EQU    57
  2208. L57        Dload    A2
  2209.         MOVE.W    STARS_COUNT-MB(A2),D7    HOW MANY STARS ?
  2210.         Rbeq    L_IFonc            NO STARS DEFINED ?
  2211.         SUBQ.W    #1,D7            -1 FOR DBRA
  2212.         MOVE.L    A4,-(SP)
  2213.         MOVE.L    A6,-(SP)
  2214.         MOVE.L    ScOnAd(A5),A4        ADRES ACTUAL SCREEN
  2215.         MOVE.L    OFFSET_ADRES-MB(A2),A6    Y OFFSETS (FOR MORE SPEED)
  2216.         MOVE.L    STARS_ADRES-MB(A2),A2    STAR DEFINITIONS
  2217.         MOVE.L    (A4),A0            FIRST BITPLANE OF SCREEN
  2218. STARS1_F_LOOP    MOVEM.W    (A2)+,D3-6        3=X 4=Y 5=X SPEED 6= Y SPEED
  2219.         ADD.W    D4,D4            (SPEED FACTORS NOT USED !!!)
  2220.         MOVE.W    D3,D5            SAVE X -> PIXELS
  2221.         NOT    D5
  2222.         ASR.W    #3,D3            SCREEN OFFSET -> ONLY X (BYTES)
  2223.         ADD.W    (A6,D4.W),D3            ADD SCREEN OFFSETS -> X+Y
  2224.         BSET    D5,(A0,D3.W)        SET BIT ON SCREEN
  2225.         DBRA    D7,STARS1_F_LOOP    NEXT STAR...
  2226. EXIT_F_STARS    MOVE.L    (SP)+,A6
  2227.         MOVE.L    (SP)+,A4
  2228.         RTS
  2229.  
  2230. L_STARS_SPEED    EQU    58
  2231. L58        MOVE.L    (A3)+,D4        NEW Y SPEED
  2232.         MOVE.L    (A3)+,D3        NEW X SPEED
  2233.         MOVE.L    (A3)+,D2        TO PARAM
  2234.         MOVE.L    (A3)+,D1        FROM PARAM
  2235.         Rbeq    l_IFonc
  2236.         CMP.W    D1,D2
  2237.         Rble    L_IFonc
  2238.         Dload    A2
  2239.         SUBQ    #1,D2
  2240.         CMP.W    STARS_COUNT-MB(A2),D2
  2241.         Rbge    L_IFonc            NO STARS DEFINED ?
  2242.         SUBQ    #1,D1
  2243.         MOVE.L    D1,D5
  2244.         ASL.W    #3,D5
  2245.         MOVE.L    STARS_ADRES-MB(A2),A1
  2246.         ADD.L    D5,A1
  2247. SPEED_LOOP    ADDQ.L    #4,A1
  2248.         MOVE.W    D3,(A1)+
  2249.         MOVE.W    D4,(A1)+
  2250.         ADDQ    #1,D1
  2251.         CMP.W    D2,D1
  2252.         BLE.S    SPEED_LOOP
  2253.         RTS
  2254.                 
  2255. L_CLIP_STARS    EQU    59
  2256. L59        MOVE.L    (A3)+,D7        MAX Y
  2257.         MOVE.L    (A3)+,D6        MAX X
  2258.         MOVE.L    (A3)+,D5        MIN Y
  2259.         Rbmi    L_IFonc            MIN Y < 0 ? ERROR
  2260.         MOVE.L    (A3)+,D4        MIN X
  2261.         Rbmi    L_IFonc            MIN X < 0 ? ERROR
  2262.         CMP.W    D4,D6
  2263.         Rble    L_IFonc            MAX X <= MIN X ? ERROR
  2264.         CMP.W    D5,D7
  2265.         Rble    L_IFonc            MAX Y <= MIN Y ? ERROR
  2266.         MOVE.L    ScOnAd(A5),A0        ACTUAL SCREEN
  2267.         MOVE.W    EcTy(A0),D3        MAX Y OF SCREEN
  2268.         MOVE.W    EcTLigne(A0),D2
  2269.         ASL.W    #3,D2            MAX X OF SCREEN
  2270.         Dlea    STARS_CLIP,A1        CLIP DEFINITIONS
  2271.         CMP.W    D2,D4            
  2272.         Rbge    L_IFonc            MIN X >= MAX X OF SCREEN ?
  2273.         MOVE.W    D4,(A1)+        STORE NEW MIN X
  2274.         CMP.W    D3,D5
  2275.         Rbge    L_IFonc            MIN Y >= MAX Y OF SCREEN ?
  2276.         MOVE.W    D5,(A1)+        STORE NEW MIN Y
  2277.         CMP.W    D2,D6
  2278.         BGE.S    X_TOO_BIG        MAX X >= MAX X OF SCREEN ?
  2279.         MOVE.W    D6,(A1)+        STORE NEW MAX X        
  2280.         BRA.S    Y_TEST
  2281. X_TOO_BIG    SUBQ    #1,D2
  2282.         MOVE.W    D2,(A1)+        NEW MAX X = MAX X OF SCREEN-1
  2283. Y_TEST        CMP.W    D3,D7
  2284.         BGE.S    Y_TOO_BIG        MAX Y >= MAX Y OF SCREEN ?
  2285.         MOVE.W    D7,(A1)            STORE NEW MAX Y
  2286.         BRA.S    CLIPS_OK
  2287. Y_TOO_BIG    SUBQ    #1,D3
  2288.         MOVE.W    D3,(A1)            NEW MAX Y = MAX Y OF SCREEN-1
  2289. CLIPS_OK    RTS
  2290.  
  2291. L_LEFT_CLICK    EQU    60
  2292. L60        BTST    #6,$BFE001
  2293.         BEQ.S    LEFT_CLICK        IS SOMEONE CLICKING ?
  2294.         MOVEQ.L    #0,D3            RETURN FALSE
  2295.         MOVEQ.L    #0,D2            INTEGER VALUE
  2296.         RTS
  2297. LEFT_CLICK    MOVEQ.L    #-1,D3            RETURN TRUE
  2298.         MOVEQ.L    #0,D2            INTEGER VALUE
  2299.         RTS
  2300.  
  2301. L_F_CIRCLE    EQU    61
  2302. L61        MOVE.L    (A3)+,D7    COLOUR
  2303.         Rbmi    L_IFonc
  2304.         MOVE.L    (A3)+,D6    R
  2305.         Rble    L_IFonc
  2306.         MOVE.L    (A3)+,D5    OFFY
  2307.         MOVE.L    (A3)+,D4    OFFX
  2308.         MOVE.W    D6,D3        R ->D3
  2309.         ASL.L    #8,D3        R * 256
  2310.         DIVU    #362,D3        (R * 256)/ 362
  2311.         BEQ.S    NO_ADD
  2312.         ADDQ    #1,D3        1 + (R * 256)/ 362 = TELLER
  2313. NO_ADD        MULU    D6,D6        R*R
  2314.         MOVE.L    ScOnAd(A5),A2
  2315.         MOVEM.L    A4-6,-(SP)
  2316.         MOVEM.W    EcTX(A2),A4-A6    EcTx, EcTy, EcNPlan
  2317.         SUBQ    #1,A6
  2318.         MOVE.W    D7,-(A3)    PASS COLOUR ONLY ONCE !
  2319. CIRCLE_LOOP    MOVE.W    D3,D0        X ->D0
  2320.         MULU    D0,D0        X*X
  2321.         NEG.L    D0        -(X*X)
  2322.         ADD.L    D6,D0        -(X*X)+(R*R)
  2323.         MOVE.W    D3,A1        \
  2324.         MOVEQ    #0,D1        |
  2325.         move.w    #$4000,d2    |
  2326. ROOT_CIRC    move.w    d1,d3        |
  2327.         add.w    d2,d3        |
  2328.         lsr.w    #1,d1        |
  2329.         cmp.w    d3,d0        |
  2330.         ble.s    BOING_CIRC    |
  2331.         sub.w    d3,d0        |---> ROOT OF -(X*X)+(R*R)
  2332.         or.w    d2,d1        |
  2333. BOING_CIRC    lsr.w    #2,d2        |     IN D2    
  2334.         bne.s    ROOT_CIRC    |
  2335.         cmp.w    d1,d0        |
  2336.         blt.s    NO_ROUND_CIRC    |
  2337.         addq    #1,d1        |
  2338. NO_ROUND_CIRC    MOVE.W    A1,D3        /
  2339.         MOVE.W    D1,D2
  2340.         MOVE.W    EcTLigne(A2),D1
  2341.         MOVEM.W    D2-6,-(SP)        
  2342.         ADD.W    D3,D4        OFFX + X
  2343.         ADD.W    D2,D5        OFFY + Y
  2344. *        MOVE.W    D4,-(A3)    \            X
  2345. *        MOVE.W    D5,-(A3)     |--> PASS PARAMS    Y
  2346.         MOVE.L    A2,A0
  2347.         MOVEQ.L    #0,D2
  2348.         MOVE.W    D5,D7    Y
  2349.         BMI.S    NO_CIRCLE1
  2350.         CMP.W    A5,D7
  2351.         BGE.S    NO_CIRCLE1
  2352.         MOVE.W    D4,D6    X
  2353.         BMI.S    NO_CIRCLE1
  2354.         CMP.W    A4,D6
  2355.         BGE.S    NO_CIRCLE1
  2356.         MOVE.W    (A3),D3        COLOUR
  2357.         MULU    D1,D7
  2358. *        MULU    EcTligne(A0),D7
  2359.         MOVEQ.L    #7,D4
  2360.         MOVE.W    D6,D5
  2361.         ASR.W    #3,D6
  2362.         ADD.W    D6,D7        OFFSET
  2363.         AND.W    #%111,D5
  2364.         SUB.W    D5,D4
  2365.         MOVE.L    A6,D0
  2366. SET_BIT_CIRC1    MOVE.L    (A0)+,A1
  2367.         BTST    D2,D3
  2368.         BEQ.S    BIT_CLEAR_CIRC1
  2369.         BSET    D4,(A1,D7.L)
  2370.         ADDQ.W    #1,D2
  2371.         DBRA    D0,SET_BIT_CIRC1
  2372.         BRA.S    NO_CIRCLE1
  2373. BIT_CLEAR_CIRC1    BCLR    D4,(A1,D7.L)
  2374.         ADDQ.W    #1,D2
  2375.         DBRA    D0,SET_BIT_CIRC1
  2376. NO_CIRCLE1
  2377. *        Rbsr    L_CIRCLE_PLOT
  2378.         MOVEM.W    (SP),D2-6
  2379.         ADD.W    D3,D4        OFFX + X
  2380.         SUB.W    D2,D5        OFFY - Y
  2381. *        MOVE.W    D4,-(A3)    \            X
  2382. *        MOVE.W    D5,-(A3)     |--> PASS PARAMS    Y
  2383.         MOVE.L    A2,A0
  2384.         MOVEQ.L    #0,D2
  2385.         MOVE.W    D5,D7    Y
  2386.         BMI.S    NO_CIRCLE2
  2387.         CMP.W    A5,D7
  2388.         BGE.S    NO_CIRCLE2
  2389.         MOVE.W    D4,D6    X
  2390.         BMI.S    NO_CIRCLE2
  2391.         CMP.W    A4,D6
  2392.         BGE.S    NO_CIRCLE2
  2393.         MOVE.W    (A3),D3        COLOUR
  2394.         MULU    D1,D7
  2395. *        MULU    EcTligne(A0),D7
  2396.         MOVEQ.L    #7,D4
  2397.         MOVE.W    D6,D5
  2398.         ASR.W    #3,D6
  2399.         ADD.W    D6,D7        OFFSET
  2400.         AND.W    #%111,D5
  2401.         SUB.W    D5,D4
  2402.         MOVE.L    A6,D0
  2403. SET_BIT_CIRC2    MOVE.L    (A0)+,A1
  2404.         BTST    D2,D3
  2405.         BEQ.S    BIT_CLEAR_CIRC2
  2406.         BSET    D4,(A1,D7.L)
  2407.         ADDQ.W    #1,D2
  2408.         DBRA    D0,SET_BIT_CIRC2
  2409.         BRA.S    NO_CIRCLE2
  2410. BIT_CLEAR_CIRC2    BCLR    D4,(A1,D7.L)
  2411.         ADDQ.W    #1,D2
  2412.         DBRA    D0,SET_BIT_CIRC2
  2413. NO_CIRCLE2
  2414. *        Rbsr    L_CIRCLE_PLOT
  2415.         MOVEM.W    (SP),D2-6
  2416.         SUB.W    D3,D4        OFFX - X
  2417.         ADD.W    D2,D5        OFFY + Y
  2418. *        MOVE.W    D4,-(A3)    \
  2419. *        MOVE.W    D5,-(A3)     |--> PASS PARAMS
  2420.         MOVE.L    A2,A0
  2421.         MOVEQ.L    #0,D2
  2422.         MOVE.W    D5,D7    Y
  2423.         BMI.S    NO_CIRCLE3
  2424.         CMP.W    A5,D7
  2425.         BGE.S    NO_CIRCLE3
  2426.         MOVE.W    D4,D6    X
  2427.         BMI.S    NO_CIRCLE3
  2428.         CMP.W    A4,D6
  2429.         BGE.S    NO_CIRCLE3
  2430.         MOVE.W    (A3),D3        COLOUR
  2431.         MULU    D1,D7
  2432. *        MULU    EcTligne(A0),D7
  2433.         MOVEQ.L    #7,D4
  2434.         MOVE.W    D6,D5
  2435.         ASR.W    #3,D6
  2436.         ADD.W    D6,D7        OFFSET
  2437.         AND.W    #%111,D5
  2438.         SUB.W    D5,D4
  2439.         MOVE.L    A6,D0
  2440. SET_BIT_CIRC3    MOVE.L    (A0)+,A1
  2441.         BTST    D2,D3
  2442.         BEQ.S    BIT_CLEAR_CIRC3
  2443.         BSET    D4,(A1,D7.L)
  2444.         ADDQ.W    #1,D2
  2445.         DBRA    D0,SET_BIT_CIRC3
  2446.         BRA.S    NO_CIRCLE3
  2447. BIT_CLEAR_CIRC3    BCLR    D4,(A1,D7.L)
  2448.         ADDQ.W    #1,D2
  2449.         DBRA    D0,SET_BIT_CIRC3
  2450. NO_CIRCLE3
  2451. *        Rbsr    L_CIRCLE_PLOT
  2452.         MOVEM.W    (SP),D2-6
  2453.         SUB.W    D3,D4        OFFX - X
  2454.         SUB.W    D2,D5        OFFY - Y
  2455. *        MOVE.W    D4,-(A3)    \
  2456. *        MOVE.W    D5,-(A3)     |--> PASS PARAMS
  2457.         MOVE.L    A2,A0
  2458.         MOVEQ.L    #0,D2
  2459.         MOVE.W    D5,D7    Y
  2460.         BMI.S    NO_CIRCLE4
  2461.         CMP.W    A5,D7
  2462.         BGE.S    NO_CIRCLE4
  2463.         MOVE.W    D4,D6    X
  2464.         BMI.S    NO_CIRCLE4
  2465.         CMP.W    A4,D6
  2466.         BGE.S    NO_CIRCLE4
  2467.         MOVE.W    (A3),D3        COLOUR
  2468.         MULU    D1,D7
  2469. *        MULU    EcTligne(A0),D7
  2470.         MOVEQ.L    #7,D4
  2471.         MOVE.W    D6,D5
  2472.         ASR.W    #3,D6
  2473.         ADD.W    D6,D7        OFFSET
  2474.         AND.W    #%111,D5
  2475.         SUB.W    D5,D4
  2476.         MOVE.L    A6,D0
  2477. SET_BIT_CIRC4    MOVE.L    (A0)+,A1
  2478.         BTST    D2,D3
  2479.         BEQ.S    BIT_CLEAR_CIRC4
  2480.         BSET    D4,(A1,D7.L)
  2481.         ADDQ.W    #1,D2
  2482.         DBRA    D0,SET_BIT_CIRC4
  2483.         BRA.S    NO_CIRCLE4
  2484. BIT_CLEAR_CIRC4    BCLR    D4,(A1,D7.L)
  2485.         ADDQ.W    #1,D2
  2486.         DBRA    D0,SET_BIT_CIRC4
  2487. NO_CIRCLE4
  2488. *        Rbsr    L_CIRCLE_PLOT    
  2489.         MOVEM.W    (SP),D2-6
  2490.         SUB.W    D2,D4        OFFX - Y
  2491.         ADD.W    D3,D5        OFFY + X
  2492. *        MOVE.W    D4,-(A3)    \
  2493. *        MOVE.W    D5,-(A3)     |--> PASS PARAMS
  2494.         MOVE.L    A2,A0
  2495.         MOVEQ.L    #0,D2
  2496.         MOVE.W    D5,D7    Y
  2497.         BMI.S    NO_CIRCLE5
  2498.         CMP.W    A5,D7
  2499.         BGE.S    NO_CIRCLE5
  2500.         MOVE.W    D4,D6    X
  2501.         BMI.S    NO_CIRCLE5
  2502.         CMP.W    A4,D6
  2503.         BGE.S    NO_CIRCLE5
  2504.         MOVE.W    (A3),D3        COLOUR
  2505.         MULU    D1,D7
  2506. *        MULU    EcTligne(A0),D7
  2507.         MOVEQ.L    #7,D4
  2508.         MOVE.W    D6,D5
  2509.         ASR.W    #3,D6
  2510.         ADD.W    D6,D7        OFFSET
  2511.         AND.W    #%111,D5
  2512.         SUB.W    D5,D4
  2513.         MOVE.L    A6,D0
  2514. SET_BIT_CIRC5    MOVE.L    (A0)+,A1
  2515.         BTST    D2,D3
  2516.         BEQ.S    BIT_CLEAR_CIRC5
  2517.         BSET    D4,(A1,D7.L)
  2518.         ADDQ.W    #1,D2
  2519.         DBRA    D0,SET_BIT_CIRC5
  2520.         BRA.S    NO_CIRCLE5
  2521. BIT_CLEAR_CIRC5    BCLR    D4,(A1,D7.L)
  2522.         ADDQ.W    #1,D2
  2523.         DBRA    D0,SET_BIT_CIRC5
  2524. NO_CIRCLE5
  2525. *        Rbsr    L_CIRCLE_PLOT
  2526.         MOVEM.W    (SP),D2-6
  2527.         SUB.W    D2,D4        OFFX - Y
  2528.         SUB.W    D3,D5        OFFY - X
  2529. *        MOVE.W    D4,-(A3)    \
  2530. *        MOVE.W    D5,-(A3)     |--> PASS PARAMS
  2531.         MOVE.L    A2,A0
  2532.         MOVEQ.L    #0,D2
  2533.         MOVE.W    D5,D7    Y
  2534.         BMI.S    NO_CIRCLE6
  2535.         CMP.W    A5,D7
  2536.         BGE.S    NO_CIRCLE6
  2537.         MOVE.W    D4,D6    X
  2538.         BMI.S    NO_CIRCLE6
  2539.         CMP.W    A4,D6
  2540.         BGE.S    NO_CIRCLE6
  2541.         MOVE.W    (A3),D3        COLOUR
  2542.         MULU    D1,D7
  2543. *        MULU    EcTligne(A0),D7
  2544.         MOVEQ.L    #7,D4
  2545.         MOVE.W    D6,D5
  2546.         ASR.W    #3,D6
  2547.         ADD.W    D6,D7        OFFSET
  2548.         AND.W    #%111,D5
  2549.         SUB.W    D5,D4
  2550.         MOVE.L    A6,D0
  2551. SET_BIT_CIRC6    MOVE.L    (A0)+,A1
  2552.         BTST    D2,D3
  2553.         BEQ.S    BIT_CLEAR_CIRC6
  2554.         BSET    D4,(A1,D7.L)
  2555.         ADDQ.W    #1,D2
  2556.         DBRA    D0,SET_BIT_CIRC6
  2557.         BRA.S    NO_CIRCLE6
  2558. BIT_CLEAR_CIRC6    BCLR    D4,(A1,D7.L)
  2559.         ADDQ.W    #1,D2
  2560.         DBRA    D0,SET_BIT_CIRC6
  2561. NO_CIRCLE6
  2562. *        Rbsr    L_CIRCLE_PLOT
  2563.         MOVEM.W    (SP),D2-6
  2564.         ADD.W    D2,D4        OFFX + Y
  2565.         SUB.W    D3,D5        OFFY - X
  2566. *        MOVE.W    D4,-(A3)    \
  2567. *        MOVE.W    D5,-(A3)     |--> PASS PARAMS
  2568.         MOVE.L    A2,A0
  2569.         MOVEQ.L    #0,D2
  2570.         MOVE.W    D5,D7    Y
  2571.         BMI.S    NO_CIRCLE7
  2572.         CMP.W    A5,D7
  2573.         BGE.S    NO_CIRCLE7
  2574.         MOVE.W    D4,D6    X
  2575.         BMI.S    NO_CIRCLE7
  2576.         CMP.W    A4,D6
  2577.         BGE.S    NO_CIRCLE7
  2578.         MOVE.W    (A3),D3        COLOUR
  2579.         MULU    D1,D7
  2580. *        MULU    EcTligne(A0),D7
  2581.         MOVEQ.L    #7,D4
  2582.         MOVE.W    D6,D5
  2583.         ASR.W    #3,D6
  2584.         ADD.W    D6,D7        OFFSET
  2585.         AND.W    #%111,D5
  2586.         SUB.W    D5,D4
  2587.         MOVE.L    A6,D0
  2588. SET_BIT_CIRC7    MOVE.L    (A0)+,A1
  2589.         BTST    D2,D3
  2590.         BEQ.S    BIT_CLEAR_CIRC7
  2591.         BSET    D4,(A1,D7.L)
  2592.         ADDQ.W    #1,D2
  2593.         DBRA    D0,SET_BIT_CIRC7
  2594.         BRA.S    NO_CIRCLE7
  2595. BIT_CLEAR_CIRC7    BCLR    D4,(A1,D7.L)
  2596.         ADDQ.W    #1,D2
  2597.         DBRA    D0,SET_BIT_CIRC7
  2598. NO_CIRCLE7
  2599. *        Rbsr    L_CIRCLE_PLOT
  2600.         MOVEM.W    (SP),D2-6
  2601.         ADD.W    D2,D4        OFFX + Y
  2602.         ADD.W    D3,D5        OFFY + X
  2603. *        MOVE.W    D4,-(A3)    \
  2604. *        MOVE.W    D5,-(A3)     |--> PASS PARAMS
  2605.         MOVE.L    A2,A0
  2606.         MOVEQ.L    #0,D2
  2607.         MOVE.W    D5,D7    Y
  2608.         BMI.S    NO_CIRCLE8
  2609.         CMP.W    A5,D7
  2610.         BGE.S    NO_CIRCLE8
  2611.         MOVE.W    D4,D6    X
  2612.         BMI.S    NO_CIRCLE8
  2613.         CMP.W    A4,D6
  2614.         BGE.S    NO_CIRCLE8
  2615.         MOVE.W    (A3),D3        COLOUR
  2616.         MULU    D1,D7
  2617. *        MULU    EcTligne(A0),D7
  2618.         MOVEQ.L    #7,D4
  2619.         MOVE.W    D6,D5
  2620.         ASR.W    #3,D6
  2621.         ADD.W    D6,D7        OFFSET
  2622.         AND.W    #%111,D5
  2623.         SUB.W    D5,D4
  2624.         MOVE.L    A6,D0
  2625. SET_BIT_CIRC8    MOVE.L    (A0)+,A1
  2626.         BTST    D2,D3
  2627.         BEQ.S    BIT_CLEAR_CIRC8
  2628.         BSET    D4,(A1,D7.L)
  2629.         ADDQ.W    #1,D2
  2630.         DBRA    D0,SET_BIT_CIRC8
  2631.         BRA.S    NO_CIRCLE8
  2632. BIT_CLEAR_CIRC8    BCLR    D4,(A1,D7.L)
  2633.         ADDQ.W    #1,D2
  2634.         DBRA    D0,SET_BIT_CIRC8
  2635. NO_CIRCLE8
  2636. *        Rbsr    L_CIRCLE_PLOT
  2637.         MOVEM.W    (SP)+,D2-6
  2638.         DBRA    D3,CIRCLE_LOOP
  2639.         MOVEM.L    (SP)+,A4-6
  2640.         MOVE.W    (A3)+,D0
  2641.         RTS
  2642.  
  2643.  
  2644. L_IFonc        EQU    62
  2645. L62        MOVEQ.L    #23,D0
  2646.         Rjmp    L_Error
  2647.  
  2648. L_IFonca    EQU    63
  2649. L63        MOVEM.L    (SP)+,A4-6
  2650.         MOVEQ.L    #23,D0
  2651.         Rjmp    L_Error
  2652.  
  2653. OUT_OF_MEM    EQU    64
  2654. L64        MOVEQ    #24,D0
  2655.         Rjmp    L_Error
  2656.  
  2657. L_FAST_SQR    EQU    65
  2658. L65        MOVE.L    (A3)+,D0
  2659.         MOVEQ    #0,D1
  2660.         move.l    #$40000000,d2
  2661. root_loop:
  2662.         move.l    d1,d3
  2663.         add.l    d2,d3
  2664.         lsr.l    #1,d1
  2665.         cmp.l    d3,d0
  2666.         ble.s    boing
  2667.         sub.l    d3,d0
  2668.         or.l    d2,d1
  2669. boing:
  2670.         lsr.l    #2,d2
  2671.         bne.s    root_loop
  2672.         cmp.l    d1,d0
  2673.         blt.s    no_round_up
  2674.         addq.l    #1,d1
  2675. no_round_up:
  2676.         EXT.L    D1
  2677.         move.L    d1,d3
  2678.         MOVEQ    #0,D2
  2679.         rts
  2680.  
  2681. L_STARS_INT_ON    EQU    66
  2682. L66        Dload    A2
  2683.         TST.W    STARS_COUNT-MB(A2)
  2684.         BEQ.S    NO_INT_STARS_DEF
  2685.         TST.W    INT_STARS_ON-MB(A2)
  2686.         BNE.S    NO_INT_STARS
  2687.         MOVE.W    #1,INT_STARS_ON-MB(A2)
  2688.         MOVE.L    (A3)+,D0
  2689.         BEQ.S    NO_CLEAR
  2690.         MOVE.W    #1,STARS_INT_CLEAR-MB(A2)
  2691. NO_CLEAR    MOVEM.L    A4-A7,-(SP)
  2692.         MOVE.L    #IS_SIZE,D0
  2693.         MOVE.L    #(MEMF_PUBLIC|MEMF_CLEAR),D1
  2694.         CALLEXEC AllocMem
  2695.         TST.L    D0
  2696.         BEQ.S    EXIT
  2697.         MOVE.L    D0,A1
  2698.         Dload    A2
  2699.         MOVE.L    D0,INT_STARS_SERVER-MB(A2)
  2700. *        INITIALISATIE INTERRUPT
  2701.         MOVE.B    #NT_INTERRUPT,LN_TYPE(A1)
  2702.         MOVE.B    #-40,LN_PRI(A1)
  2703.         Dlea    INT_STARS_NAME,A2
  2704.         MOVE.L    A2,LN_NAME(A1)
  2705.         MOVE.L    A5,IS_DATA(A1)
  2706.         LEA    INT_DRAW_STARS(PC),A2
  2707.         MOVE.L    A2,IS_CODE(A1)
  2708.         MOVE.L    #INTB_VERTB,D0
  2709.         CALLEXEC AddIntServer
  2710. EXIT        MOVEM.L    (SP)+,A4-A7
  2711.         RTS
  2712. NO_INT_STARS    MOVEQ    #10,D0
  2713.         Rbra    L_CUSTOM
  2714. NO_INT_STARS_DEF
  2715.         MOVEQ    #9,D0
  2716.         Rbra    L_CUSTOM
  2717.  
  2718. INT_DRAW_STARS    MOVEM.L    D2-D7/A2-A4,-(SP)
  2719.         MOVE.L    A1,A5
  2720.         Dload    A2
  2721.         MOVEQ    #0,D0
  2722.         MOVE.L    STARS_INT_SCREEN-MB(A2),A4
  2723.         TST.W    STARS_INT_CLEAR-MB(A2)
  2724.         BEQ.S    SKIP_STARS_CLR
  2725.         LEA    $DFF000,A1
  2726.         MOVE.W    EcTLigne(A4),D6    BYTES REGEL
  2727.         ASR.W    #1,D6        WORDS REGEL
  2728.         MOVE.W    EcTy(A4),D5
  2729.         ASL.W    #6,D5        Y * 64
  2730.         ADD.W    D5,D6        BLITSIZE
  2731. ERASE_SINGLE_I    BTST    #14,2(A1)
  2732.         BNE.S    ERASE_SINGLE_I
  2733.         MOVE.W    D0,$74(A1)        BLTADAT
  2734.         MOVE.W    D0,$66(A1)        BLTDMOD
  2735.         MOVE.L    #-1,$44(A1)        BLTAFLWM
  2736.         MOVE.L    #$01F00000,$40(A1)    BLTCON0/1
  2737.         MOVE.L    (A4),$54(A1)        ADRES PLANE 1 -> 6
  2738.         MOVE.W    D6,$58(A1)        BLTSIZE
  2739. SKIP_STARS_CLR    MOVE.W    STARS_COUNT-MB(A2),D7    HOW MANY STARS ?
  2740.         BEQ.S    EXIT_STARS        NO STARS DEFINED
  2741.         SUBQ.W    #1,D7
  2742.         MOVE.L    OFFSET_ADRES-MB(A2),A6    START ADRES OF EVERY LINE
  2743.         MOVE.L    (A4),A0            PTR TO BITMAP ETC...
  2744.         Dlea    STARS_CLIP,A3        CLIP DEFINITIONS
  2745.         MOVEM.W    (A3),D1/A1/A3/A5    MIN X,MIN Y,MAX X,MAX Y
  2746.         MOVE.L    STARS_ADRES-MB(A2),A2    STAR DEFINITIONS
  2747. STARS1_LOOP_I    MOVEM.W    (A2),D3-6        3=X 4=Y 5=X SPEED 6= Y SPEED
  2748.         CMP.W    D0,D5            X SPEED = 0 ?
  2749.         BEQ.S    NO_X_SPEED_I
  2750.         ADD.W    D3,D5
  2751.         CMP.W    A3,D5            X >= MAX X ?
  2752.         BGE.S    X_OFF_SCREEN_I
  2753.         CMP.W    D1,D5            X < MIN X ?
  2754.         BLT.S    X_OFF_SCREEN1_I    
  2755.         MOVE.W    D5,(A2)            NEW COORD = OK
  2756.         BRA.S    X_ON_SCREEN_I
  2757. X_OFF_SCREEN_I    SUB.W    A3,D5
  2758.         MOVE.W    D5,(A2)            NEW COORD = X - MAX X
  2759.         BRA.S    X_ON_SCREEN_I
  2760. X_OFF_SCREEN1_I    ADD.W    D5,A3
  2761.         MOVE.W    A3,(A2)            NEW COORD = MAX X + (-X)
  2762. X_ON_SCREEN_I
  2763. NO_X_SPEED_I
  2764. ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2765. ; !!! I don't change the Y coordinates. This takes too much time !!!
  2766. ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2767. ;        CMP.W    D0,D6            Y SPEED = 0 ?
  2768. ;        BEQ.S    NO_Y_SPEED_I
  2769. ;        ADD.W    D4,D6
  2770. ;        CMP.W    A1,D6            Y < MIN Y ?
  2771. ;        BLT.S    Y_OFF_SCREEN1_I
  2772. ;        CMP.W    A5,D6            Y >= MAX Y ?
  2773. ;        BGE.S    Y_OFF_SCREEN_I
  2774. ;        MOVE.W    D6,2(A2)        NEW COORD = OK
  2775. ;        BRA.S    Y_ON_SCREEN_I
  2776. ;Y_OFF_SCREEN_I    MOVE.W    A1,2(A2)        NEW COORD = MIN Y
  2777. ;        BRA.S    Y_ON_SCREEN_I
  2778. ;Y_OFF_SCREEN1_I    MOVE.W    A5,2(A2)        NEW COORD = MAX Y
  2779. ;Y_ON_SCREEN_I
  2780. NO_Y_SPEED_I    ADD.W    D4,D4            FIND START ADRES OF LINE
  2781. *        MOVE.W    (A6,D4.W),D6        IN TABLE
  2782.         MOVE.W    D3,D5            SAVE X -> PIXELS
  2783.         NOT    D5
  2784.         ASR.W    #3,D3            SCREEN OFFSET -> ONLY X (BYTES)
  2785.         ADD.W    (A6,D4.W),D3            ADD SCREEN OFFSETS -> X+Y
  2786.         BSET    D5,(A0,D3.W)        SET BIT ON SCREEN
  2787.         ADDQ.L    #8,A2            ADRES OF NEXT STAR
  2788.         DBRA    D7,STARS1_LOOP_I    GO ON !
  2789. EXIT_STARS    MOVEM.L    (SP)+,D2-D7/A2-A4
  2790.         MOVEQ    #0,D0
  2791.         RTS
  2792.  
  2793. L_STARS_INT_OFF    EQU    67
  2794. L67        Dload    A2
  2795.         TST.W    INT_STARS_ON-MB(A2)
  2796.         BEQ.S    NO_STARS_INT
  2797.         CLR.W    STARS_INT_CLEAR-MB(A2)
  2798.         MOVEM.L    A4-A6,-(SP)
  2799.         CALLEXEC Disable
  2800.         Dload    A2
  2801.         CLR.W    INT_STARS_ON-MB(A2)
  2802.         MOVE.L    INT_STARS_SERVER-MB(A2),A1
  2803.         MOVE.L    #INTB_VERTB,D0
  2804.         CALLEXEC RemIntServer
  2805.         CALLEXEC Enable
  2806.         MOVEM.L    (SP),A4-6
  2807.         Dload    A2
  2808.         MOVE.L    INT_STARS_SERVER-MB(A2),A1
  2809.         MOVE.L    #IS_SIZE,D0
  2810.         CALLEXEC FreeMem
  2811.         MOVEM.L    (SP)+,A4-A6
  2812. NO_STARS_INT    RTS
  2813.     
  2814. L_BLIT_INT_ON    EQU    68
  2815. L68        MOVE.L    (A3)+,D7        TO BLIT
  2816.         MOVE.L    (A3)+,D6        FROM BLIT
  2817.         CMP.W    D6,D7
  2818.         Rblt    L_IFonc
  2819.         SUBQ.W    #1,D6
  2820.         Rbmi    L_IFonc
  2821.         SUBQ.W    #1,D7
  2822.         CMP.W    #96,D7
  2823.         Rbcc    L_IFonc
  2824.         Dload    A2
  2825.         TST.W    INT_BLIT_ON-MB(A2)
  2826.         BNE.S    NO_INT_BLIT
  2827.         MOVE.W    #1,INT_BLIT_ON-MB(A2)
  2828.         MOVE.W    D6,INT_BLIT_FROM-MB(A2)
  2829.         MOVE.W    D7,INT_BLIT_TO-MB(A2)
  2830.         MOVEM.L    A4-A7,-(SP)
  2831.         MOVE.L    #IS_SIZE,D0
  2832.         MOVE.L    #(MEMF_PUBLIC|MEMF_CLEAR),D1
  2833.         CALLEXEC AllocMem
  2834.         TST.L    D0
  2835.         BEQ.S    EXIT_INT_BLIT
  2836.         MOVE.L    D0,A1
  2837.         Dload    A2
  2838.         MOVE.L    D0,INT_BLIT_SERVER-MB(A2)
  2839. *        INITIALISATIE INTERRUPT
  2840.         MOVE.B    #NT_INTERRUPT,LN_TYPE(A1)
  2841.         MOVE.B    #9,LN_PRI(A1)
  2842.         Dlea    INT_BLIT_NAME,A2
  2843.         MOVE.L    A2,LN_NAME(A1)
  2844.         MOVE.L    A5,IS_DATA(A1)
  2845.         LEA    INT_MULTI_BLIT(PC),A2
  2846.         MOVE.L    A2,IS_CODE(A1)
  2847.         MOVE.L    #INTB_VERTB,D0
  2848.         CALLEXEC AddIntServer
  2849. EXIT_INT_BLIT    MOVEM.L    (SP)+,A4-A7
  2850.         RTS
  2851. NO_INT_BLIT    MOVEQ    #13,D0
  2852.         Rbra    L_CUSTOM
  2853. INT_MULTI_BLIT    MOVEM.L    D2-D7/A2-A4,-(SP)
  2854.         MOVE.L    A1,A5
  2855.         Dload    A2
  2856.         MOVE.L    T_RASTPORT(A5),A4
  2857.         MOVE.W    INT_BLIT_FROM-MB(A2),D6
  2858.         MOVE.W    INT_BLIT_TO-MB(A2),D7
  2859.         LEA    $DFF000,A1
  2860.         Dlea    BLIT_DEFS,A2
  2861. NEXT_INT_BLIT    ADD.W    D6,D6
  2862.         ADD.W    D6,D6    
  2863.         MOVE.L    A2,A0
  2864.         MOVE.L    (A0,D6.W),D0
  2865.         BEQ.S    BLIT_SKIP_THIS        IF ADRES = 0 EXIT !!
  2866.         MOVE.L    D0,A0
  2867.         MOVE.W    (A0)+,D5        PLANE COUNT
  2868.         SUBQ    #1,D5
  2869.         MOVEM.L    (A0)+,D1-4
  2870.         MOVE.W    (A0)+,A3        BLITSIZE
  2871.         MOVEQ    #0,D0
  2872. BLIT_S_LOOP_I    BTST    D0,24(A4)
  2873.         BEQ.S    SKIP_S_BLIT
  2874. BLIT_S_LOOP_I1    BTST    #14,2(A1)
  2875.         BTST    #14,2(A1)
  2876.         BNE.S    BLIT_S_LOOP_I1
  2877.         ADDQ    #1,D0
  2878.         MOVE.L    D1,$44(A1)        BLTAFLWM
  2879.         MOVEM.L    D2-3,$60(A1)        BLTCBMOD + BLTADMOD
  2880.         MOVE.L    D4,$40(A1)        BLTCON01
  2881.         MOVE.L    (A0)+,$50(A1)        SOURCE ADRES
  2882.         MOVE.L    (A0)+,$54(A1)        DEST ADRES
  2883.         MOVE.W    A3,$58(A1)
  2884.         DBRA    D5,BLIT_S_LOOP_I
  2885. BLIT_SKIP_THIS    ASR.W    #2,D6
  2886.         ADDQ    #1,D6
  2887.         CMP.W    D7,D6
  2888.         BLE.S    NEXT_INT_BLIT
  2889.         MOVEM.L    (SP)+,D2-D7/A2-A4
  2890.         MOVEQ    #0,D0
  2891.         RTS
  2892. SKIP_S_BLIT    ADDQ.L    #8,A0
  2893.         ADDQ    #1,D0
  2894.         DBRA    D5,BLIT_S_LOOP_I
  2895.         ASR.W    #2,D6
  2896.         ADDQ    #1,D6
  2897.         CMP.W    D7,D6
  2898.         BLE.S    NEXT_INT_BLIT
  2899.         MOVEM.L    (SP)+,D2-D7/A2-A4
  2900.         MOVEQ    #0,D0
  2901.         RTS
  2902.  
  2903. L_BLIT_INT_OFF    EQU    69
  2904. L69        Dload    A2
  2905.         TST.W    INT_BLIT_ON-MB(A2)
  2906.         BEQ.S    NO_BLIT_INT
  2907.         CLR.W    INT_BLIT_ON-MB(A2)
  2908.         MOVEM.L    A4-A6,-(SP)
  2909.         CALLEXEC Disable
  2910.         Dload    A2
  2911.         MOVE.L    INT_BLIT_SERVER-MB(A2),A1
  2912.         MOVE.L    #INTB_VERTB,D0
  2913.         CALLEXEC RemIntServer
  2914.         CALLEXEC Enable
  2915.         MOVEM.L    (SP),A4-6
  2916.         Dload    A2
  2917.         MOVE.L    INT_BLIT_SERVER-MB(A2),A1
  2918.         MOVE.L    #IS_SIZE,D0
  2919.         CALLEXEC FreeMem
  2920.         MOVEM.L    (SP)+,A4-A6
  2921. NO_BLIT_INT    RTS
  2922.  
  2923. L_FAST_DRAW    EQU    70
  2924. L70        MOVE.L    (A3)+,D3    Y2
  2925.         MOVE.L    (A3)+,D2    X2
  2926.         MOVE.L    (A3)+,D1    Y1
  2927.         MOVE.L    (A3)+,D0    X1
  2928.         MOVE.L    T_RASTPORT(A5),A1
  2929.                 RBSR    L_DRAW_THE_LINE
  2930.         RTS
  2931.  
  2932.  
  2933. *********************************
  2934. L_INTER_Y    EQU    71
  2935. L71
  2936. inter_y        move.w    d0,d4        *\
  2937.         add.w    d2,d4        * >middle of X
  2938.         asr.w    #1,d4        */
  2939.         move.w    d1,d5        *\
  2940.         add.w    d3,d5        * >middle of Y
  2941.         asr.w    #1,d5        */
  2942.         cmp.w    d6,d5
  2943.         bne.s    inter_y_not_found
  2944.         rts
  2945. inter_y_not_found:
  2946.         cmp.w    d6,d5        *\
  2947.         blt.s    middle_inf_y    * \ if middle_y(d5) is greater
  2948.         move.w    d4,d2        *  > than d6
  2949.         move.w    d5,d3        * /  then modify coord and loop
  2950.         bra.s    inter_y        */
  2951. middle_inf_y:            *\
  2952.         move.w    d4,d0        * \if middle_y(d5) is less
  2953.         move.w    d5,d1        * / than d6
  2954.         bra.s    inter_y        */ then modify coord and loop
  2955.  
  2956. ***********************************
  2957. L_INTER_X    EQU    72
  2958. L72
  2959. inter_x     move.w    d0,d4        *\
  2960.         add.w    d2,d4        * > middle of X
  2961.         asr.w    #1,d4        */
  2962.         move.w    d1,d5        *\
  2963.         add.w    d3,d5        * > middle of Y
  2964.         asr.w    #1,d5        */
  2965.         cmp.w    d6,d4
  2966.         bne.s    inter_x_not_found
  2967.         rts
  2968.  
  2969. inter_x_not_found:
  2970.         cmp.w    d6,d4        *\
  2971.         blt.s    middle_inf_x    * \ if middle_x(d4) is greater
  2972.         move.w    d4,d2        *  > than d6
  2973.         move.w    d5,d3        * /  then modify coord and loop
  2974.         bra.s    inter_x        */
  2975. middle_inf_x:            *\
  2976.         move.w    d4,d0        * \if middle_x(d4) is less
  2977.         move.w    d5,d1        * / than d6
  2978.         bra.s    inter_x        */ then modify coord and loop
  2979.  
  2980. ***********************************
  2981.  
  2982. L_SET_OBJECT_LIMIT    EQU    73
  2983. L73        DLOAD    A2
  2984.         MOVE.L    (A3)+,D0
  2985.         RBMI    L_IFONC
  2986.         CMP.L    #32000,D0
  2987.         BGT.S    LIMIT_TOO_HIGH
  2988.         TST.L    D0
  2989.         BEQ.S    CLEAR_OBJECT_LIMIT
  2990.         TST.W    OBJECT_LIMIT-MB(A2)
  2991.         BNE.S    LIMIT_IS_SET
  2992.         MOVE.L    A2,-(SP)
  2993.         MOVE.L    D0,D7
  2994.         LSL.L    #2,D0
  2995.         MOVE.L    A6,A2
  2996.         MOVE.L    $4.W,A6
  2997.         MOVE.L    #MEMF_CHIP+MEMF_CLEAR,D1
  2998.         JSR    ALLOCMEM(A6)
  2999.         BEQ.S    NO_MEM
  3000.         MOVE.L    D0,D6        STORE OBJECT BASE ADR
  3001.         MOVE.L    D7,D0        
  3002.         ADD.L    D0,D0
  3003.         MOVE.L    #MEMF_CHIP+MEMF_CLEAR,D1
  3004.         JSR    ALLOCMEM(A6)
  3005.         BEQ.S    NO_MEM
  3006.         MOVE.L    A2,A6
  3007.         MOVE.L    (SP)+,A2
  3008.         MOVE.W    D7,OBJECT_LIMIT-MB(A2)
  3009.         MOVE.L    D6,OBJECT_ADRES_BASE-MB(A2)
  3010.         MOVE.L    D0,OBJECT_POINT_BASE-MB(A2)
  3011.         RTS
  3012. LIMIT_IS_SET    MOVEQ    #14,D0
  3013.         RBRA    L_CUSTOM
  3014. LIMIT_TOO_HIGH    MOVEQ    #16,D0
  3015.         RBRA    L_CUSTOM
  3016. NO_MEM        MOVE.L    A2,A6
  3017.         MOVE.L    (SP)+,A2
  3018.         RBRA    OUT_OF_MEM
  3019. CLEAR_OBJECT_LIMIT
  3020.         MOVE.W    OBJECT_LIMIT-MB(A2),D0
  3021.         BEQ.S    ALLREADY_CLEARED
  3022.         MOVE.W    D0,D7
  3023.         SUBQ    #1,D7
  3024.         MOVE.L    OBJECT_ADRES_BASE-MB(A2),A1
  3025.         MOVE.L    A1,A0
  3026. BASE_TEST    TST.L    (A0)+
  3027.         BNE.S    OBJECT_STILL_DEFINED
  3028.         DBRA    D7,BASE_TEST
  3029.         EXT.L    D0
  3030.         ADD.L    D0,D0
  3031.         MOVE.L    D0,D7
  3032.         ADD.L    D0,D0
  3033.         MOVE.L    A6,A2
  3034.         MOVE.L    $4.W,A6
  3035.         JSR    FREEMEM(A6)
  3036.         MOVE.L    A2,A6
  3037.         DLOAD    A2
  3038.         CLR.W    OBJECT_LIMIT-MB(A2)
  3039.         MOVE.L    OBJECT_POINT_BASE-MB(A2),A1
  3040.         MOVE.L    D7,D0
  3041.         MOVE.L    A6,A2
  3042.         MOVE.L    $4.W,A6
  3043.         JSR    FREEMEM(A6)
  3044.         MOVE.L    A2,A6
  3045.         RTS
  3046. ALLREADY_CLEARED
  3047.         MOVEQ    #15,D0
  3048.         RBRA    L_CUSTOM
  3049. OBJECT_STILL_DEFINED
  3050.         MOVEQ    #17,D0
  3051.         RBRA    L_CUSTOM
  3052.  
  3053.  
  3054. L_FAST_DRAW_TO    EQU    74
  3055. L74        MOVE.L    T_RASTPORT(A5),A1
  3056.         MOVEM.W    36(A1),D0-1
  3057.         MOVE.L    (A3)+,D3    Y2
  3058.         MOVE.L    (A3)+,D2    X2
  3059.         RBSR    L_DRAW_THE_LINE
  3060.         RTS
  3061.             
  3062. L_DRAW_THE_LINE    EQU    75
  3063. L75        MOVEM.L    A3-6,-(SP)
  3064.         MOVEM.W    D2-3,36(A1)
  3065.         MOVEQ    #0,D7
  3066.         MOVE.B    25(A1),D7    COLOUR FROM Rp STRUCT
  3067.         LEA    $DFF000,A1
  3068.         MOVE.L    ScOnAd(A5),A0    POINTER NAAR BITPLANES ENZ...
  3069.         Dload    A2
  3070.         MOVEM.W    EcClipX0(A0),A3-A6    XMIN=3,YMIN=4,XMAX=5,YMAX=6
  3071.         SUBQ    #1,A5
  3072.         SUBQ    #1,A6
  3073. clip_line:
  3074.         cmp.w    d2,d0        *\
  3075.         ble.s    x1_less_x2    * \
  3076.         exg    d0,d2        *  >after that d0 <= d2
  3077.         exg    d1,d3        * /
  3078. x1_less_x2:            */
  3079.         movem.w    d0-d3,X1-MB(A2)    * save coor in buffer
  3080.         CMP.W    A5,D2
  3081. ;        cmp.w    #x_max,d2    *\
  3082.         ble.s    no_inter_x_max    * > all line is at left of x_max
  3083.         CMP.W    A5,D0
  3084. ;        cmp.w    #x_max,d0    *\
  3085.         bgt    line_unvisible    * > all line is at right of x_max
  3086.         MOVE.W    A5,D6
  3087. ;        move.w    #x_max,d6    *\
  3088.         Rbsr    L_INTER_X        * \compute intersectoin with x_max
  3089.         movem.w    d4-d5,X2-MB(A2)    * / adn modify the coor
  3090.         movem.w    X1-MB(A2),d0-d3    */
  3091. no_inter_x_max:
  3092.         CMP.W    A3,D0
  3093. ;        cmp.w    #x_min,d0    *\
  3094.         bge.s    no_inter_x_min    * > all line is at right of x_min
  3095.         CMP.W    A3,D2
  3096. ;        cmp.w    #x_min,d2    *\
  3097.         ble    line_unvisible    * > all line is at left of x_min
  3098.         MOVE.W    A3,D6
  3099. ;        move.w    #x_min,d6    *\
  3100.         Rbsr    L_INTER_X        * \ compute intersection with x_min
  3101.         movem.w    d4-d5,X1-MB(A2)    * / adn modify the coor
  3102.         movem.w    X1-MB(A2),d0-d3    */
  3103. no_inter_x_min:        
  3104.         cmp.w    d3,d1        *\
  3105.         ble.s    y1_less_y2    * \
  3106.         exg    d0,d2        *  >after that d1 <= d3
  3107.         exg    d1,d3        * /
  3108. y1_less_y2:            */
  3109.         movem.w    d0-d3,X1-MB(A2)    * save coor in buffer
  3110.         CMP.W    A6,D3
  3111. ;        cmp.w    #y_max,d3    *\
  3112.         ble.s    no_inter_y_max    * > all line is at left of y_max
  3113.         CMP.W    A6,D1
  3114. ;        cmp.w    #y_max,d1    *\
  3115.         bgt    line_unvisible    * > all line is at right of y_max
  3116.         MOVE.W    A6,D6
  3117. ;        move.w    #y_max,d6    *\
  3118.         Rbsr    L_INTER_Y        * \compute intersectoin with y_max
  3119.         movem.w    d4-d5,X2-MB(A2)    * / adn modify the coor
  3120.         movem.w    X1-MB(A2),d0-d3    */
  3121. no_inter_y_max:
  3122.         CMP.W    A4,D1
  3123. ;        cmp.w    #y_min,d1    *\
  3124.         bge.s    no_inter_y_min    * > all line is at right of y_min
  3125.         CMP.W    A4,D3
  3126. ;        cmp.w    #y_min,d3    *\
  3127.         ble    line_unvisible    * > all line is at left of y_min
  3128.         MOVE.W    A4,D6
  3129. ;        move.w    #y_min,d6    *\
  3130.         Rbsr    L_INTER_Y        * \ compute intersection with y_min
  3131.         movem.w    d4-d5,X1-MB(A2)    * / adn modify the coor
  3132.         movem.w    X1-MB(A2),d0-d3    */
  3133. no_inter_y_min:
  3134.         SUB.W    D0,D2
  3135.         BMI.S    XNEG
  3136.         SUB.W    D1,D3
  3137.         BMI.S    YNEG
  3138.         CMP.W    D3,D2
  3139.         BMI.S    YGTX
  3140.         MOVEQ.L    #OCTANT1+LINEMODE,D5
  3141.         BRA.S    LINEAGAIN
  3142. YGTX        EXG    D2,D3
  3143.         MOVEQ.L    #OCTANT2+LINEMODE,D5
  3144.         BRA.S    LINEAGAIN
  3145. YNEG        NEG.W    D3
  3146.         CMP.W    D3,D2
  3147.         BMI.S    YNYGTX
  3148.         MOVEQ.L    #OCTANT8+LINEMODE,D5
  3149.         BRA.S    LINEAGAIN
  3150. YNYGTX        EXG    D2,D3
  3151.         MOVEQ.L    #OCTANT7+LINEMODE,D5
  3152.         BRA.S    LINEAGAIN
  3153. XNEG        NEG.W    D2
  3154.         SUB.W    D1,D3
  3155.         BMI.S    XYNEG
  3156.         CMP.W    D3,D2
  3157.         BMI.S    XNYGTX
  3158.         MOVEQ.L    #OCTANT4+LINEMODE,D5
  3159.         BRA.S    LINEAGAIN
  3160. XNYGTX        EXG    D2,D3
  3161.         MOVEQ.L    #OCTANT3+LINEMODE,D5
  3162.         BRA.S    LINEAGAIN
  3163. XYNEG        NEG.W    D3
  3164.         CMP.W    D3,D2
  3165.         BMI.S    XYNYGTX
  3166.         MOVEQ.L    #OCTANT5+LINEMODE,D5
  3167.         BRA.S    LINEAGAIN
  3168. XYNYGTX        EXG    D2,D3
  3169.         MOVEQ.L    #OCTANT6+LINEMODE,D5
  3170. LINEAGAIN    MOVE.W    EcTLigne(A0),D4    BREEDTE IN BYTES
  3171.         MULU    D4,D1
  3172.         MOVE.L    D1,A3
  3173.         ROR.L    #4,D0
  3174.         ADD.W    D0,D0
  3175.         ADD.W    D0,A3        A3=OFFSET
  3176.         SWAP    D0
  3177.         ADD.W    D3,D3
  3178.         ADD.W    D3,D3
  3179.         MOVE.W    D3,A4        A4=BLTBMOD IN LOW-WORD VAN A4
  3180.         ADD.W    D2,D2
  3181.         MOVE.W    D2,D1
  3182.         LSL.W    #5,D1
  3183.         ADD.W    #$42,D1
  3184.         MOVE.W    D1,A6        BLTSIZE
  3185.         MOVE.L    D0,D1
  3186.         SUB.W    D2,D3
  3187.         MOVE.W    D3,A5
  3188.         BPL.S    LINEOVER
  3189.         OR.W    #SIGNFLAG,D5
  3190. LINEOVER    SUB.W    D2,A5        BLTBMOD+BLTAMOD         
  3191.         MOVE.W    EcNplan(A0),D2    NUMBER OF PLANES 
  3192.         SUBQ    #1,D2        -1 VOOR DBRA !        
  3193.         BNE    MULTI_PLANE_DRAW
  3194. ONE_PLANE_DRAW
  3195. WAIT_BLITTER1    BTST    #14,2(A1)
  3196.         BNE.S    WAIT_BLITTER1
  3197.         MOVE.W    D4,BLTDMOD(A1)
  3198.         MOVEM.W    D4/A4/A5,BLTCMOD(A1)    C/B/A MOD    
  3199.         MOVEQ    #-1,D0
  3200.         MOVE.L    D0,BLTAFWM(A1)
  3201.         MOVE.W    #$8000,BLTADAT(A1)
  3202.         MOVE.L    (A0),A2
  3203.         SUBQ    #1,D7
  3204.         BNE.S    LINE_CLEAR1
  3205.         OR.W    #$BFA,D1
  3206.         MOVEM.W    D1/D5,BLTCON0(A1) 
  3207.         ADD.L    A3,A2        ADRES BITPLANE + OFFSET
  3208.         LEA    $52(A1),A3    EFFECTIEF ADRES BLTAPTL
  3209.         MOVE.L    A2,BLTCPTH(A1)
  3210.         MOVE.W    D3,(A3)+    BLTAPTL
  3211.         MOVE.L    A2,(A3)+    BLTDPTH+BLTDPTL
  3212.         MOVE.W    A6,(A3)        BLTSIZE
  3213.         MOVEM.L    (SP)+,A3-6
  3214.         RTS
  3215. LINE_CLEAR1    OR.W    #$B0A,D1
  3216.         MOVEM.W    D1/D5,BLTCON0(A1) 
  3217.         ADD.L    A3,A2        ADRES BITPLANE + OFFSET
  3218.         LEA    $52(A1),A3
  3219.         MOVE.L    A2,BLTCPTH(A1)    EFFECTIEF ADRES BLTAPTL
  3220.         MOVE.W    D3,(A3)+    BLTAPTL
  3221.         MOVE.L    A2,(A3)+    BLTDPTH+BLTDPTL
  3222.         MOVE.W    A6,(A3)        BLTSIZE
  3223. LINE_UNVISIBLE    MOVEM.L    (SP)+,A3-6
  3224.         RTS
  3225.  
  3226. MULTI_PLANE_DRAW
  3227.         MOVEQ    #0,D6
  3228. WAIT_BLITTER    BTST    #14,2(A1)
  3229.         BNE.S    WAIT_BLITTER
  3230.         MOVE.W    D4,BLTDMOD(A1)
  3231.         MOVEM.W    D4/A4/A5,BLTCMOD(A1)    C/B/A MOD
  3232.         MOVEQ.L    #-1,D0
  3233.         MOVE.L    D0,BLTAFWM(A1)
  3234.         MOVE.W    #$8000,BLTADAT(A1)
  3235.         MOVE.L    D1,D4
  3236.         MOVE.L    D1,D0
  3237.         OR.W    #$BFA,D0
  3238.         OR.W    #$B0A,D4
  3239.         MOVE.W    #$8400,$96(A1)
  3240. NEXT_PLANE    MOVE.L    (A0)+,A2
  3241. WAIT_BLITTER2    BTST    #14,2(A1)
  3242.         BNE.S    WAIT_BLITTER2
  3243.         BTST    D6,D7
  3244.         BEQ.S    LINE_CLEAR
  3245.         MOVEM.W    D0/D5,BLTCON0(A1) 
  3246.         ADD.L    A3,A2        ADRES BITPLANE + OFFSET
  3247.         LEA    $52(A1),A4    EFFECTIEF ADRES BLTAPTL
  3248.         MOVE.L    A2,BLTCPTH(A1)    
  3249.         MOVE.W    D3,(A4)+    BLTAPTL
  3250.         MOVE.L    A2,(A4)+    BLTDPTH+BLTDPTL
  3251.         MOVE.W    A6,(A4)        BLTSIZE
  3252.         ADDQ    #1,D6
  3253.         DBRA    D2,NEXT_PLANE
  3254.         MOVE.W    #$0400,$96(A1)
  3255.         MOVEM.L    (SP)+,A3-6
  3256.         RTS
  3257. LINE_CLEAR    MOVEM.W    D4/D5,BLTCON0(A1) 
  3258.         ADD.L    A3,A2        ADRES BITPLANE + OFFSET
  3259.         LEA    $52(A1),A4    EFFECTIEF ADRES BLTAPTL
  3260.         MOVE.L    A2,BLTCPTH(A1)    
  3261.         MOVE.W    D3,(A4)+    BLTAPTL
  3262.         MOVE.L    A2,(A4)+    BLTDPTH+BLTDPTL
  3263.         MOVE.W    A6,(A4)        BLTSIZE
  3264.         ADDQ    #1,D6
  3265.         DBRA    D2,NEXT_PLANE
  3266.         MOVE.W    #$0400,$96(A1)
  3267.         MOVEM.L    (SP)+,A3-6
  3268.         RTS
  3269.  
  3270. L_SET_PLANES    EQU    76
  3271. L76        MOVE.L    T_RASTPORT(A5),A0
  3272.         MOVE.L    (A3)+,D0
  3273.         AND.L    #$FF,D0
  3274.         MOVE.B    D0,24(A0)
  3275.         RTS
  3276.  
  3277. L_PLANE_OFFSET    EQU    77
  3278. L77        MOVEM.L    (A3)+,D4-7    D4=Y D5=X D6=PLANE D7=SCREEN
  3279.         MOVE.L    D7,D1
  3280.         RJSR    L_GETEC
  3281.         TST.W    D6
  3282.         RBEQ    L_IFONC
  3283.         BMI.S    CLEAR_PLANE_OFFSETS
  3284.         MOVE.W    ECNPLAN(A0),D0
  3285.         CMP.W    D6,D0
  3286.         RBLT    L_IFONC
  3287.         SUBQ    #1,D6
  3288.         LSL.W    #2,D6
  3289.         MULU    #24,D7
  3290.         ADD.W    D7,D6
  3291.         MULS    ECTLIGNE(A0),D4
  3292.         ADD.L    D5,D4
  3293.         BEQ.S    CLEAR_SINGLE_OFFSET
  3294.         DLEA    PLANE_OFFSETS,A2
  3295.         ADD.L    D4,(A2,D6.W)
  3296.         RTS
  3297. CLEAR_SINGLE_OFFSET
  3298.         DLEA    PLANE_OFFSETS,A2
  3299.         MOVE.L    D4,(A2,D6.W)
  3300.         RTS
  3301. CLEAR_PLANE_OFFSETS
  3302.         DLEA    PLANE_OFFSETS,A1
  3303.         MULU    #24,D7
  3304.         ADD.L    D7,A1
  3305.         MOVEQ    #5,D0        6 OFFSETS TO CLEAR
  3306. CLEAR_OFFSET_L    CLR.L    (A1)+
  3307.         DBRA    D0,CLEAR_OFFSET_L
  3308.         RTS
  3309.  
  3310. L_PLANE_SWAP    EQU    78
  3311. L78        MOVE.L    (A3)+,D6    TO PARAM
  3312.         RBLE    L_IFONC
  3313.         MOVE.L    (A3)+,D7    FROM PARAM
  3314.         RBLE    L_IFONC
  3315.         MOVE.L    (A3)+,D1    screen nr
  3316.         MOVE.W    D1,D4        SAVE SCREEN NR
  3317.         RJSR    L_GETEC
  3318.         MOVE.W    EcNplan(A0),D5
  3319.         CMP.W    #1,D5
  3320.         RBEQ    L_IFONC        ONLY 1 PLANE ? NO SWAP POSSIBLE
  3321.         CMP.W    D6,D5        
  3322.         RBLT    L_IFONC        PLANE CNT < PLANE TO SWAP ? ERROR !
  3323.         CMP.W    D7,D5
  3324.         RBLT    L_IFONC        PLANE CNT < PLANE TO SWAP ? ERROR !
  3325.         SUBQ    #1,D6
  3326.         SUBQ    #1,D7
  3327.         LSL.W    #2,D6
  3328.         LSL.W    #2,D7
  3329.         MULU    #24,D4
  3330.         ADD.W    D4,D6    |
  3331.         ADD.W    D4,D7    /
  3332.         LEA    ECLOGIC(A0),A1
  3333.         MOVE.L    (A1,D6.W),D0
  3334.         MOVE.L    (A1,D7.W),D1
  3335.         EXG    D0,D1        swap logic bitplanes
  3336.         MOVE.L    D0,(A1,D6.W)
  3337.         MOVE.L    D1,(A1,D7.W)
  3338.         LEA    ECPHYSIC(A0),A1
  3339.         MOVE.L    (A1,D6.W),D0
  3340.         MOVE.L    (A1,D7.W),D1
  3341.         EXG    D0,D1        swap physic bitplanes
  3342.         MOVE.L    D0,(A1,D6.W)
  3343.         MOVE.L    D1,(A1,D7.W)
  3344.         LEA    ECCURRENT(A0),A1
  3345.         MOVE.L    (A1,D6.W),D0
  3346.         MOVE.L    (A1,D7.W),D1
  3347.         EXG    D0,D1        swap current bitplanes
  3348.         MOVE.L    D0,(A1,D6.W)
  3349.         MOVE.L    D1,(A1,D7.W)
  3350.         RTS
  3351.  
  3352. L_PLANE_SH_UP    EQU    79
  3353. L79        MOVE.L    (A3)+,D7    TO PARAM
  3354.         RBLE    L_IFONC
  3355.         MOVE.L    (A3)+,D6    FROM PARAM
  3356.         RBLE    L_IFONC
  3357.         CMP.W    D6,D7
  3358.         RBLE    L_IFONC
  3359.         MOVE.L    (A3)+,D1    screen nr
  3360.         MOVE.W    D1,D4
  3361.         RJSR    L_GETEC
  3362.         MOVE.W    ECNPLAN(A0),D0
  3363.         CMP.W    D7,D0
  3364.         RBLT    L_IFONC
  3365.         SUBQ    #1,D6
  3366.         SUBQ    #1,D7
  3367.         MOVE.W    D7,D5
  3368.         SUB.W    D6,D5
  3369.         SUBQ    #1,D5        D5=COUNT
  3370.         LSL.W    #2,D7
  3371.         MOVE.W    D7,D6
  3372.         SUBQ    #4,D6
  3373.         MULU    #24,D4    |
  3374.         ADD.W    D4,D6    |
  3375.         ADD.W    D4,D7    /
  3376.         LEA    ECLOGIC(A0),A2
  3377.         LEA    ECPHYSIC(A0),A1
  3378.         LEA    ECCURRENT(A0),A0
  3379.         MOVE.L    (A2,D7.W),D2
  3380.         MOVE.L    (A1,D7.W),D1
  3381.         MOVE.L    (A0,D7.W),D0
  3382. SHIFT_UP    MOVE.L    (A2,D6.W),(A2,D7.W)
  3383.         MOVE.L    (A1,D6.W),(A1,D7.W)
  3384.         MOVE.L    (A0,D6.W),(A0,D7.W)
  3385.         SUBQ    #4,D6
  3386.         SUBQ    #4,D7
  3387.         DBRA    D5,SHIFT_UP
  3388.         MOVE.L    D2,(A2,D7.W)
  3389.         MOVE.L    D1,(A1,D7.W)
  3390.         MOVE.L    D0,(A0,D7.W)
  3391.         RTS
  3392.  
  3393. L_PLANE_SH_DOWN    EQU    80
  3394. L80        MOVE.L    (A3)+,D7    TO PARAM
  3395.         RBLE    L_IFONC
  3396.         MOVE.L    (A3)+,D6    FROM PARAM
  3397.         RBLE    L_IFONC
  3398.         CMP.W    D6,D7
  3399.         RBLE    L_IFONC
  3400.         MOVE.L    (A3)+,D1    screen nr
  3401.         MOVE.W    D1,D4
  3402.         RJSR    L_GETEC
  3403.         MOVE.W    ECNPLAN(A0),D0
  3404.         CMP.W    D7,D0
  3405.         RBLT    L_IFONC
  3406.         SUBQ    #1,D6
  3407.         SUBQ    #1,D7
  3408.         MOVE.W    D7,D5
  3409.         SUB.W    D6,D5
  3410.         SUBQ    #1,D5        D5=COUNT
  3411.         LSL.W    #2,D6
  3412.         MOVE.W    D6,D7
  3413.         ADDQ    #4,D7
  3414.         MULU    #24,D4    |
  3415.         ADD.W    D4,D6    |
  3416.         ADD.W    D4,D7    /
  3417.         LEA    ECLOGIC(A0),A2
  3418.         LEA    ECPHYSIC(A0),A1
  3419.         LEA    ECCURRENT(A0),A0
  3420.         MOVE.L    (A2,D6.W),D2
  3421.         MOVE.L    (A1,D6.W),D1
  3422.         MOVE.L    (A0,D6.W),D0
  3423. SHIFT_DOWN    MOVE.L    (A2,D7.W),(A2,D6.W)
  3424.         MOVE.L    (A1,D7.W),(A1,D6.W)
  3425.         MOVE.L    (A0,D7.W),(A0,D6.W)
  3426.         ADDQ    #4,D6
  3427.         ADDQ    #4,D7
  3428.         DBRA    D5,SHIFT_DOWN
  3429.         MOVE.L    D2,(A2,D6.W)
  3430.         MOVE.L    D1,(A1,D6.W)
  3431.         MOVE.L    D0,(A0,D6.W)
  3432.         RTS
  3433.  
  3434. L_PLANE_UPDATE    EQU    81        
  3435. L81        MOVE.L    (A3)+,D1    screen nr
  3436.         MOVE.W    D1,D4
  3437.         RJSR    L_GETEC
  3438.         MOVEM.L    A3/A6,-(SP)
  3439.         MOVE.L    A0,A2
  3440.         MOVE.L    A2,-(SP)
  3441.         MOVE.L    $4.W,A6
  3442.         MOVEQ    #72,D7        4*6*3 BYTES
  3443.         LEA    ECLOGIC(A2),A0
  3444.         DLEA    ECLOGIC_SAVE,A1
  3445.         MOVE.L    D7,D0
  3446.         JSR    -630(A6)
  3447.         MOVE.W    ECNPLAN(A2),D0
  3448.         LEA    ECLOGIC(A2),A0
  3449.         LEA    ECPHYSIC(A2),A1
  3450.         LEA    ECCURRENT(A2),A2
  3451.         DLEA    PLANE_OFFSETS,A3
  3452.         MULU    #24,D4    
  3453.         ADD.W    D4,A3    
  3454. ADD_OFFSETS    MOVE.L    (A3)+,D1
  3455.         ADD.L    D1,(A0)+
  3456.         ADD.L    D1,(A1)+
  3457.         ADD.L    D1,(A2)+
  3458.         DBRA    D0,ADD_OFFSETS
  3459.         MOVE.L    (SP)+,A2
  3460.         MOVEM.L    (SP),A3/A6
  3461.         ECCALL    COPFORCE
  3462.         MOVE.L    $4.W,A6
  3463.         DLEA    ECLOGIC_SAVE,A0
  3464.         LEA    ECLOGIC(A2),A1
  3465.         MOVE.L    D7,D0
  3466.         JSR    -630(A6)
  3467.         MOVEM.L    (SP)+,A3/A6
  3468.         RTS
  3469.  
  3470. F_PASTE_ICON    EQU    82
  3471. L82        MOVE.L    (A3)+,D1
  3472.         RBLE    L_IFONC
  3473.         MOVE.L    ABANKS(A5),A0
  3474.         MOVE.L    8(A0),D0
  3475.         BEQ    IC_BANK_NOT_RES
  3476.         MOVE.L    D0,A2
  3477.         ADDQ.L    #8,A2
  3478.         CMP.W    (A2),D1
  3479.         BHI    ICON_NOT_DEF
  3480.         LSL.W    #3,D1
  3481.         LEA    -6(A2,D1.W),A2    PTR TO ICON DEFINITION    
  3482.         MOVE.L    (A2),D0        GET ICON ADDRESS
  3483.         BEQ    ICON_NOT_DEF
  3484.         MOVE.L    D0,A2
  3485.         MOVE.L    (A3)+,D1    D1=Y 
  3486.         BLT    ICON_OF_SCREEN1
  3487.         MOVE.L    (A3)+,D2    D2=X
  3488.         BLT    ICON_OF_SCREEN
  3489.         AND.W    #$FFF0,D2    X 16 BIT BOUNDARY
  3490.         MOVE.L    SCONAD(A5),A0    ADRES ACTUAL SCREEN
  3491.         MOVEM.W    ECTX(A0),D5-7    D5=ECTX D6=ECTY D7=ECNPLAN
  3492. ;        MOVEQ.L    #0,D4        TEST PARAM FOR COORDS OF ICON
  3493. ;        CMP.W    D4,D1        Y<0 ?
  3494. ;        BLT    ICON_OF_SCREEN
  3495. ;        CMP.W    D4,D2        X<0 ?
  3496. ;        BLT    ICON_OF_SCREEN
  3497.         CMP.W    D6,D1        Y>=ECTY ?
  3498.         BGE    ICON_OF_SCREEN
  3499.         CMP.W    D5,D2        X>=ECTX ?
  3500.         BGE    ICON_OF_SCREEN
  3501.         MOVE.W    ECTLIGNE(A0),D0    BYTES IN LINE
  3502.         MOVE.W    D0,D5
  3503.         MOVE.W    D0,D4
  3504.         MULU    D1,D0        Y * BYTES IN LINE
  3505.         LSR.W    #3,D2        X / 8
  3506.         ADD.L    D2,D0        D0 = OFFSET START (Y*BYTES+X/8)
  3507.         MOVE.W    (A2)+,D3    SIZE ICON IN X (WORDS)
  3508.         ADD.W    D3,D3        SIZE ICON IN X (BYTES)
  3509.         SUB.W    D3,D5        D5 = BLTDMOD (BYTES LINE-BYTES ICON)
  3510.         SUB.W    D1,D6        ECTY - Y = YOVER
  3511. ;        MOVEQ    #0,D1        INIT BLTAMOD
  3512.         SUB.W    D2,D4        X OVER (BYTES LINE-X POS ICON)
  3513.         MOVE.W    D3,D2        STORE SIZE ICON IN X (BYTES)
  3514.         MOVE.W    D3,-(SP)    STORE IT ONE MORE...
  3515.         SUB.W    D4,D3        SIZE ICON X <= X OVER ?
  3516.         BLE.S    NO_MOD_ICON
  3517.         ADD.W    D3,D5        ADJUST DMOD
  3518.         SWAP    D3        BLTAMOD IN HIGH WORD (SIZE X-X OVER)
  3519.         OR.L    D3,D5
  3520.         MOVE.W    D4,(SP)        STORE NEW SIZE ICON X FOR BLTSIZE
  3521. NO_MOD_ICON    MOVE.W    (A2)+,D4    D4 = SIZE ICON IN LINES
  3522.         MULU    D4,D2    OFFSET    D2 = SIZE ICON X * SIZE LINES (BYTES)
  3523.         CMP.W    D6,D4
  3524.         BLT.S    NO_CLIP_ICON
  3525.         MOVE.W    D6,D4
  3526. NO_CLIP_ICON
  3527.         LSL.W    #6,D4        D4 = ICON LINES * 64
  3528.         MOVE.W    (SP)+,D3
  3529.         LSR.W    #1,D3        D3 = SIZE ICON IN X (WORDS)
  3530.         ADD.W    D3,D4        D4 = BLTSIZE LINES*64+X (X=WORDS)
  3531.         MOVE.W    (A2)+,D3    D3 = NUMBER OF PLANES IN ICON
  3532.         CMP.W    D3,D7        NUMBER OF PLANES IN SCREEN <
  3533.         BLT.S    PUT_SCR_PLAN    NUMBER OF PLANES IN ICON ?
  3534.         MOVE.W    D3,D7        NUMBER OF PLANES ICON FOR LOOP
  3535. PUT_SCR_PLAN    SUBQ    #1,D7        -1 FOR DBRA
  3536.         LEA    4(A2),A2    SOURCE ADDRESS        
  3537.         LEA    $DFF002,A1    BASE CUSTOM+2
  3538.         MOVE.L    #$9F00000,D1    INIT BLTCON0/1
  3539. ICON_LOOP    MOVE.L    (A0)+,D6        ADRES PLANES 1 --> 6
  3540.         ADD.L    D0,D6            ADD OFFSET TO PLANE
  3541. WAIT_LOOP    BTST    #14,(A1)
  3542.         BNE.S    WAIT_LOOP
  3543.         MOVEQ.L    #-1,D3
  3544.         MOVEM.L    D1/D3,-2+$40(A1)    BLTCON0/1 + BLTAFLWM
  3545.         MOVEQ.L    #0,D3
  3546.         MOVEM.L    D3/D5,-2+$60(A1)    BLTCBMOD AND BLTADMOD
  3547.         MOVE.L    A2,-2+$50(A1)        SOURCE ADRES (ICON)
  3548.         MOVE.L    D6,-2+$54(A1)        DEST ADRES (PLANE)
  3549.         MOVE.W    D4,-2+$58(A1)        BLTSIZE
  3550.         ADD.L    D2,A2
  3551.         DBRA    D7,ICON_LOOP
  3552. ICON_OF_SCREEN    RTS
  3553. ICON_OF_SCREEN1    ADDQ.L    #4,A3
  3554.         RTS
  3555. IC_BANK_NOT_RES    MOVEQ    #$24,D0
  3556.         RJMP    L_ERROR
  3557. ICON_NOT_DEF    MOVEQ    #$4A,D0
  3558.         RJMP    L_ERROR
  3559.  
  3560. F_32BIT_ICON    EQU    83
  3561. L83        MOVE.L    (A3)+,D1
  3562.         RBLE    L_IFONC
  3563.         MOVE.L    ABANKS(A5),A0
  3564.         MOVE.L    8(A0),A2
  3565. ;        MOVE.L    8(A0),D0
  3566. ;        BEQ    IC_32_NOT_RES
  3567. ;        MOVE.L    D0,A2
  3568.         ADDQ.L    #8,A2
  3569. ;        CMP.W    (A2),D1
  3570. ;        BHI    IC_32_NOT_DEF
  3571.         LSL.W    #3,D1
  3572.         LEA    -6(A2,D1.W),A2    PTR TO ICON DEFINITION    
  3573.         MOVE.L    (A2),A2
  3574. ;        MOVE.L    (A2),D0        GET ICON ADDRESS
  3575. ;        BEQ    IC_32_NOT_DEF
  3576. ;        MOVE.L    D0,A2
  3577.         MOVE.L    (A3)+,D1    D1=Y
  3578.         BLT.S    IC_32_OF_SCREEN1 
  3579.         MOVE.L    (A3)+,D2    D2=X
  3580.         BLT.S    IC_32_OF_SCREEN
  3581.         AND.W    #$FFE0,D2    X 32 BIT BOUNDARY
  3582.         AND.W    #$FFE0,D1    Y 32 BIT BOUNDARY
  3583.         MOVE.L    SCONAD(A5),A0    ADRES ACTUAL SCREEN
  3584.         MOVEM.W    ECTX(A0),D5-7    D5=ECTX D6=ECTY D7=ECNPLAN
  3585.         MOVEQ.L    #0,D4        TEST PARAM FOR COORDS OF ICON
  3586. ;        CMP.W    D4,D1        Y<0 ?
  3587. ;        BLT.S    IC_32_OF_SCREEN
  3588. ;        CMP.W    D4,D2        X<0 ?
  3589. ;        BLT.S    IC_32_OF_SCREEN
  3590.         CMP.W    D6,D1        Y>=ECTY ?
  3591.         BGE.S    IC_32_OF_SCREEN
  3592.         CMP.W    D5,D2        X>=ECTX ?
  3593.         BGE.S    IC_32_OF_SCREEN
  3594.         MOVE.W    ECTLIGNE(A0),D0    BYTES IN LINE
  3595.         MOVE.W    D0,D5
  3596.         MULU    D1,D0        Y * BYTES IN LINE
  3597.         LSR.W    #3,D2        X / 8
  3598.         ADD.L    D2,D0        D0 = OFFSET START (Y*BYTES+X/8)
  3599.         SUBQ.W    #4,D5        D5 = BLTAMOD (BYTES LINE-BYTES ICON)
  3600.         MOVE.W    #$802,D1    BLTSIZE
  3601.         MOVE.W    4(A2),D3    D3 = NUMBER OF PLANES IN ICON
  3602.         CMP.W    D3,D7        NUMBER OF PLANES IN SCREEN <
  3603.         BLT.S    PUT_32_PLAN    NUMBER OF PLANES IN ICON ?
  3604.         MOVE.W    D3,D7        NUMBER OF PLANES ICON FOR LOOP
  3605. PUT_32_PLAN    SUBQ    #1,D7        -1 FOR DBRA
  3606.         LEA    10(A2),A2    SOURCE ADDRESS        
  3607.         LEA    $DFF002,A1    BASE CUSTOM+2
  3608.         MOVEQ.L    #-1,D6        INIT BLTAFLWM
  3609.         MOVE.L    #$9F00000,D2
  3610. ICON_32_LOOP    MOVE.L    (A0)+,D3        ADRES PLANES 1 --> 6
  3611.         ADD.L    D0,D3            ADD OFFSET TO PLANE
  3612. WAIT_32_LOOP    BTST    #14,(A1)
  3613.         BNE.S    WAIT_32_LOOP
  3614.         MOVEM.L    D2/D6,-2+$40(A1)    BLTCON0/1 + BLTAFLWM
  3615.         MOVEM.L    D4-5,-2+$60(A1)        BLTCBAMOD AND BLTDMOD
  3616.         MOVE.L    A2,-2+$50(A1)        SOURCE ADRES (ICON)
  3617.         MOVE.L    D3,-2+$54(A1)        DEST ADRES (PLANE)
  3618.         MOVE.W    D1,-2+$58(A1)        BLTSIZE
  3619.         LEA    128(A2),A2
  3620.         DBRA    D7,ICON_32_LOOP
  3621. IC_32_OF_SCREEN    RTS
  3622. IC_32_OF_SCREEN1
  3623.         ADDQ.L    #4,A3
  3624.         RTS
  3625. IC_32_NOT_RES    MOVEQ    #$24,D0
  3626.         RJMP    L_ERROR
  3627. IC_32_NOT_DEF    MOVEQ    #$4A,D0
  3628.         RJMP    L_ERROR
  3629.  
  3630.  
  3631. F_16BIT_ICON    EQU    84
  3632. L84        MOVE.L    (A3)+,D1
  3633.         RBLE    L_IFONC
  3634.         MOVE.L    ABANKS(A5),A0
  3635.         MOVE.L    8(A0),A2
  3636. ;        MOVE.L    8(A0),D0
  3637. ;        BEQ    IC_16_NOT_RES
  3638. ;        MOVE.L    D0,A2
  3639.         ADDQ.L    #8,A2
  3640. ;        CMP.W    (A2),D1
  3641. ;        BHI    IC_16_NOT_DEF
  3642.         LSL.W    #3,D1
  3643.         LEA    -6(A2,D1.W),A2    PTR TO ICON DEFINITION    
  3644.         MOVE.L    (A2),A2
  3645. ;        MOVE.L    (A2),D0        GET ICON ADDRESS
  3646. ;        BEQ    IC_32_NOT_DEF
  3647. ;        MOVE.L    D0,A2
  3648.         MOVE.L    (A3)+,D1    D1=Y 
  3649.         BLT.S    IC_16_OF_SCREEN1
  3650.         MOVE.L    (A3)+,D2    D2=X
  3651.         BLT.S    IC_16_OF_SCREEN
  3652.         AND.W    #$FFF0,D2    X 32 BIT BOUNDARY
  3653.         AND.W    #$FFF0,D1    Y 32 BIT BOUNDARY
  3654.         MOVE.L    SCONAD(A5),A0    ADRES ACTUAL SCREEN
  3655.         MOVEM.W    ECTX(A0),D5-7    D5=ECTX D6=ECTY D7=ECNPLAN
  3656.         MOVEQ.L    #0,D4        TEST PARAM FOR COORDS OF ICON
  3657. ;        CMP.W    D4,D1        Y<0 ?
  3658. ;        BLT.S    IC_16_OF_SCREEN
  3659. ;        CMP.W    D4,D2        X<0 ?
  3660. ;        BLT.S    IC_16_OF_SCREEN
  3661.         CMP.W    D6,D1        Y>=ECTY ?
  3662.         BGE.S    IC_16_OF_SCREEN
  3663.         CMP.W    D5,D2        X>=ECTX ?
  3664.         BGE.S    IC_16_OF_SCREEN
  3665.         MOVE.W    ECTLIGNE(A0),D0    BYTES IN LINE
  3666.         MOVE.W    D0,D5
  3667.         MULU    D1,D0        Y * BYTES IN LINE
  3668.         LSR.W    #3,D2        X / 8
  3669.         ADD.L    D2,D0        D0 = OFFSET START (Y*BYTES+X/8)
  3670.         SUBQ.W    #2,D5        D5 = BLTAMOD (BYTES LINE-BYTES ICON)
  3671.         MOVE.W    #$802/2,D1    BLTSIZE
  3672.         MOVE.W    4(A2),D3    D3 = NUMBER OF PLANES IN ICON
  3673.         CMP.W    D3,D7        NUMBER OF PLANES IN SCREEN <
  3674.         BLT.S    PUT_16_PLAN    NUMBER OF PLANES IN ICON ?
  3675.         MOVE.W    D3,D7        NUMBER OF PLANES ICON FOR LOOP
  3676. PUT_16_PLAN    SUBQ    #1,D7        -1 FOR DBRA
  3677.         LEA    10(A2),A2    SOURCE ADDRESS        
  3678.         LEA    $DFF002,A1    BASE CUSTOM+2
  3679.         MOVEQ.L    #-1,D6        INIT BLTAFLWM
  3680.         MOVE.L    #$9F00000,D2    INIT BLTCON0/1
  3681. ICON_16_LOOP    MOVE.L    (A0)+,D3        ADRES PLANES 1 --> 6
  3682.         ADD.L    D0,D3            ADD OFFSET TO PLANE
  3683. WAIT_16_LOOP    BTST    #14,(A1)
  3684.         BNE.S    WAIT_16_LOOP
  3685.         MOVEM.L    D2/D6,-2+$40(A1)    BLTCON0/1 + BLTAFLWM
  3686.         MOVEM.L    D4-5,-2+$60(A1)        BLTCBAMOD AND BLTDMOD
  3687.         MOVE.L    A2,-2+$50(A1)        SOURCE ADRES (ICON)
  3688.         MOVE.L    D3,-2+$54(A1)        DEST ADRES (PLANE)
  3689.         MOVE.W    D1,-2+$58(A1)        BLTSIZE
  3690.         LEA    32(A2),A2        ADD SIZE ICON TO PTR
  3691.         DBRA    D7,ICON_16_LOOP
  3692. IC_16_OF_SCREEN    RTS
  3693. IC_16_OF_SCREEN1
  3694.         ADDQ.L    #4,A3
  3695.         RTS
  3696. IC_16_NOT_RES    MOVEQ    #$24,D0
  3697.         RJMP    L_ERROR
  3698. IC_16_NOT_DEF    MOVEQ    #$4A,D0
  3699.         RJMP    L_ERROR
  3700.  
  3701.  
  3702. F_PROC_16ICON    EQU    85
  3703. L85        MOVE.L    (A3)+,D1
  3704.         RBLE    L_IFONC
  3705.         MOVE.L    ABANKS(A5),A0
  3706.         MOVE.L    8(A0),A2
  3707. ;        MOVE.L    8(A0),D0
  3708. ;        BEQ    IC_16_NOT_RES
  3709. ;        MOVE.L    D0,A2
  3710.         ADDQ.L    #8,A2
  3711. ;        CMP.W    (A2),D1
  3712. ;        BHI    IC_16_NOT_DEF
  3713.         LSL.W    #3,D1
  3714.         LEA    -6(A2,D1.W),A2    PTR TO ICON DEFINITION    
  3715.         MOVE.L    (A2),A2
  3716. ;        MOVE.L    (A2),D0        GET ICON ADDRESS
  3717. ;        BEQ    IC_32_NOT_DEF
  3718. ;        MOVE.L    D0,A2
  3719.         MOVE.L    (A3)+,D1    D1=Y 
  3720.         BLT    IC_PROC_16OF_SCREEN1
  3721.         MOVE.L    (A3)+,D2    D2=X
  3722.         BLT.S    IC_PROC_16OF_SCREEN
  3723.         AND.W    #$FFF0,D2    X 32 BIT BOUNDARY
  3724.         AND.W    #$FFF0,D1    Y 32 BIT BOUNDARY
  3725.         MOVE.L    SCONAD(A5),A0    ADRES ACTUAL SCREEN
  3726.         MOVEM.W    ECTX(A0),D5-7    D5=ECTX D6=ECTY D7=ECNPLAN
  3727. ;        MOVEQ.L    #0,D4        TEST PARAM FOR COORDS OF ICON
  3728. ;        CMP.W    D4,D1        Y<0 ?
  3729. ;        BLT.S    IC_PROC_16OF_SCREEN
  3730. ;        CMP.W    D4,D2        X<0 ?
  3731. ;        BLT.S    IC_PROC_16OF_SCREEN
  3732.         CMP.W    D6,D1        Y>=ECTY ?
  3733.         BGE.S    IC_PROC_16OF_SCREEN
  3734.         CMP.W    D5,D2        X>=ECTX ?
  3735.         BGE.S    IC_PROC_16OF_SCREEN
  3736.         MOVE.W    ECTLIGNE(A0),D0    BYTES IN LINE
  3737.         MOVE.W    D0,D5
  3738.         MULU    D1,D0        Y * BYTES IN LINE
  3739.         LSR.W    #3,D2        X / 8
  3740.         ADD.L    D2,D0        D0 = OFFSET START (Y*BYTES+X/8)
  3741.         MOVE.W    4(A2),D3
  3742.         CMP.W    D3,D7
  3743.         BLT.S    PUT_PROC_16PLAN
  3744.         MOVE.W    D3,D7
  3745. PUT_PROC_16PLAN    SUBQ    #1,D7
  3746.         LEA    10(A2),A2
  3747. PUT_PROC_16LOOP    MOVE.L    (A0)+,A1
  3748.         ADD.L    D0,A1
  3749. PUT_DATA_16LOOP    MOVE.W    (A2)+,(A1)
  3750.         ADD.W    D5,A1
  3751.         MOVE.W    (A2)+,(A1)
  3752.         ADD.W    D5,A1
  3753.         MOVE.W    (A2)+,(A1)
  3754.         ADD.W    D5,A1
  3755.         MOVE.W    (A2)+,(A1)
  3756.         ADD.W    D5,A1
  3757.         MOVE.W    (A2)+,(A1)
  3758.         ADD.W    D5,A1
  3759.         MOVE.W    (A2)+,(A1)
  3760.         ADD.W    D5,A1
  3761.         MOVE.W    (A2)+,(A1)
  3762.         ADD.W    D5,A1
  3763.         MOVE.W    (A2)+,(A1)
  3764.         ADD.W    D5,A1
  3765.         MOVE.W    (A2)+,(A1)
  3766.         ADD.W    D5,A1
  3767.         MOVE.W    (A2)+,(A1)
  3768.         ADD.W    D5,A1
  3769.         MOVE.W    (A2)+,(A1)
  3770.         ADD.W    D5,A1
  3771.         MOVE.W    (A2)+,(A1)
  3772.         ADD.W    D5,A1
  3773.         MOVE.W    (A2)+,(A1)
  3774.         ADD.W    D5,A1
  3775.         MOVE.W    (A2)+,(A1)
  3776.         ADD.W    D5,A1
  3777.         MOVE.W    (A2)+,(A1)
  3778.         ADD.W    D5,A1
  3779.         MOVE.W    (A2)+,(A1)
  3780.         DBRA    D7,PUT_PROC_16LOOP
  3781. IC_PROC_16OF_SCREEN
  3782.         RTS
  3783. IC_PROC_16OF_SCREEN1
  3784.         ADDQ.L    #4,A3
  3785.         RTS
  3786.  
  3787. F_PROC_32ICON    EQU    86
  3788. L86        MOVE.L    (A3)+,D1
  3789.         RBLE    L_IFONC
  3790.         MOVE.L    ABANKS(A5),A0
  3791.         MOVE.L    8(A0),A2
  3792. ;        MOVE.L    8(A0),D0
  3793. ;        BEQ    IC_16_NOT_RES
  3794. ;        MOVE.L    D0,A2
  3795.         ADDQ.L    #8,A2
  3796. ;        CMP.W    (A2),D1
  3797. ;        BHI    IC_16_NOT_DEF
  3798.         LSL.W    #3,D1
  3799.         LEA    -6(A2,D1.W),A2    PTR TO ICON DEFINITION    
  3800.         MOVE.L    (A2),A2
  3801. ;        MOVE.L    (A2),D0        GET ICON ADDRESS
  3802. ;        BEQ    IC_32_NOT_DEF
  3803. ;        MOVE.L    D0,A2
  3804.         MOVE.L    (A3)+,D1    D1=Y
  3805.         BLT    IC_PROC_32OF_SCREEN1
  3806.         MOVE.L    (A3)+,D2    D2=X
  3807.         BLT    IC_PROC_32OF_SCREEN
  3808.         AND.W    #$FFF0,D2    X 32 BIT BOUNDARY
  3809.         AND.W    #$FFF0,D1    Y 32 BIT BOUNDARY
  3810.         MOVE.L    SCONAD(A5),A0    ADRES ACTUAL SCREEN
  3811.         MOVEM.W    ECTX(A0),D5-7    D5=ECTX D6=ECTY D7=ECNPLAN
  3812. ;        MOVEQ.L    #0,D4        TEST PARAM FOR COORDS OF ICON
  3813. ;        CMP.W    D4,D1        Y<0 ?
  3814. ;        BLT    IC_PROC_32OF_SCREEN
  3815. ;        CMP.W    D4,D2        X<0 ?
  3816. ;        BLT    IC_PROC_32OF_SCREEN
  3817.         CMP.W    D6,D1        Y>=ECTY ?
  3818.         BGE    IC_PROC_32OF_SCREEN
  3819.         CMP.W    D5,D2        X>=ECTX ?
  3820.         BGE    IC_PROC_32OF_SCREEN
  3821.         MOVE.W    ECTLIGNE(A0),D0    BYTES IN LINE
  3822.         MOVE.W    D0,D5
  3823.         MULU    D1,D0        Y * BYTES IN LINE
  3824.         LSR.W    #3,D2        X / 8
  3825.         ADD.L    D2,D0        D0 = OFFSET START (Y*BYTES+X/8)
  3826.         MOVE.W    4(A2),D3
  3827.         CMP.W    D3,D7
  3828.         BLT.S    PUT_PROC_32PLAN
  3829.         MOVE.W    D3,D7
  3830. PUT_PROC_32PLAN    SUBQ    #1,D7
  3831.         LEA    10(A2),A2
  3832. PUT_PROC_32LOOP    MOVE.L    (A0)+,A1
  3833.         ADD.L    D0,A1
  3834. PUT_DATA_32LOOP    MOVE.L    (A2)+,(A1)
  3835.         ADD.W    D5,A1
  3836.         MOVE.L    (A2)+,(A1)
  3837.         ADD.W    D5,A1
  3838.         MOVE.L    (A2)+,(A1)
  3839.         ADD.W    D5,A1
  3840.         MOVE.L    (A2)+,(A1)
  3841.         ADD.W    D5,A1
  3842.         MOVE.L    (A2)+,(A1)
  3843.         ADD.W    D5,A1
  3844.         MOVE.L    (A2)+,(A1)
  3845.         ADD.W    D5,A1
  3846.         MOVE.L    (A2)+,(A1)
  3847.         ADD.W    D5,A1
  3848.         MOVE.L    (A2)+,(A1)
  3849.         ADD.W    D5,A1
  3850.         MOVE.L    (A2)+,(A1)
  3851.         ADD.W    D5,A1
  3852.         MOVE.L    (A2)+,(A1)
  3853.         ADD.W    D5,A1
  3854.         MOVE.L    (A2)+,(A1)
  3855.         ADD.W    D5,A1
  3856.         MOVE.L    (A2)+,(A1)
  3857.         ADD.W    D5,A1
  3858.         MOVE.L    (A2)+,(A1)
  3859.         ADD.W    D5,A1
  3860.         MOVE.L    (A2)+,(A1)
  3861.         ADD.W    D5,A1
  3862.         MOVE.L    (A2)+,(A1)
  3863.         ADD.W    D5,A1
  3864.         MOVE.L    (A2)+,(A1)
  3865.         ADD.W    D5,A1
  3866.         MOVE.L    (A2)+,(A1)
  3867.         ADD.W    D5,A1
  3868.         MOVE.L    (A2)+,(A1)
  3869.         ADD.W    D5,A1
  3870.         MOVE.L    (A2)+,(A1)
  3871.         ADD.W    D5,A1
  3872.         MOVE.L    (A2)+,(A1)
  3873.         ADD.W    D5,A1
  3874.         MOVE.L    (A2)+,(A1)
  3875.         ADD.W    D5,A1
  3876.         MOVE.L    (A2)+,(A1)
  3877.         ADD.W    D5,A1
  3878.         MOVE.L    (A2)+,(A1)
  3879.         ADD.W    D5,A1
  3880.         MOVE.L    (A2)+,(A1)
  3881.         ADD.W    D5,A1
  3882.         MOVE.L    (A2)+,(A1)
  3883.         ADD.W    D5,A1
  3884.         MOVE.L    (A2)+,(A1)
  3885.         ADD.W    D5,A1
  3886.         MOVE.L    (A2)+,(A1)
  3887.         ADD.W    D5,A1
  3888.         MOVE.L    (A2)+,(A1)
  3889.         ADD.W    D5,A1
  3890.         MOVE.L    (A2)+,(A1)
  3891.         ADD.W    D5,A1
  3892.         MOVE.L    (A2)+,(A1)
  3893.         ADD.W    D5,A1
  3894.         MOVE.L    (A2)+,(A1)
  3895.         ADD.W    D5,A1
  3896.         MOVE.L    (A2)+,(A1)
  3897.         DBRA    D7,PUT_PROC_32LOOP
  3898. IC_PROC_32OF_SCREEN
  3899.         RTS
  3900. IC_PROC_32OF_SCREEN1
  3901.         ADDQ.L    #4,A3
  3902.         RTS
  3903.  
  3904. L_ICON_X    EQU    87
  3905. L87        MOVE.L    (A3)+,D1
  3906.         RBLE    L_IFONC
  3907.         MOVE.L    ABANKS(A5),A0
  3908.         MOVE.L    8(A0),D0
  3909.         BEQ.S    IC_X_NOT_RES
  3910.         MOVE.L    D0,A2
  3911.         ADDQ.L    #8,A2
  3912.         CMP.W    (A2),D1
  3913.         BHI.S    ICON_X_NOT_DEF
  3914.         LSL.W    #3,D1
  3915.         LEA    -6(A2,D1.W),A2    PTR TO ICON DEFINITION    
  3916.         MOVE.L    (A2),D0        GET ICON ADDRESS
  3917.         BEQ.S    ICON_X_NOT_DEF
  3918.         MOVE.L    D0,A2
  3919.         MOVE.W    (A2),D3
  3920.         MOVEQ    #0,D2
  3921.         RTS
  3922. IC_X_NOT_RES    MOVEQ    #$24,D0
  3923.         RJMP    L_ERROR
  3924. ICON_X_NOT_DEF    MOVEQ    #$4A,D0
  3925.         RJMP    L_ERROR
  3926.  
  3927. L_ICON_Y    EQU    88
  3928. L88        MOVE.L    (A3)+,D1
  3929.         RBLE    L_IFONC
  3930.         MOVE.L    ABANKS(A5),A0
  3931.         MOVE.L    8(A0),D0
  3932.         BEQ.S    IC_Y_NOT_RES
  3933.         MOVE.L    D0,A2
  3934.         ADDQ.L    #8,A2
  3935.         CMP.W    (A2),D1
  3936.         BHI.S    ICON_Y_NOT_DEF
  3937.         LSL.W    #3,D1
  3938.         LEA    -6(A2,D1.W),A2    PTR TO ICON DEFINITION    
  3939.         MOVE.L    (A2),D0        GET ICON ADDRESS
  3940.         BEQ.S    ICON_Y_NOT_DEF
  3941.         MOVE.L    D0,A2
  3942.         MOVE.W    2(A2),D3
  3943.         MOVEQ    #0,D2
  3944.         RTS
  3945. IC_Y_NOT_RES    MOVEQ    #$24,D0
  3946.         RJMP    L_ERROR
  3947. ICON_Y_NOT_DEF    MOVEQ    #$4A,D0
  3948.         RJMP    L_ERROR
  3949.  
  3950. L_ICON_PLANES    EQU    89
  3951. L89        MOVE.L    (A3)+,D1
  3952.         RBLE    L_IFONC
  3953.         MOVE.L    ABANKS(A5),A0
  3954.         MOVE.L    8(A0),D0
  3955.         BEQ.S    IC_PLANES_NOT_RES
  3956.         MOVE.L    D0,A2
  3957.         ADDQ.L    #8,A2
  3958.         CMP.W    (A2),D1
  3959.         BHI.S    ICON_PLANES_NOT_DEF
  3960.         LSL.W    #3,D1
  3961.         LEA    -6(A2,D1.W),A2    PTR TO ICON DEFINITION    
  3962.         MOVE.L    (A2),D0        GET ICON ADDRESS
  3963.         BEQ.S    ICON_PLANES_NOT_DEF
  3964.         MOVE.L    D0,A2
  3965.         MOVE.W    4(A2),D3
  3966.         MOVEQ    #0,D2
  3967.         RTS
  3968. IC_PLANES_NOT_RES
  3969.         MOVEQ    #$24,D0
  3970.         RJMP    L_ERROR
  3971. ICON_PLANES_NOT_DEF
  3972.         MOVEQ    #$4A,D0
  3973.         RJMP    L_ERROR
  3974.  
  3975.  
  3976. L_CPU_INFO    EQU    90
  3977. L90        MOVE.L    A6,A2
  3978.         MOVE.L    $4.W,A6        
  3979.         MOVE.W    296(A6),D1
  3980.         BTST    #3,D1
  3981.         BNE.S    CPU040
  3982.         BTST    #2,D1
  3983.         BNE.S    CPU030
  3984.         BTST    #1,D1
  3985.         BNE.S    CPU020
  3986.         BTST    #0,D1
  3987.         BNE.S    CPU010
  3988. CPU000        MOVEQ    #0,D3
  3989.         BRA.S    CPU_OK
  3990. CPU010        MOVEQ    #10,D3
  3991.         BRA.S    CPU_OK
  3992. CPU020        MOVEQ    #20,D3
  3993.         BRA.S    CPU_OK
  3994. CPU030        MOVEQ    #30,D3
  3995.         BRA.S    CPU_OK
  3996. CPU040        MOVEQ    #40,D3
  3997. CPU_OK        MOVEQ    #0,D2
  3998.         MOVE.L    A2,A6
  3999.         RTS
  4000.  
  4001. L_MATH_INFO    EQU    91
  4002. L91        MOVEQ.L    #0,D3    INIT RESULT
  4003.         MOVEQ.L    #0,D2    AS AN INTEGER
  4004.         MOVE.L    A6,A2
  4005.         MOVE.L    $4.W,A6        
  4006.         MOVE.W    296(A6),D1
  4007.         BTST    #4,d1
  4008.         BNE.S    FOUND_881
  4009.         BTST    #5,d1
  4010.         BNE.S    FOUND_882
  4011.         BRA.S    FPU_FOUND    
  4012. FOUND_882    MOVE.L    #882,D3
  4013.         BRA.S    FPU_FOUND
  4014. FOUND_881    MOVE.L    #881,D3
  4015. FPU_FOUND    MOVE.L    A2,A6
  4016.         RTS
  4017.  
  4018.  
  4019. L92
  4020. L93
  4021. ***********************************************************
  4022. *     Customized error messages
  4023. ; This list of routines just load in D0 the number of the error message in
  4024. ; the extension error-list, and call the error handling routine.
  4025.  
  4026.  
  4027. *********************************************************************
  4028. *    ERROR MESSAGES...
  4029.  
  4030. L_Custom    equ    94
  4031. L94    lea    ErrMess(pc),a0
  4032.     moveq    #0,d1            * Can be trapped
  4033.     moveq    #ExtNb,d2        * Number of extension
  4034.     moveq    #0,d3            * IMPORTANT!!!
  4035.     RJmp    L_ErrorExt        * Jump to routine...
  4036. * Messages...
  4037. ErrMess    dc.b    "Check allready reserved",0            *0
  4038.     dc.b     "Check not reserved",0                *1
  4039.     dc.b     "Object is allready defined",0            *2
  4040.     dc.b    "Object is not defined",0            *3
  4041.     dc.b    "Too many draws in object",0            *4
  4042.     dc.b    "Too many moves in object",0            *5
  4043.     dc.b    "Too many attributes in object",0        *6
  4044.     dc.b    "This is not an object file",0            *7
  4045.     dc.b    "Stars allready reserved",0            *8
  4046.     dc.b    "Stars not reserved",0                *9
  4047.     dc.b    "Stars int allready on",0            *10
  4048.     dc.b    "Blit store allready defined",0            *11
  4049.     dc.b    "Blit store not defined",0            *12
  4050.     dc.b    "Blit int allready on",0            *13
  4051.     dc.b    "Limit allready set",0                *14
  4052.     dc.b    "Limit allready cleared",0            *15
  4053.     dc.b    "Limit should be max : 32000",0            *16
  4054.     dc.b    "Some objects still defined, Erase them",0    *17
  4055.     dc.b    "Object count exceeds object limit",0        *18
  4056.  
  4057. * IMPORTANT! Always EVEN!
  4058.     even
  4059.  
  4060. ******* "No errors" routine
  4061. ; If you compile with -E0, the compiler will replace the previous
  4062. ; routine by this one. This one just sets D3 to -1, and does not
  4063. ; load messages in A0. Anyway, values in D1 and D2 must be valid.
  4064. ;    
  4065. ; THIS ROUTINE MUST BE THE LAST ONE IN THE LIBRARY!
  4066. ;
  4067.  
  4068. L95    moveq    #0,d1
  4069.     moveq    #ExtNb,d2
  4070.     moveq    #-1,d3
  4071.     RJmp    L_ErrorExt
  4072.  
  4073. ; Do not forget the last label to delimit the last library routine!
  4074. L96
  4075.  
  4076. *********************************************************************
  4077. ; Now the title of the extension. If you come from V1.23 note that
  4078. ; the cursor is no more located on the screen, instead a CDOWN (31)
  4079. ; control code is used...
  4080.  
  4081. ******* TITLE MESSAGE
  4082. C_Title    dc.b    31,"TURBO EXTENSION V1.6 ",10
  4083.     Even
  4084.  
  4085. ******* END OF THE EXTENSION
  4086. C_End    dc.w    0
  4087.     even
  4088.  
  4089.  
  4090.  
  4091.  
  4092.  
  4093.  
  4094.