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

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

Converted assembly language files.

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[4f508e6]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| ------------------------------------------------------------------------------
[f40a309]14 .text
[4f508e6]15
[f40a309]16 .xdef _GLCplot
17 .xref _lcd_a0,_lcd_a1,_lcdbase
[4f508e6]18
19XLOC = 8 | 'x' parameter offset
20YLOC = 10 | 'y' parameter offset
21VAL = 12 | 'val' parameter offset
22
23G_CRSWR = 0x46 | GLC set cursor command
24G_MWRITE = 0x42 | GLC write command
25G_MREAD = 0x43 | GLC read command
26
[f40a309]27 .page
[4f508e6]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
[f40a309]68 .end
Note: See TracBrowser for help on using the repository browser.