source: buchla-68k/vlib/glcplot.s@ 109c83b

Last change on this file since 109c83b was 109c83b, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Compiled full ROM in Hatari.

  • Property mode set to 100644
File size: 2.1 KB
Line 
1* ------------------------------------------------------------------------------
2* glcplot.s -- plot a pixel on the LCD display
3* Version 2 -- 1987-04-23 -- D.N. Lynx Crowe
4* (c) Copyright 1987 -- D.N. Lynx Crowe
5*
6* GLCplot(x, y, val)
7* unsigned x, y, val);
8*
9* Plot a pixel at ('x', 'y') using lcdbase as the plane address
10* in GLC RAM. If 'val' is zero, the pixel is cleared,
11* otherwise the pixel is cleared. No error checking is done.
12* Limits: 0 LE x LE 511, 0 LE y LE 63.
13* ------------------------------------------------------------------------------
14 .text
15*
16 .xdef _GLCplot
17 .xref _lcd_a0,_lcd_a1,_lcdbase
18*
19XLOC .equ 8 * 'x' parameter offset
20YLOC .equ 10 * 'y' parameter offset
21VAL .equ 12 * 'val' parameter offset
22*
23G_CRSWR .equ $46 * GLC set cursor command
24G_MWRITE .equ $42 * GLC write command
25G_MREAD .equ $43 * GLC read command
26*
27 .page
28*
29_GLCplot: link a6,#0 * Link stack frames
30 moveq #63,d0 * d0 = (63-y) * 85
31 sub.w YLOC(a6),d0 * ...
32 mulu #85,d0 * ...
33 clr.l d1 * d1 = x/6
34 move.w XLOC(a6),d1 * ...
35 divu #6,d1 * ...
36 add.w d1,d0 * d0 = (63-y)*85 + (x/6)
37 swap d1 * d2 = 7 - (x%6) % 8
38 moveq #7,d2 * ...
39 sub.w d1,d2 * ...
40 andi.w #7,d2 * ...
41 lsr.w #3,d1 * d1 = (x%6) / 8
42 add.w d1,d0 * d0 = cursor address
43 add.w _lcdbase,d0 * ...
44 move.w d0,d1 * d1 = cursor address, too
45 move.b #G_CRSWR,_lcd_a1 * Send cursor address to GLC
46 move.b d0,_lcd_a0 * ...
47 lsr.w #8,d0 * ...
48 move.b d0,_lcd_a0 * ...
49 move.b #G_MREAD,_lcd_a1 * Read old pixel byte
50 move.b _lcd_a1,d0 * ... into d0
51 tst.w VAL(a6) * Check val for zero
52 beq glcplt1 * Jump if val EQ 0
53*
54 bset d2,d0 * Set the pixel to 1
55 bra glcplt2 * Go write pixel to GLC
56*
57glcplt1: bclr d2,d0 * Clear the pixel to 0
58*
59glcplt2: move.b #G_CRSWR,_lcd_a1 * Send cursor address to GLC
60 move.b d1,_lcd_a0 * ...
61 lsr.w #8,d1 * ...
62 move.b d1,_lcd_a0 * ...
63 move.b #G_MWRITE,_lcd_a1 * Setup GLC to write pixel
64 move.b d0,_lcd_a0 * Write pixel
65 unlk a6 * Unlink stack frames
66 rts * Return to caller
67*
68 .end
Note: See TracBrowser for help on using the repository browser.