home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 4: Demo 1 / almathera_demo1.bin / commercial / asmonedemo / asm-one / examples / gettingstarted.s < prev    next >
Text File  |  1995-03-16  |  12KB  |  592 lines

  1. ;*******************************************************
  2. ;*    SystemStartUp example that opens a screen and    *
  3. ;*          enables you to read the keyboard           *
  4. ;*                                                     *
  5. ;*      AsmOne example coded by Rune Gram-Madsen       *
  6. ;*                                                     *
  7. ;*       All rights reserved. Copyright (c) 1990       *
  8. ;*******************************************************
  9.  
  10. ; This will draw a Julia fractal picture. This has been implemented
  11. ; just to show something beautifull on the screen. Remove that from
  12. ; the source and insert your own routines here instead.
  13.  
  14. ; This example could have been coded shorter using includefiles. But
  15. ; I think it is nice to have it all in one single program.
  16.  
  17. ; Write 200 here if you live in the US..!!!
  18.  
  19. ScreenHeight = 256    ; 200 if in US
  20.  
  21. IECLASS_RAWKEY = $01
  22. OPENLIB =    -408
  23. CLOSELIB =    -414
  24. OPENSCREEN =    -198
  25. CLOSESCREEN =    -66
  26. OPENWINDOW =    -204
  27. CLOSEWINDOW =    -72
  28. OPENDEVICE =    -444
  29. CLOSEDEVICE =    -450
  30. RAWKEYCONVERT=    -$30
  31. FINDTASK =    -294
  32. WAITPORT =    -384
  33. REPLYMSG =    -378
  34. GETMSG =    -372
  35. LOADRGB4 =     -192
  36.  
  37. RAWKEY      =    $00000400
  38.  
  39. BACKDROP    =    $00000100
  40. BORDERLESS    =    $00000800
  41. ACTIVATE    =    $00001000
  42. RMBTRAP        =    $00010000
  43.  
  44. CUSTOMSCREEN    =    $000F
  45.  
  46. V_HIRES        =    $8000
  47. NULL        =    0
  48.  
  49. ;********************************
  50. ;*    System startup routine    *
  51. ;********************************
  52.  
  53. J    BSR.S    STARTUP
  54.     BEQ.S    .ERROR        ; An error ?
  55.  
  56. ;---  Place your main routine here  ---
  57.  
  58.     BSR.L    JULIA_DRAW    ; Draw the graphics
  59.  
  60. .LOOP1:    BSR.L    KEYB_GETKEY    ; Get a keypression
  61.     CMP.B    #' ',D0        ; A space ??
  62.     BNE.S    .LOOP1        ; No again
  63.  
  64.     BRA.S    CLOSEDOWN    ; Closedown
  65. .ERROR:    RTS
  66.  
  67. ;********  Open up system structures  ********
  68.  
  69. STARTUP:
  70.     MOVE.L    A7,ERROR_STACK    ; Save stack pointer if an error
  71.     BSR.L    TASK_FIND
  72.     BSR.L    INTULIB_OPEN
  73.     BSR.L    GRAPHLIB_OPEN
  74.     BSR.L    SCREEN_OPEN
  75.     BSR.L    WINDOW_OPEN
  76.     BSR.L    KEYB_INIT
  77.     BSR.L    COLORS_SET
  78.     MOVEQ    #-1,D0        ; Set ok value
  79.     RTS
  80.  
  81. ;--- An error has occured ---
  82.  
  83. STARTUP_ERROR:
  84.     MOVE.L    ERROR_STACK,A7    ; Restore old stackpointer
  85.     MOVEQ    #0,D0        ; Set error value
  86.     RTS            ; Return to main to main routine
  87.  
  88. ;*******  Close down system structures  *********
  89.  
  90. CLOSEDOWN:
  91.     BSR.S    KEYB_EXIT
  92.     BSR.L    WINDOW_CLOSE
  93.     BSR.L    SCREEN_CLOSE
  94.     BSR.L    GRAPHLIB_CLOSE
  95.     BRA.S    INTULIB_CLOSE
  96.  
  97. ;*******  Find our task  *******
  98.  
  99. TASK_FIND:
  100.     SUB.L    A1,A1        ; a1 = 0 Our task
  101.     MOVE.L    $4.W,A6        ; Exec pointer    
  102.     JSR    FINDTASK(A6)    ; Call Findtask
  103.     MOVE.L    D0,TASK_PTR    ; Store the pointer for our task
  104.     RTS
  105.  
  106. ;*******  Set the screen colors *******
  107.  
  108. COLORS_SET:
  109.     MOVE.L    SCREEN_HANDLE(PC),A0    ; Get screen handle
  110.     LEA.L    44(A0),A0        ; Get the screens viewport
  111.  
  112.     MOVE.L    GRAPHICS_BASE(PC),A6
  113.     LEA.L    COLORS(PC),A1        ; Pointer to the color list
  114.     MOVEQ    #32,D0            ; 32 colors to set
  115.     JMP    LOADRGB4(A6)        ; Set the colors
  116.  
  117. ;****** Initialize keyboardroutine *******
  118.  
  119. KEYB_INIT:
  120.     MOVE.L    $4.W,A6
  121.     LEA    CONSOLE_NAME(PC),A0    ; Pointer to "Console.Device"
  122.     LEA    IO_REQUEST(PC),A1    ; Io Buffer
  123.     MOVEQ    #-1,D0            ; Flags
  124.     MOVEQ    #0,D1            ; Unit
  125.     JSR    OPENDEVICE(A6)        
  126.     TST.L    D0            ; An error
  127.     BNE.S    STARTUP_ERROR        ; Error quit !!
  128.  
  129.     MOVE.L    IO_REQUEST+20,CONSOLE_DEVICE    ; Get console device
  130.     MOVE.L    WINDOW_HANDLE(PC),A0    ; Window Handle
  131.     MOVE.L    $56(A0),KEY_PORT    ; Get this windows keyport
  132.     RTS
  133.  
  134. ;****** Exit keyboard ******
  135.  
  136. KEYB_EXIT:
  137.     LEA    IO_REQUEST(PC),A1
  138.     MOVE.L    $4.W,A6
  139.     JMP    CLOSEDEVICE(A6)
  140.  
  141. ;******* Open Intution-Library *******
  142.  
  143. INTULIB_OPEN:
  144.     MOVE.L    $4.W,A6
  145.     LEA    INTUITION_NAME(PC),A1    ; Pointer to "intuition.library"
  146.     JSR    OPENLIB(A6)
  147.     MOVE.L    D0,INTUITION_BASE    ; Store pointer
  148.     BEQ.L    STARTUP_ERROR        ; If error jump
  149.     RTS
  150.  
  151. ;******* Close intution-library *******
  152.  
  153. INTULIB_CLOSE:
  154.     MOVE.L    $4.W,A6
  155.     MOVE.L    INTUITION_BASE(PC),A1
  156.     JMP    CLOSELIB(A6)
  157.  
  158. ;******* Open Graphics-Library *******
  159.  
  160. GRAPHLIB_OPEN:
  161.     MOVE.L    $4.W,A6
  162.     LEA    GRAPHICS_NAME(PC),A1    ; Pointer to "graphics.library"
  163.     JSR    OPENLIB(A6)
  164.     MOVE.L    D0,GRAPHICS_BASE    ; Store pointer
  165.     BEQ.L    STARTUP_ERROR        ; If error jump
  166.     RTS
  167.  
  168. ;******* Close Graphics-library *******
  169.  
  170. GRAPHLIB_CLOSE:
  171.     MOVE.L    $4.W,A6
  172.     MOVE.L    GRAPHICS_BASE(PC),A1
  173.     JMP    CLOSELIB(A6)
  174.  
  175. ;******* Open Main Screen *******
  176.  
  177. SCREEN_OPEN:
  178.     LEA.L    SCREEN_DEFS(PC),A0    ; Pointer to screen definitions
  179.     MOVE.L    INTUITION_BASE(PC),A6    ; Get intuition base
  180.     JSR    OPENSCREEN(A6)        ; Open the screen
  181.     MOVE.L    D0,SCREEN_HANDLE
  182.     BEQ.L    STARTUP_ERROR        ; If not opened => error
  183.     MOVE.L    D0,A0
  184.     LEA.L    $C0(A0),A0        ; Get bitplane pointers
  185.     LEA.L    BITPLANE1_PTR(PC),A1
  186.     MOVE.L    (A0)+,(A1)+        ; Bitplane 1
  187.     MOVE.L    (A0)+,(A1)+        ; Bitplane 2
  188.     MOVE.L    (A0)+,(A1)+        ; Bitplane 3
  189.     MOVE.L    (A0)+,(A1)+        ; Bitplane 4
  190.     MOVE.L    (A0)+,(A1)+        ; Bitplane 5
  191.     RTS
  192.  
  193. ;******* Close Main Screen *******
  194.  
  195. SCREEN_CLOSE:
  196.     MOVE.L    SCREEN_HANDLE(PC),A0
  197.     MOVE.L    INTUITION_BASE(PC),A6
  198.     JMP    CLOSESCREEN(A6)
  199.  
  200. ;******* OPEN MAIN WINDOW *******
  201.  
  202. WINDOW_OPEN:
  203.     MOVE.L    INTUITION_BASE(PC),A6    ; Pointer to intuition library
  204.     LEA    WINDOW_DEFS(PC),A0    ; Pointer to window definitions
  205.     JSR    OPENWINDOW(A6)
  206.     MOVE.L    D0,WINDOW_HANDLE    ; Store window handle
  207.     BEQ.L    STARTUP_ERROR        ; Error jump
  208.     MOVE.L    TASK_PTR(PC),A0        ; Get task pointer
  209.     MOVE.L    $B8(A0),TASK_OLDWINDOW    ; Store the old window
  210.     MOVE.L    D0,$B8(A0)        ; Make Reguesters turn up on this
  211.     RTS                ; Window
  212.     
  213. ;******* CLOSE MAIN WINDOW *******
  214.  
  215. WINDOW_CLOSE:
  216.     MOVE.L    TASK_PTR(PC),A0        ; Get task ptr
  217.     MOVE.L    TASK_OLDWINDOW(PC),$B8(A0)    ; Restore old window
  218.     MOVE.L    INTUITION_BASE(PC),A6
  219.     MOVE.L    WINDOW_HANDLE(PC),A0
  220.     JMP    CLOSEWINDOW(A6)
  221.  
  222. ;******* GET KEY PRESS *******
  223.  
  224. KEYB_GETKEY:
  225.     MOVE.W    KEYB_OUTBUFFER(PC),D0    ; Buffer output pointer
  226.     CMP.W    KEYB_INBUFFER(PC),D0    ; Is buffer empty
  227.     BNE.S    KEYB_STILLKEYSINBUFFER    ; No ??
  228.     BSR.L    KEYB_GETKEYS        ; Empty, Wait on a key from
  229.     BRA.S    KEYB_GETKEY        ; the keyboard
  230.  
  231. KEYB_STILLKEYSINBUFFER:
  232.     ADDQ.B    #1,KEYB_OUTBUFFER+1    ; Increase out pointer
  233.     LEA    KEYB_BUFFER(PC),A0    ; Pointer to buffer
  234.     MOVE.B    (A0,D0.W),D0        ; Get the oldest key
  235.     RTS
  236.  
  237. ;******* GET KEY STRING *******
  238.  
  239. KEYB_GETKEYS:
  240.     MOVE.L    KEY_PORT(PC),A5    ; Our key port
  241.     MOVE.L    A5,A0
  242.     MOVE.L    $4.W,A6
  243.     JSR    WAITPORT(A6)    ; Wait for message on the port
  244.     MOVE.L    A5,A0
  245.     JSR    GETMSG(A6)    ; Get the message
  246.     MOVE.L    D0,KEY_MSG
  247.     BEQ.S    KEYB_GETKEYS    ; No message, strange, jump again
  248.  
  249.     MOVE.L    D0,A3        ; Msg now in A3
  250.     MOVE.L    20(A3),D3    ; Get message type
  251.  
  252. ;---  Check if raw key  ---
  253.  
  254.     MOVE.L    D3,D1
  255.     AND.L    #RAWKEY,D1    ; Was it a raw key ??
  256.     BEQ.L    KEYB_ANSWER    ; If no just answer
  257.  
  258. ;---  Key Recieved  ---
  259.  
  260.     MOVE.W    24(A3),D4    ; Key code
  261.     BTST    #7,D4        ; Bit 7 - Key release
  262.     BNE.L    KEYB_ANSWER        ; We dont need them
  263.     MOVE.W    26(A3),D5    ; QUALIFIER
  264.     MOVE.L    28(A3),D6    ; IADDRESS
  265.     MOVE.W    D4,IECODE    ; TRANSFER CODE
  266.     MOVE.W    D5,IEQUAL    ; QUALIFIERS
  267.     MOVE.L    D6,IEADDR    ; AND POINTER TO OLD KEYS
  268.  
  269. ;---  Convert to ascii  ---
  270.  
  271.     LEA    MY_EVENT,A0    ; Pointer to event structure
  272.     LEA    KEY_BUFFER,A1    ; Convert buffer
  273.     MOVEQ    #80,D1        ; Max 80 characters
  274.     SUB.L    A2,A2        ; A2 = 0 Keymap - Default
  275.     MOVE.L    CONSOLE_DEVICE,A6
  276.     JSR    RAWKEYCONVERT(A6) ; Convert the rawkey into Ascii
  277.  
  278. ;---  Copy keys to buffer  ---
  279.  
  280. ; d0 = number of chars in the convert buffer
  281.  
  282. KEYB_COPY_D0_CHARS:
  283.     SUBQ.W    #1,D0
  284.     BMI.S    KEYB_ANSWER        ; No chars ??
  285.     LEA    KEY_BUFFER(PC),A1
  286.     LEA    KEYB_BUFFER(PC),A0
  287.     MOVE.W    KEYB_INBUFFER,D1
  288. .LOOP:    MOVE.B    (A1)+,(A0,D1.W)        ; Copy the keys to the normal
  289.     ADDQ.B    #1,D1            ;  buffer.
  290.     DBF    D0,.LOOP
  291.     MOVE.W    D1,KEYB_INBUFFER
  292.     BRA.L    KEYB_ANSWER        ; Answer
  293.  
  294. ;******* ANSWER KEYPRESS *******
  295.  
  296. KEYB_ANSWER:
  297.     MOVE.L    KEY_MSG(PC),A1
  298.     MOVE.L    $4.W,A6
  299.     JMP    REPLYMSG(A6)        ; Reply the message
  300.  
  301. SCREEN_DEFS:
  302.     DC.W    0,0        ; X-Y position
  303.     DC.W    320        ; Width
  304.     DC.W    ScreenHeight        ; Hight
  305.     DC.W    5        ; Depth
  306.     DC.B    0,1        ; Pen colors
  307.     DC.W    0        ; V_HIRES
  308.     DC.W    CUSTOMSCREEN
  309.     DC.L    FONT_ATTR    ; use Topaz 8 as standard font
  310.     DC.L    SCREEN_NAME
  311.     DC.L    0
  312.     DC.L    0
  313.  
  314. ;***  Window structure  ***
  315.  
  316. WINDOW_DEFS:
  317.     dc.w    0,0        ; X-Y position
  318.     dc.w    320        ; Current width
  319.     dc.w    ScreenHeight        ; Current higth
  320.     dc.b    0,1
  321.     dc.l    RAWKEY        ; Report only raw keys
  322.     dc.l    BACKDROP+BORDERLESS+ACTIVATE+RMBTRAP
  323.     dc.l    NULL
  324.     dc.l    NULL
  325.     DC.L    REQUESTER_NAME    ; Window name
  326. SCREEN_HANDLE:
  327.     dc.l    NULL    ;custom screen pointer
  328.     dc.l    NULL
  329.     dc.w    320        ; Min width 
  330.     dc.w    ScreenHeight        ; Min higth
  331.     dc.w    320        ; Max width
  332.     dc.w    ScreenHeight        ; Max higth
  333.     dc.w    CUSTOMSCREEN    ; A normal window
  334.     EVEN
  335.  
  336. ;---  Topaz font  ---
  337.  
  338. FONT_ATTR:
  339.     DC.L    FONT_NAME    ; Name
  340.     DC.W    8        ; Size
  341.     DC.B    0
  342.     DC.B    0
  343.     DC.W    8        ; Size
  344.  
  345. COLORS:
  346.     DC.W    $0000,$000F,$000E,$000D
  347.     DC.W    $000C,$000B,$000A,$0009
  348.     DC.W    $0008,$0007,$0106,$0205
  349.     DC.W    $0304,$0403,$0502,$0611
  350.     DC.W    $0720,$0831,$0942,$0A53
  351.     DC.W    $0B64,$0C75,$0D86,$0C97
  352.     DC.W    $0BA8,$0A9A,$098B,$0879
  353.     DC.W    $0767,$0555,$0343,$0131
  354.  
  355. FONT_NAME:        DC.B    'topaz.font',0
  356. CONSOLE_NAME:        DC.B    'console.device',0,0
  357. REQUESTER_NAME:        DC.B    'My Requester',0
  358. SCREEN_NAME:        DC.B    'ASM-One example - <SPACE> to quit',0
  359. INTUITION_NAME:        DC.B    'intuition.library',0
  360. GRAPHICS_NAME:        DC.B    'graphics.library',0
  361.     even
  362. CONSOLE_DEVICE:        DC.L    0
  363. INTUITION_BASE:        DC.L    0
  364. GRAPHICS_BASE:        DC.L    0
  365. TASK_OLDWINDOW:        DC.L    0
  366.  
  367. BITPLANE1_PTR:        DC.L    0
  368. BITPLANE2_PTR:        DC.L    0
  369. BITPLANE3_PTR:        DC.L    0
  370. BITPLANE4_PTR:        DC.L    0
  371. BITPLANE5_PTR:        DC.L    0
  372.  
  373. TASK_PTR:        DC.L    0
  374.  
  375. KEYB_BUFFER:        DCB.B    256,0
  376. KEYB_OUTBUFFER:        DC.W    0
  377. KEYB_INBUFFER:        DC.W    0
  378.  
  379. ERROR_STACK:        DC.W    0
  380.  
  381. IO_REQUEST:        DCB.B    32,0
  382. KEY_BUFFER:        DCB.B    80,0
  383. KEY_PORT:        DC.L    0
  384. KEY_MSG:        DC.L    0
  385.  
  386. MY_EVENT:    DC.L    0    ; Insert after each event
  387. EVENT_IECLASS:    DC.B    IECLASS_RAWKEY
  388.         DC.B    0    ; SUBCLASS - A Joke
  389. IECODE:        DC.W    0    ; RAWKEY - Inserted
  390. IEQUAL:        DC.W    0    ; QUALIFIER - SHIFT, CTRL, ETC.
  391. IEADDR:        DC.L    0    ; IAddress
  392.         DC.L    0
  393.         DC.L    0    ; TimeStamp
  394. WINDOW_HANDLE:    DC.L    0
  395.  
  396.  
  397. ;*********************************************
  398. ;*       Little Julia drawing routine        *
  399. ;*********************************************
  400.  
  401. ZOOM1 = 4    ; ZOOM = ZOOM1/ZOOM2
  402. ZOOM2 = 3
  403.  
  404. MANDEL_ON = 0    ; 0 = JULIA, 1 = MANDELBROT
  405.  
  406.     IF    MANDEL_ON
  407. CENTERX = -$400
  408. CENTERY = $0
  409.     ELSE
  410. CENTERX = $0
  411. CENTERY = $0
  412.     ENDC
  413.  
  414. JULIA_DRAW:
  415.     MOVE.L    BITPLANE1_PTR(PC),A0
  416.     MOVE.L    BITPLANE2_PTR(PC),A1
  417.     MOVE.L    BITPLANE3_PTR(PC),A2
  418.     MOVE.L    BITPLANE4_PTR(PC),A3
  419.     MOVE.L    BITPLANE5_PTR(PC),A4
  420.     MOVE.W    #11*40,D0
  421.     ADD.W    D0,A0
  422.     ADD.W    D0,A1
  423.     ADD.W    D0,A2
  424.     ADD.W    D0,A3
  425.     ADD.W    D0,A4
  426.  
  427.     SUB.L    A6,A6        ; J
  428.     MOVE.W    #CENTERY-($2000*ZOOM2/ZOOM1),CORDY
  429. LOOP1:
  430.     SUB.L    A5,A5        ; I
  431.     MOVE.W    #CENTERX-($2000*ZOOM2/ZOOM1)-($2000*ZOOM2/ZOOM1)*(320-(ScreenHeight-11))/320,CORDX
  432. LOOP2:
  433.     MOVE.W    CORDX,D0
  434.     MOVE.W    CORDY,D1
  435.  
  436.     MOVE.W    #30,D7
  437.  
  438.     IF    MANDEL_ON
  439.     MOVE.W    D0,D4
  440.     MOVE.W    D1,D5
  441.     ELSE
  442.     MOVE.W    #$600,D4    ; Start X    - Try to change to $5c
  443.     MOVE.W    #-$100,D5    ; Start Y    - Try to change to -$10
  444.     ENDC
  445.  
  446.     MOVE.W    D0,D2
  447.     MOVE.W    D1,D3
  448.     BRA    BEGIN1
  449.  
  450. LOOP3:    SUB.L    D3,D2        ; X^2-Y^2
  451.     LSL.L    #4,D2
  452.     SWAP    D2
  453.     ADD.W    D4,D2        ; X1
  454.  
  455.     MOVE.W    D1,D3
  456.     MULS    D0,D3        ; X*2*Y
  457.     LSL.L    #5,D3
  458.     SWAP    D3
  459.  
  460.     ADD.W    D5,D3        ; Y1
  461.  
  462.     MOVE.W    D2,D0
  463.     MOVE.W    D3,D1
  464.  
  465. BEGIN1:    MULS    D2,D2
  466.     MULS    D3,D3
  467.     MOVE.L    D2,D6
  468.     ADD.L    D3,D6
  469.  
  470.     CMP.L    #$4000000,D6        ; ESKAPISTISK ?
  471.     BHI.S    NOTDRAW
  472.     DBF    D7,LOOP3
  473. NOTDRAW:
  474.  
  475. ;*****  PLOT  *****
  476.  
  477.     MOVE.L    A5,D2
  478.     MOVE.W    D2,D3
  479.     NOT.W    D3
  480.     LSR.W    #3,D2
  481.     ADD.W    A6,D2
  482.  
  483.     ADD.W    D7,D7
  484.     ADD.W    JUMP_TABEL(PC,D7.W),D7
  485.     JMP    JUMP_TABEL(PC,D7.W)
  486.  
  487.     DR.W    PIXEL_00000
  488. JUMP_TABEL:
  489.     DR.W    PIXEL_11111
  490.     DR.W    PIXEL_11110
  491.     DR.W    PIXEL_11101
  492.     DR.W    PIXEL_11100
  493.     DR.W    PIXEL_11011
  494.     DR.W    PIXEL_11010
  495.     DR.W    PIXEL_11001
  496.     DR.W    PIXEL_11000
  497.     DR.W    PIXEL_10111
  498.     DR.W    PIXEL_10110
  499.     DR.W    PIXEL_10101
  500.     DR.W    PIXEL_10100
  501.     DR.W    PIXEL_10011
  502.     DR.W    PIXEL_10010
  503.     DR.W    PIXEL_10001
  504.     DR.W    PIXEL_10000
  505.  
  506.     DR.W    PIXEL_01111
  507.     DR.W    PIXEL_01110
  508.     DR.W    PIXEL_01101
  509.     DR.W    PIXEL_01100
  510.     DR.W    PIXEL_01011
  511.     DR.W    PIXEL_01010
  512.     DR.W    PIXEL_01001
  513.     DR.W    PIXEL_01000
  514.     DR.W    PIXEL_00111
  515.     DR.W    PIXEL_00110
  516.     DR.W    PIXEL_00101
  517.     DR.W    PIXEL_00100
  518.     DR.W    PIXEL_00011
  519.     DR.W    PIXEL_00010
  520.     DR.W    PIXEL_00001
  521.  
  522. DOTSET:    MACRO
  523. PIXEL_\1:
  524.     IF    [%\1>>0]&1
  525.     BSET    D3,(A0,D2.W)
  526.     ENDC
  527.     IF    [%\1>>1]&1
  528.     BSET    D3,(A1,D2.W)
  529.     ENDC
  530.     IF    [%\1>>2]&1
  531.     BSET    D3,(A2,D2.W)
  532.     ENDC
  533.     IF    [%\1>>3]&1
  534.     BSET    D3,(A3,D2.W)
  535.     ENDC
  536.     IF    [%\1>>4]&1
  537.     BSET    D3,(A4,D2.W)
  538.     ENDC
  539.     BRA    MAIN_LOOP
  540.     ENDM
  541.  
  542.     DOTSET    00000
  543.     DOTSET    00001
  544.     DOTSET    00010
  545.     DOTSET    00011
  546.     DOTSET    00100
  547.     DOTSET    00101
  548.     DOTSET    00110
  549.     DOTSET    00111
  550.     DOTSET    01000
  551.     DOTSET    01001
  552.     DOTSET    01010
  553.     DOTSET    01011
  554.     DOTSET    01100
  555.     DOTSET    01101
  556.     DOTSET    01110
  557.     DOTSET    01111
  558.  
  559.     DOTSET    10000
  560.     DOTSET    10001
  561.     DOTSET    10010
  562.     DOTSET    10011
  563.     DOTSET    10100
  564.     DOTSET    10101
  565.     DOTSET    10110
  566.     DOTSET    10111
  567.     DOTSET    11000
  568.     DOTSET    11001
  569.     DOTSET    11010
  570.     DOTSET    11011
  571.     DOTSET    11100
  572.     DOTSET    11101
  573.     DOTSET    11110
  574.     DOTSET    11111
  575.  
  576. ;*** MAIN LOOP ***
  577.  
  578. MAIN_LOOP:
  579.     ADDQ.W    #1,A5
  580.     ADD.W    #$4000*ZOOM2/ZOOM1/(ScreenHeight-11),CORDX
  581.     CMP.W    #320,A5        ; 320
  582.     BNE.L    LOOP2
  583.     ADD.W    #$4000*ZOOM2/ZOOM1/(ScreenHeight-11),CORDY
  584.     ADD.W    #40,A6
  585.     CMP.W    #(ScreenHeight-11)*40,A6    ; 189
  586.     BNE.L    LOOP1
  587. END:
  588.     RTS
  589.  
  590. CORDX:    DC.W    0
  591. CORDY:    DC.W    0
  592.