	MACRO-80 3.36	17-Mar-80	PAGE	1


                                	.Z80
                                	ENTRY SETP
                                ;
                                ;	SETP.MAC
                                ; setzt einen Semi-Graphik-Punkt bei den Schirmkoord. (x,y), wobei
                                ; x in Reg. E	mit 0 <= x <= XMAX
                                ; y in Reg. D	mit 0 <= y <= YMAX
                                ;
                                ; Die Byte- und Bit-Position im Video-RAM wird wie folgt bestimmt:
                                ; x' = [x/2]	y' = YMAX - [y/4]
                                ; B  = 4*(x mod 2) + 3 - (y mod 4)		Bit-Pos. in Reg. B
                                ; DE = VRAMA + (LINES - 1 - y')*COLS + x'	Attribut-Byte-Pos. im Video RAM
                                ; HL = COFFS + DE				Char.-Byte-Pos.
                                ;
                                ;
  009F                          XMAX	EQU 159		; max. x Koord.
  005F                          YMAX	EQU 95		; max. y Koord.
  0018                          LINES	EQU 24		; Zeilen auf Bildschirm
  0050                          COLS	EQU 80		; Spalten auf Bildschirm
  E000                          VRAMA	EQU 0E000H	; Video RAM Adresse der Attribute
  0800                          COFFS	EQU 00800H	; Offset zur Video RAM Adresse der Zeichen
  0028                          VPORT	EQU 28H		; Video Port Adresse
  0002                          GCS	EQU 02		; Graf. Zeichensatz
                                ;
  0000'   D5                    SETP:	PUSH DE
  0001'   7A                    	LD A,D
  0002'   E6 03                 	AND 3
  0004'   ED 44                 	NEG
  0006'   C6 03                 	ADD A,3
  0008'   47                    	LD B,A		; Bit-Pos. fuer y
  0009'   7A                    	LD A,D
  000A'   CB 3F                 	SRL A
  000C'   CB 3F                 	SRL A
  000E'   ED 44                 	NEG
  0010'   C6 5F                 	ADD A,YMAX
  0012'   57                    	LD D,A		; D = y'
  0013'   7B                    	LD A,E
  0014'   CB 3F                 	SRL A
  0016'   5F                    	LD E,A		; E = x'
  0017'   30 02                 	JR NC,SETP1
  0019'   CB D0                 	SET 2,B		; Bit-Pos. fuer x
  001B'   3E 17                 SETP1:	LD A,LINES-1
  001D'   92                    	SUB D
  001E'   0E 50                 	LD C,COLS
  0020'   CD 0045'              	CALL MULTAC	; HL = A*C
  0023'   16 00                 	LD D,0
	MACRO-80 3.36	17-Mar-80	PAGE	1-1


  0025'   19                    	ADD HL,DE
  0026'   11 E000               	LD DE,VRAMA
  0029'   19                    	ADD HL,DE	; Attribut-Byte Adresse
  002A'   11 0800               	LD DE,COFFS
  002D'   EB                    	EX DE,HL
  002E'   19                    	ADD HL,DE	; Character-Byte Adresse
  002F'   D3 28                 	OUT (VPORT),A
  0031'   1A                    	LD A,(DE)	; Lies Attribut Byte
  0032'   FE 02                 	CP GCS		; Im Graphic Char.Set?
  0034'   CA 003B'              	JP Z,SETP2
  0037'   70                    	LD (HL),B	; Schreibe erstes Grafik-Bit
  0038'   C3 003E'              	JP SETP3
  003B'   7E                    SETP2:	LD A,(HL)
  003C'   B0                    	OR B
  003D'   77                    	LD (HL),A	; Schreibe Grafik-Bit dazu
  003E'   3E 02                 SETP3:	LD A,GCS
  0040'   12                    	LD (DE),A	; Schreibe Attribut-Byte
  0041'   D3 28                 	OUT (VPORT),A
  0043'   D1                    	POP DE
  0044'   C9                    	RET
                                ;
                                ;
                                ;	MULTAC.MAC
                                ; multipliziert den Akku mit Register C und liefert das Ergebnis in Reg. HL.
                                ; (nach L.A.Leventhal Z80 Assembly Language Programming  p.8-11)
                                ;
  0045'   C5                    MULTAC:	PUSH BC
  0046'   D5                    	PUSH DE
  0047'   5F                    	LD E,A
  0048'   16 00                 	LD D,0
  004A'   79                    	LD A,C
  004B'   21 0000               	LD HL,0
  004E'   06 08                 	LD B,8
  0050'   29                    MULT:	ADD HL,HL
  0051'   17                    	RLA
  0052'   30 01                 	JR NC,CHCNT
  0054'   19                    	ADD HL,DE
  0055'   10 F9                 CHCNT:	DJNZ MULT
  0057'   D1                    	POP DE
  0058'   C1                    	POP BC
  0059'   C9                    	RET
                                ;
                                	END
	MACRO-80 3.36	17-Mar-80	PAGE	S


Macros:

Symbols:
CHCNT	0055'	COFFS	0800 	COLS	0050 	GCS	0002 
LINES	0018 	MULT	0050'	MULTAC	0045'	SETP	0000I'
SETP1	001B'	SETP2	003B'	SETP3	003E'	VPORT	0028 
VRAMA	E000 	XMAX	009F 	YMAX	005F 	



No  Fatal error(s)


 0055'   10 F9                 CHCNT:	DJNZ MULT
  0057'   D1                    	POP DE
  0058'